创建自定义 Docker 镜像
为简单应用构建您的第一个自定义 Docker 镜像,并正确进行标记和版本管理
创建自定义 Docker 镜像 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
构建您的第一个 Docker 镜像
为什么要构建自定义镜像?因为它可以将特定应用、依赖项和配置打包成一个可移植单元。这是确保一致性和简化部署的关键。
您可以使用名为 Dockerfile 的文件定义镜像的构建方式。

我们的简单 Web 应用
我们将把一个非常简单的 Python Flask Web 应用容器化。访问其 Web 地址时,它只会返回“Hello from Docker!”。
假设某个目录中包含以下文件:
app.py:Python 应用代码requirements.txt:列出 Python 依赖项Dockerfile:构建镜像的指令
Flask 应用代码
这是我们的基础 Python Flask 应用。它监听 5000 端口,并响应“Hello from Docker!”。
安装 Flask 后,您可以在本地运行它,查看实际运行效果!
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from Docker!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')指定依赖项
我们的应用需要 Flask 库。我们将它列在 requirements.txt 中。此文件会告诉 Docker(以及 Python 的包管理器 pip)需要安装哪些内容。
这样可以确保我们的镜像包含应用运行所需的全部库。
Flask==2.3.2Dockerfile 的组成
Dockerfile 是一个包含构建镜像所需指令的文本文件。每条指令都会创建一个层。下面是我们将使用的指令:
FROM:指定基础镜像(例如 Python)。WORKDIR:设置容器内的工作目录。COPY:将文件从本地计算机复制到镜像中。RUN:执行命令(例如安装依赖项)。EXPOSE:告知 Docker 容器监听哪些端口。CMD:定义容器启动时要运行的默认命令。
编写 Dockerfile
下面是我们 Flask 应用的完整 Dockerfile。请将此文件放在与 app.py 和 requirements.txt 相同的目录中。
# Use an official Python runtime as a parent image
FROM python:3.9-slim-buster
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY requirements.txt .
COPY app.py .
# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# Make port 5000 available to the world outside this container
EXPOSE 5000
# Run app.py when the container launches
CMD ["python", "app.py"]`docker build` 命令
现在,让我们构建镜像!请在存放 Dockerfile 和应用文件的目录中打开终端。
-t 标志会为我们的镜像添加名称(my-flask-app)和版本(1.0)标签。. 表示让 Docker 使用当前目录作为构建上下文。
docker build -t my-flask-app:1.0 .
验证新镜像
构建完成后,您可以列出所有本地 Docker 镜像,以确认新镜像是否存在。
请在输出中查找带有 1.0 标签的 my-flask-app。
docker images
启动应用容器
现在可以查看您的应用实际运行的效果了!使用 docker run 从镜像创建并启动容器。
-p 5000:5000 会将主机上的 5000 端口映射到容器内的 5000 端口。-d 会以分离模式(后台运行)启动容器。
docker run -d -p 5000:5000 my-flask-app:1.0
在浏览器中访问 http://localhost:5000,即可看到“Hello from Docker!”。
镜像标签的最佳实践
标签对于管理镜像的不同版本至关重要。常见做法是使用语义化版本号(例如 1.0.0、2.1.5),同时添加一个 latest 标签。
您可以使用 docker tag 为镜像添加多个标签:
docker tag my-flask-app:1.0 my-flask-app:latest
这样就可以用不同名称引用同一个镜像,为部署提供更大的灵活性。
快速检查
请考虑下面的 Dockerfile 和构建命令:
# Dockerfile content
FROM alpine:latest
WORKDIR /app
COPY . .
CMD ["echo", "Hello"]
docker build -t my-app:v1 .以下哪项关于 docker build -t my-app:v1 . 命令的说法是正确的?
回顾:自定义镜像
做得很好!您已经学会了:
- 为容器化准备一个简单的应用。
- 使用关键指令(
FROM、WORKDIR、COPY、RUN、EXPOSE、CMD)编写基础Dockerfile。 - 使用
docker build -t构建自定义 Docker 镜像。 - 使用
docker images验证镜像。 - 使用
docker run -p从自定义镜像运行容器。 - 理解镜像标签和版本控制的重要性。
接下来,我们将深入了解 Docker 镜像如何通过层构建,以及如何优化镜像大小和构建时间!
常见问题解答
「创建自定义 Docker 镜像」课时是免费的吗?
是的 — 「创建自定义 Docker 镜像」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「创建自定义 Docker 镜像」这节课中我会学到什么?
为简单应用构建您的第一个自定义 Docker 镜像,并正确进行标记和版本管理 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「创建自定义 Docker 镜像」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 理解 Dockerfile
- 创建自定义 Docker 镜像
- 镜像分层与优化
- 多阶段构建与更小的镜像