3. Dockerfile 制作镜像
什么是 Dockerfile
Dockerfile 是一个文本格式的配置文件,包含创建镜像所需要的全部指令。基于在 Dockerfile 中的指令,用户可以快速创建自定义的镜像。
如下图所示

通常使用 docker commit 命令只是临时修改和验证镜像。最通用的制作镜像的方法通常是使用 Dockerfile 来制作镜像。
Dockerfile 的作用:
- 用于描述 Docker 镜像的制作过程。
- 用简单语法用来创建镜像.
- 用自动化的脚本创建镜像
使用 Dockerfile 制作镜像的步骤:
- 编写 Dockerfile 文件
- 用
docker build命令制作镜像 - 测试和运行镜像
3.1 Dockerfile 的语法
Dockerfile 是用来描述镜像制作过程的文本文件,文件内可以由 Docker 规定的一些制作指令。
注释
Dockerfile中允许添加注释,注释的语法同 Python 和 Shell 一致,是 # 号开头,直至物理行末尾。
Dockerfile 的全部指令
指令
说明
示例
FROM从一个基础镜像创建一个新的镜像。
FROM ubuntu:24.04COPY复制一个文件或文件夹到新的镜像
COPY ./ubuntu.sources /etc/apt/sources.list.d/ apt 换源ADD类似于
COPY,ADD 添加 本地文件和远程文件或文件夹,并能够自动解压缩归档的 tar 包。COPY ./mywebsite.tar.gz /root/ARG定义创建时的变量(创建后不存在于镜像中)。
ARG VERSION=24.04 后使用 FROM ubuntu:${VERSION}CMD指定容器主进程执行的缺省命令和参数(可以被
docker run 覆盖)CMD ["python3", "run.py"]ENTRYPOINT指定容器主进程执行的缺省命令。
ENTRYPOINT ["python3"] 然后使用 CMD ["run.py"] 提供参数和选项ENV设置环境变量。
ENV PATH=$PATH:/root/binEXPOSE描述你的应用监听的端口,并暴露出来供宿主机使用
-p 选项映射连接。EXPOSE 8000 5000/tcp、EXPOSE 7001-7005HEALTHCHECK在启动时定义容器健康检查。
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost:8000/ || exit 1LABEL在一个镜像上添加元数据。如:版本,作者,描述等。
LABEL maintainer="docker@weimingze.com"、LABEL version="1.0"MAINTAINER设置镜像作者的信息(通常是姓名和联系方式)。
MAINTAINER laowei <docker@weimingze.com>ONBUILD设置当本镜像被用作基础镜像时执行的指令。
ONBUILD COPY . /app/src 或 ONBUILD RUN make /app/srcRUN执行创建命令并创建新的镜像层。
RUN apt update && apt install python3 -ySHELL设置镜像默认的 Shell(覆盖)。
SHELL ["/bin/bash", "-c"]STOPSIGNAL设置一个退出容器的系统信号。
STOPSIGNAL SIGINT 设置容器停止时发送 SIGINT 信号 (等同于 Ctrl+C)。USER设置运行时的用户(镜像内要添加此用户)。
USER weimingze 或 USER 1001VOLUME创建挂载点,外部可以使用
-v 挂载宿主机路径。VOLUME /root/mywebsiteWORKDIR设置工作路径
WORKDIR /root上述指令详见官方文档: https://docs.docker.com/reference/dockerfile/
接下来我们使用 Dockerfile 来创建 Docker 镜像。
1. 编写文件 Dockerfile
weimingze@mzstudio:~$ vim Dockerfile
2. 写入内容
# 设置基础镜像
FROM ubuntu:24.04
# 设置作者信息
MAINTAINER laowei <docker@weimingze.com>
LABEL version="0.1" description="这是 基于ubuntu 24.04 制作的 python web 服务器镜像" by="魏明择"
# 设置当前时区环境变量为 "Asia/Shanghai"
ENV TZ="Asia/Shanghai"
# 运行命令安装 python3
RUN apt update;
RUN apt install python3 -y;
# 打印一条信息到 `docker build` 命令的标准输出
RUN echo "Python3 Install OK!"
# 设置当前工作路径(等同于 cd 命令)
WORKDIR /root
# 将网页放入镜像的 /root/mywebsite 文件夹
ADD ./mywebsite.tar.gz /root/
# ENV:设置环境变量
ENV PATH=$PATH:/root/bin
# 暴露 8000 端口
EXPOSE 8000
# 设置 挂载点,可以在 docker run 中通过 -v 选项挂载宿主机路径。
VOLUME /root/mywebsite
CMD ["python3", "-m", "http.server", "--directory", "/root/mywebsite", "8000"]
确保上节课用到的mywebsite.tar.gz 文件也在 Dockerfile 所在的文件夹下。
至此 Dockerfile 编写完毕。