3. Dockerfile 制作镜像

什么是 Dockerfile

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

如下图所示

Dockerfile 制作镜像

通常使用 docker commit 命令只是临时修改和验证镜像。最通用的制作镜像的方法通常是使用 Dockerfile 来制作镜像。

Dockerfile 的作用:

使用 Dockerfile 制作镜像的步骤:

  1. 编写 Dockerfile 文件
  2. docker build 命令制作镜像
  3. 测试和运行镜像

3.1 Dockerfile 的语法

Dockerfile 是用来描述镜像制作过程的文本文件,文件内可以由 Docker 规定的一些制作指令。

注释

Dockerfile中允许添加注释,注释的语法同 Python 和 Shell 一致,是 # 号开头,直至物理行末尾。

Dockerfile 的全部指令

指令
说明
示例
FROM
从一个基础镜像创建一个新的镜像。
FROM ubuntu:24.04
COPY
复制一个文件或文件夹到新的镜像
COPY ./ubuntu.sources /etc/apt/sources.list.d/ apt 换源
ADD
类似于 COPYADD 添加 本地文件和远程文件或文件夹,并能够自动解压缩归档的 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/bin
EXPOSE
描述你的应用监听的端口,并暴露出来供宿主机使用 -p 选项映射连接。
EXPOSE 8000 5000/tcpEXPOSE 7001-7005
HEALTHCHECK
在启动时定义容器健康检查。
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost:8000/ || exit 1
LABEL
在一个镜像上添加元数据。如:版本,作者,描述等。
LABEL maintainer="docker@weimingze.com"LABEL version="1.0"
MAINTAINER
设置镜像作者的信息(通常是姓名和联系方式)。
MAINTAINER laowei <docker@weimingze.com>
ONBUILD
设置当本镜像被用作基础镜像时执行的指令。
ONBUILD COPY . /app/srcONBUILD RUN make /app/src
RUN
执行创建命令并创建新的镜像层。
RUN apt update && apt install python3 -y
SHELL
设置镜像默认的 Shell(覆盖)。
SHELL ["/bin/bash", "-c"]
STOPSIGNAL
设置一个退出容器的系统信号。
STOPSIGNAL SIGINT 设置容器停止时发送 SIGINT 信号 (等同于 Ctrl+C)。
USER
设置运行时的用户(镜像内要添加此用户)。
USER weimingzeUSER 1001
VOLUME
创建挂载点,外部可以使用 -v 挂载宿主机路径。
VOLUME /root/mywebsite
WORKDIR
设置工作路径
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 编写完毕。