0Pricing
Docker & DevOps Fundamentals · 课时

创建自定义 Docker 镜像

为简单应用构建您的第一个自定义 Docker 镜像,并正确进行标记和版本管理

创建自定义 Docker 镜像 是 CoddyKit 上的免费 Docker & DevOps Fundamentals 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & DevOps Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & DevOps Fundamentals 课程共包含 4 节课。

构建您的第一个 Docker 镜像

为什么要构建自定义镜像?因为它可以将特定应用、依赖项和配置打包成一个可移植单元。这是确保一致性和简化部署的关键。

您可以使用名为 Dockerfile 的文件定义镜像的构建方式。

创建自定义 Docker 镜像 — 插图 1

我们的简单 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.2

Dockerfile 的组成

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 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。

「创建自定义 Docker 镜像」这节课中我会学到什么?

为简单应用构建您的第一个自定义 Docker 镜像,并正确进行标记和版本管理 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Docker & DevOps Fundamentals 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Docker & DevOps Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「创建自定义 Docker 镜像」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Docker & DevOps Fundamentals 课中编写并运行代码吗?

能。每节 Docker & DevOps Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 理解 Dockerfile
  2. 创建自定义 Docker 镜像
  3. 镜像分层与优化
  4. 多阶段构建与更小的镜像
← 返回 Docker & DevOps Fundamentals