当前位置: 首页 > Web前端 > HTML

docker基本介绍

时间:2023-03-29 12:09:02 HTML

一句话总结docker是一个用Go语言实现的开源项目,可以让我们方便的创建和使用容器。docker将程序和程序的所有依赖打包到docker容器中,让你的程序在任何环节都能有一致的性能。这里程序的运行依赖是容器就像一个容器,容器所在的操作系统环境就像一艘货船或者一个港口。程序的性能只与集装箱(container)有关,与集装箱放在哪艘货船或港口(操作系统)无关。容器技术只是隔离了应用程序的运行环境,但容器之间可以共享一个操作系统。这里的运行环境是指程序所依赖的各种库和配置。注意,容器是一种通用技术,docker只是其中之一。docker实现优势的一种方式环境隔离docker实现了资源隔离,实现了一台机器上运行的多个容器互不影响。基于容器开发、部署和运行应用,实现更快的交付和部署使用docker,开发者可以使用镜像快速搭建标准的研发环境。开发、测试和运维人员可以直接使用这个镜像部署代码更新,高效的资源利用。docker的运行不需要额外的虚拟化管理程序的支持。它是一种内核级虚拟化,可以实现更高的性能。同时,对资源的额外要求非常低。在几乎任何平台上迁移和扩展docker都更容易。更简单的更新管理运行在dockerfile上,只需要很小的配置修改就可以代替以往大量的更新工作,所有的修改都以增量的方式分布更新,从而实现容器管理的自动化和高效,重启更快。启动一个docker只需要几秒钟,启动一个虚拟机需要几分钟。docker的三个概念docker的整个生命周期由三部分组成:镜像+容器(container)+仓库计算机),下载docker后可以生成多个镜像,每个镜像可以创建多个容器。发布到仓库时,以图片为单位。可以理解为:容器是一个独立的虚拟操作系统,互不影响,镜像是这个操作系统的安装包。生成容器需要生成一次安装包(镜像)。这就是Docker的核心理念。镜像(Image)类似于虚拟机上的镜像。它是包含文件系统的docker引擎的只读模板。任何应用程序都需要一个环境才能运行,而镜像就是用来提供这个运行环境的。例如,Ubuntu镜像是包含Ubuntu操作系统环境的模板(安装包)。同样,如果镜像上安装了Apache软件,则可以称为Apache镜像容器(Container),类似于一个轻量级的沙箱。它被视为一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎在容器中运行,隔离各个应用程序。容器是由镜像创建的应用实例。可以创建、启动、停止和删除容器。每个容器相互隔离,互不影响。注意:图像本身是只读的。当容器从镜像启动时,Docker会在镜像之上创建一个可写层,镜像本身保持不变。仓库(Repository)类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,通常有多个仓库;仓库是存放镜像的地方。一般每个仓库存放一种镜像,每个镜像用tag区分。例如,Ubuntu仓库中存放着多个版本(12.04、14.04等)的Ubuntu镜像。对比传统的虚拟机和容器,可以看出传统的虚拟机每打开一次,就相当于运行一个系统,成本非常高。系统资源,而是容器(以docker为例)。它还起到应用程序之间隔离的作用。它的底层是通过命名空间(namespace)和控制组来实现的。其实质是公开重复的资源,让资源配置更加合理。除了合理的资源分配,它还可以做统一应用环境。基于docker的开发流程,开发者通过dockerfile生成(build)一个镜像(image),通过dockerrun...生成一个容器(container),并可以将这个镜像推送到远程仓库(dockerpush),这可以通过别人下载(dockerpull)然后运行生成容器。并且可以在dockerfile中写入一些环境变量,从而保持环境的一致性,可以移植到任何服务器上。技术实现原理命名空间解决了环境隔离的问题。cgroup解决了计算机资源使用的隔离。码头工人如何工作?docker采用常见的CS架构,即client-server模式。docker客户端负责处理用户输入的各种命令,如dockerbuild、dockerrun等。真正干活的其实是server,也就是dockerdaemon(守护进程),值得注意的是dockerclient和dockerdaemon可以运行在同一台机器上。我们用几个命令来解释docker的工作流程:dockerbuild就是在我们写完dockerfile,交给docker进行“编译”的时候使用这个命令,然后client收到请求后,转发给dockerdaemon,然后docker守护进程根据dockerfile创建一个“可执行程序”映像。dockerrun有了“可执行程序”镜像后,就可以运行程序了。接下来,使用命令dockerrun,dockerdaemon收到这条命令后找到具体的镜像,然后加载到内存中执行。镜像的执行就是所谓的containerdockerpull。其实dockerbuild和dockerrun是最核心的两个命令。如果会用这两个命令,基本上docker就可以用了,剩下的就是一些补充。dockerpull是什么意思?学过git的同学都知道有个gitpull,就是从远程仓库拉取数据。您可以将图像放在dockerhub上。我们使用dockerpull从dockerhub下载镜像。实现非常简单。用户通过docker客户端发送命令。dockerdaemon收到命令后,向dockerregistry发送镜像下载请求。下载后保存在本地,方便我们使用镜像。这是我19年的文章,目前在做Handlingandsorting