Docker基本知识
Docker
是一个开源的应用容器引擎,基于Go
语言开发实现,属于操作系统层面的虚拟化技术。 Docker
可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何安装有Docker
的电脑上。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone
的 app
),更重要的是容器性能开销极低。
Docker和虚拟机的区别:
Docker优势
1、更快速的交付和部署:
对开发和运维员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker
容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。 节约安装各种开发环境的软件的时间。 解决开发环境和生产环境不一致的问题。
2、更轻松的迁移和扩展:
Docker
容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
3、更高的资源利用率:
Docker
对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker
容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker
只需要启动 10 个隔离的应用容器即可。
Docker
背后的想法是创建软件程序可移植的轻量级容器,让其可以在任何安装了Docker
的机器上运行,并不用关心底层操作系统,这点和Java很相似。
Docker项目架构
Docker
使用C/S
架构(Client-Server)。通过docker
客户端连接到Docker
服务器上,从而管理Docker
服务器里面的镜像和容器,类似于git
的架构。
具体的架构可以参见下面这张图,很直观。
Docker的基本概念
镜像(Image
)
Docker
镜像(Image
)就是一个只读的模板。例如:一个镜像可以包含一个完整的操作系统环境,里面仅安装了 Apache
或用户需要的其它应用程序。
镜像可以用来创建Docker容器,一个镜像可以创建很多容器。Docker
提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
容器(Container
)
Docker
利用容器(Container)来运行应用。容器是从镜像创建的运行实例。
容器可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux
环境(包括root
用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
文件系统隔离技术使得Docker
成为了一个非常有潜力的虚拟化技术。在容器中可以对文件进行修改、删除、创建。
仓库(Registry
)
仓库(Repository
)是集中存放镜像文件的场所。
有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag
)。比如阿里云的Docker加速服务器,就是一个仓库注册服务器,下面有很多不同的仓库和镜像。
仓库分为公开仓库(Public
)和私有仓库(Private
)两种形式。最大的公开仓库是 Docker Hub
,存放了数量庞大的镜像供用户下载。国内的公开仓库包括时速云 、网易云等,可以提供大陆用户更稳定快速的访问。当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull
下来就可以了。
Docker
仓库的概念跟 Git
类似,注册服务器可以理解为 GitHub
这样的托管服务。
守护进程(Daemon)
Docker Daemon 是服务器组件,以 Linux 后台服务的方式运行,是 Docker 最核心的后台进程,我们也把它称为守护进程。
它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。
该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过 Docker Daemon 内部的一个路由分发调度,由具体的函数来执行请求。
运行举例:hello-world
容器启动过程如下:
- Docker 客户端执行 docker run 命令。
- Docker Daemon 发现本地没有 hello-world 镜像。
- Daemon 从 Docker Hub 下载镜像。
- 下载完成,镜像 hello-world 被保存到本地。
- Docker Daemon 启动容器。