Docker
结构
- Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信;
- Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布 Docker 容器;
- Docker 客户端和守护进程可以运行在同一个系统上,当然也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程;
- Docker 客户端和守护进程之间通过 socket 或者 RESTful API 进行通信。
结构图如下:
Docker
守护进程
如上图所示,Docker 守护进程运行在一台主机上,用户并不直接和守护进程进行交互,而是通过 Docker 客户端间接和其通信。
Docker
客户端
Docker 客户端实际上是 docker 的二进制程序,是主要的用户与 Docker 交互方式。它接收用户指令并且与背后的 Docker 守护进程通信,如此来回往复。
Docker
镜像
- Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成;
- Docker 使用 UnionFS 来将这些层联合到单独的镜像中;
- UnionFS 允许独立文件系统中的文件和文件夹被透明覆盖,形成一个单独连贯的文件系统;
有了这些层的存在后,Docker 变得非常轻量:当改变了一个 Docker 镜像,比如升级到某个程序到新的版本时,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立,只是一个新的层被添加或升级了。
Docker
仓库
Docker 仓库用来保存镜像的地方,可以理解为代码控制中的代码仓库。
Docker 仓库有公有和私有的概念,公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用(这些镜像可以是自己创建,或者在别人的镜像基础上创建)。
Docker
容器
Docker 容器和文件夹很类似,一个 Docker 容器包含了所有的某个应用运行所需要的环境:
- 每一个 Docker 容器都是从 Docker 镜像创建的;
- Docker 容器可以运行、开始、停止、移动和删除;
- 每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分;
容器配置文件存放目录: /var/lib/docker/containers/[container_id]/