1.1 Docker Images 基础
Docker Images (Docker 镜像) 是用于 Docker 容器的模板。它们包含运行应用所需的所有内容:代码、库、依赖项、工具和配置文件。理解什么是 Docker Images 以及它们是如何构成的,对高效使用 Docker 是很重要的。
Docker Image 是一个 不可变的
模板,用于创建容器。它包含所有必要的组件,以便在隔离环境中运行应用。当你启动容器时,Docker 会从镜像生成一个实例并运行它。
Docker Images 的关键特性:
- 不可变性: Docker 镜像是不可变的。容器中的任何更改都不会影响原始镜像。要更改镜像的内容,必须创建新的镜像。
- 分层结构: Docker Images 是由多层组成的。每一层表示对前一层的更改。这使得可以高效利用存储空间,通过复用现有层。
- 标识: 每个镜像都有一个唯一的标识符 (SHA256 哈希),并且可以有一个或多个标签来简化版本管理。
Docker Images 的结构:
Docker Images 具有分层结构,每一层都是一个文件系统。这些层存储在 Docker 的缓存中,可以被其他镜像重复使用。分层结构使得 Docker 镜像轻量且高效。例如,第一层是操作系统,第二层是 Python,第三层是你的应用程序。
Docker Images 结构的主要组件:
- 基础层 (Base Layer): 镜像的起始层,通常用于创建其他镜像的基础。例如,可以是一个精简的操作系统版本,比如 Ubuntu 或 Alpine Linux。
- 中间层 (Intermediate Layers): 这些层是根据 Dockerfile 中的命令 (例如安装软件包、复制文件等) 创建的。每一层都对前一层进行了更改。
- 最终层 (Final Layer): 根据 CMD,ENTRYPOINT 指令或容器内部的更改创建的最后一层被称为 "容器层"。此层是临时的,仅在容器运行时存在。
1.2 Docker Images 的层是怎么工作的
Docker 镜像中的每一层是基于前一层的更改。当 Docker 创建镜像时,它执行 Dockerfile 文件中的每条指令,并为每次更改添加一个新层。
创建层的示例:
- 基础镜像: 从一个基础镜像开始,比如
ubuntu:20.04
。这将是第一层。 - 安装软件包: 使用命令
RUN apt-get update && apt-get install -y python3
将创建一个新层,其中已安装 Python。 - 复制文件: 使用命令
COPY . /app
将应用程序文件添加到新层。 - 设置工作目录: 使用命令
WORKDIR /app
将创建一个新层设置后续命令的工作目录。
使用层的好处:
- 重用: 层可以被其他镜像重复使用。例如,如果两个镜像使用相同的基础层,Docker 只需加载一次,从而节省空间和时间。
- 缓存: Docker 会缓存层,从而加快构建镜像的速度。如果层没有更改,Docker 将从缓存中使用,而不是重新构建。
- 模块化: 分层结构允许以模块化的方式开发镜像。您可以更新或更改单个层,而不影响整个镜像。
Docker Images 的标识和标签:
每个 Docker Image 都有一个使用其内容及所有层生成的唯一哈希值(SHA256)来标识。为了方便管理和版本控制,Docker Images 也可以使用标签。
镜像标识的示例:
以下命令将显示系统上所有镜像的列表,包括它们的仓库、标签、标识符和大小:
docker images
1.3 使用 Docker Images
Docker 提供了很多命令来操作镜像。以下是主要命令:
- 创建镜像:
docker build
- 从镜像启动容器:
docker run
- 列出镜像:
docker images
- 删除镜像:
docker rmi
- 在 Docker Hub 上搜索镜像:
docker search
- 从 Docker Hub 下载镜像:
docker pull
- 上传镜像到 Docker Hub:
docker push
创建和使用 Docker 镜像的示例:
1. 创建 Dockerfile:
# 使用基础镜像 Ubuntu
FROM ubuntu:20.04
# 安装 Python
RUN apt-get update && apt-get install -y python3
# 将应用程序文件复制到容器中
COPY . /app
# 设置工作目录
WORKDIR /app
# 指定启动应用程序的命令
CMD ["python3", "app.py"]
2. 构建镜像:
使用以下命令,根据当前目录中的 Dockerfile 创建名为 my_python_app
的镜像:
docker build -t my_python_app .
3. 从镜像启动容器:
使用以下命令,从创建的镜像 my_python_app
启动一个后台运行的容器:
docker run -d my_python_app
GO TO FULL VERSION