Docker架构

Docker架构


1. 镜像和容器


1.1 镜像

镜像(Image)是一个轻量级、独立且可执行的软件包,包含了运行应用程序所需的所有内容,包括代码、运行时、库、环境变量、配置文件等。镜像是 Docker 容器的基础,每个容器都是从镜像启动的。

1.2 容器

容器是从镜像启动的轻量级、可移植的运行实例。容器包含应用程序及其所有依赖环境,并且在与宿主机共享内核的情况下运行。容器相当于一个隔离的环境,能够在不同的机器上保持应用程序运行的一致性。

1.3 可写层

Docker 镜像是只读的。当从镜像启动一个容器时,Docker 会在镜像之上添加一个可写层,所有对容器的修改都发生在这个可写层中,而不会改变底层的镜像。镜像保持只读状态,确保它可以被多个容器复用。

每个容器启动后,镜像层仍然不变,而容器的运行时状态(如文件修改、安装软件等)则记录在独立的可写层中。如果容器被删除,这个可写层也会随之消失,但镜像本身不会受到任何影响。

image-20210731153059464

2. DockerHub


Docker Hub 是 Docker 提供的一个官方的云端镜像仓库服务平台,这样的平台称为Docker Registry。它是一个集中化的存储和分发 Docker 镜像的服务,允许用户上传、下载和共享 Docker 镜像。

国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务阿里云镜像库等。

2.1 Docker Hub 的主要功能

  1. 镜像存储与分发
    • 用户可以将 Docker 镜像推送到 Docker Hub 进行存储和管理。其他用户可以从 Docker Hub 拉取这些镜像并在本地使用。
  2. 公共和私有镜像
    • Docker Hub 支持公共镜像仓库和私有镜像仓库。公共仓库中的镜像可以被任何人访问和下载,而私有仓库则需要访问权限才能使用。
  3. 官方镜像
    • Docker Hub 提供了大量的官方镜像,这些镜像由 Docker 官方维护,经过测试和优化,适用于各种常见的应用程序和服务,如数据库、编程语言环境等。
  4. 自动构建和自动更新
    • Docker Hub 支持自动构建功能,可以与代码托管平台(如 GitHub)集成,自动从代码仓库中构建镜像并更新 Docker Hub 上的镜像。

和Github较为相似。

image-20210731153743354

3. Docker架构


Docker 是一个典型的客户端-服务器(Client-Server, CS)架构的程序,由以下两部分组成:

  1. 服务端(Server):即 Docker 守护进程(Docker Daemon),负责处理 Docker 指令,管理 Docker 镜像、容器、网络和存储等。它运行在后台,接收来自客户端的请求并执行相关操作。

  2. 客户端(Client):即 Docker 客户端,用户通过命令行工具(如 docker 命令)或 REST API 向 Docker 服务端发送指令。客户端可以在本地或远程操作,发起对 Docker 守护进程的请求并接收其响应。

在 Docker 的 CS 架构中,Docker Client 与 Docker Daemon 通常通过网络通信(如 Unix Socket 或 TCP/IP)进行交互。客户端发送请求到守护进程,守护进程执行这些请求并返回结果。

image-20210731154257653

  1. docker build :用于从 Dockerfile 构建 Docker 镜像。
  2. docker pull: 从 Docker 仓库(如 Docker Hub)下载 Docker 镜像到本地。
  3. docker run : 基于镜像创建并启动新的容器。