Docker 架构
架构概述
Docker 架构是基于客户端-服务器模式的,其中包括多个关键组件,确保容器化应用的高效构建、管理和运行。
Docker 的架构设计使得开发者能够轻松地将应用程序与其所有依赖封装在一个可移植的容器中,并在不同的环境中一致地运行。
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程 API 来管理和创建 Docker 容器。
Docker 容器通过 Docker 镜像来创建。
容器与镜像的关系
容器与镜像的关系类似于面向对象编程中的对象与类:
架构示意图

Docker 架构的工作流程
- 构建镜像:使用 Dockerfile 创建镜像。
- 推送镜像到注册表:将镜像上传到 Docker Hub 或私有注册表中。
- 拉取镜像:通过 docker pull 从注册表中拉取镜像。
- 运行容器:使用镜像创建并启动容器。
- 管理容器:使用 Docker 客户端命令管理正在运行的容器(例如查看日志、停止容器、查看资源使用情况等)。
- 网络与存储:容器之间通过 Docker 网络连接,数据通过 Docker 卷或绑定挂载进行持久化。
核心组件及其工作机制
1. Docker 客户端(Docker Client)
Docker 客户端
Docker 客户端是用户与 Docker 守护进程交互的命令行界面(CLI)。它是用户与 Docker 系统的主要交互方式,用户通过 Docker CLI 发出命令,这些命令被发送到 Docker 守护进程, 由守护进程执行相应的操作。
功能:
- 允许用户使用命令与 Docker 守护进程通信,如创建容器、构建镜像、查看容器状态等。
- Docker 客户端与 Docker 守护进程之间通过 REST API 或 Unix 套接字通信。
常用命令:
- docker run:运行容器
- docker ps:列出正在运行的容器
- docker build:构建 Docker 镜像
- docker exec:在容器中执行命令
2. Docker 守护进程(Docker Daemon)
Docker 守护进程
Docker 守护进程(通常是 dockerd)是 Docker 架构的核心,负责管理容器生命周期、 构建镜像、分发镜像等任务。守护进程通常以后台进程的方式运行,等待来自 Docker 客户端的 API 请求。
功能:
- 启动和停止容器
- 构建、拉取和推送镜像
- 管理容器的网络和存储
- 启动、停止、查看容器日志等
- 与 Docker 注册表进行通信,管理镜像的存储与分发
启动 Docker 守护进程(通常是自动启动的):
sudo systemctl start docker
3. Docker 引擎 API(Docker Engine API)
Docker 引擎 API
Docker 引擎 API 是 Docker 提供的 RESTful 接口,允许外部客户端与 Docker 守护进程进行通信。通过这个 API,用户可以执行各种操作,如启动容器、构建镜像、 查看容器状态等。
功能:
- 向 Docker 守护进程发送 HTTP 请求,实现容器、镜像的管理
- 提供 RESTful 接口,允许通过编程与 Docker 进行交互
查询当前 Docker 守护进程的版本:
curl --unix-socket /var/run/docker.sock http://localhost/version
4. Docker 容器(Docker Containers)
Docker 容器
容器是 Docker 的执行环境,它是轻量级、独立且可执行的软件包。容器是从 Docker 镜像启动的,包含了运行某个应用程序所需的一切——从操作系统库到应用程序代码。
功能:
- 提供独立的运行环境,确保应用程序在不同的环境中具有一致的行为
- 容器是临时的,通常在任务完成后被销毁
启动一个容器:
docker run -d ubuntu
5. Docker 镜像(Docker Images)
Docker 镜像
Docker 镜像是容器的只读模板。每个镜像都包含了应用程序运行所需的操作系统、运行时、 库、环境变量和应用代码等。镜像是静态的,用户可以根据镜像启动容器。
功能:
- 镜像是构建容器的基础,每个容器实例化时都会使用镜像
- 镜像是只读的,不同容器使用同一个镜像时,容器中的文件系统层是独立的
拉取 Ubuntu 镜像:
docker pull ubuntu
6. Docker 仓库(Docker Registries)
Docker 仓库
Docker 仓库是用来存储 Docker 镜像的地方,最常用的公共仓库是 Docker Hub。用户可以从 Docker Hub 下载镜像,也可以上传自己的镜像分享给其他人。
功能:
- 存储 Docker 镜像
- 提供镜像的上传和下载功能
推送镜像到 Docker Hub:
docker push <username>/<image_name>
7. Docker Compose
Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 Compose, 用户可以使用一个 docker-compose.yml 配置文件定义多个容器(服务),并可以通过一个命令启动这些容器。
功能:
- 定义和运行多个容器组成的应用
- 通过 YAML 文件来配置应用的服务、网络和卷等
创建一个简单的 docker-compose.yml 文件:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: example
启动 Compose 定义的所有服务:
docker-compose up
8. Docker Swarm
Docker Swarm
Docker Swarm 是 Docker 提供的集群管理和调度工具。它允许将多个 Docker 主机(节点) 组织成一个集群,并通过 Swarm 集群管理工具来调度和管理容器。
功能:
- 管理多节点 Docker 集群
- 通过调度器管理容器的部署和扩展
初始化 Swarm 集群:
docker swarm init
9. Docker 网络(Docker Networks)
Docker 网络
Docker 网络允许容器之间相互通信,并与外部世界进行连接。Docker 提供了多种网络模式来满足 不同的需求,如 bridge 网络(默认)、host 网络和 overlay 网络等。
功能:
- 管理容器间的网络通信
- 支持不同的网络模式,以适应不同场景下的需求
创建一个自定义网络并将容器连接到该网络:
docker network create my_network
docker run -d --network my_network ubuntu
10. Docker 卷(Docker Volumes)
Docker 卷
Docker 卷是一种数据持久化机制,允许数据在容器之间共享,并且独立于容器的生命周期。 与容器文件系统不同,卷的内容不会随着容器的销毁而丢失,适用于数据库等需要持久存储的应用。
功能:
- 允许容器间共享数据
- 保证数据持久化,独立于容器的生命周期
创建并挂载卷:
docker volume create my_volume
docker run -d -v my_volume:/data ubuntu