Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。其基本结构和内容通常包括以下几个部分:
-
基础镜像信息:
FROM
指令是 Dockerfile 中的第一条有效指令,用于指定构建新镜像的基础镜像。例如:FROM ubuntu:latest
-
维护者信息(可选):
MAINTAINER
或LABEL maintainer
指令用来声明镜像的作者或者维护者信息,但MAINTAINER
已被废弃,推荐使用LABEL
替代:LABEL maintainer="yourname@example.com"
-
环境变量设置:
ENV
指令用于设置环境变量,这些变量会在容器启动时生效,并且可以被后续的RUN
命令所引用:ENV MY_VARIABLE=value
-
更新源与安装软件包:
RUN
指令执行 shell 命令或脚本,在构建过程中修改镜像内部的内容,如更新系统、安装软件包等:RUN apt-get update && apt-get install -y package-name
-
复制文件与目录:
COPY
或ADD
指令将宿主机上的文件或目录复制到镜像中:COPY src.txt /app/ ADD mydir /usr/local/mydir/
-
暴露端口:
EXPOSE
指令声明容器运行时要监听的网络端口,这不直接映射到宿主机,而是提供给用户参考:EXPOSE 80 443
-
设置容器启动命令:
CMD
和/或ENTRYPOINT
指令用于指定容器启动后默认执行的命令和参数:
注意:CMD ["executable", "param1", "param2"] ENTRYPOINT ["executable", "entrypoint-param"]
CMD
可以被 docker run 命令后面的命令行参数覆盖,而ENTRYPOINT
则更为固定,一般不会被覆盖。
-
卷挂载(在 Dockerfile 中不设置):
- 容器中的数据持久化通常通过
-v
参数在运行时进行挂载,因此 Dockerfile 不包含设置数据卷挂载的指令。
- 容器中的数据持久化通常通过
-
其他操作:
- 还有其他一些指令如
WORKDIR
设置工作目录,USER
更改运行进程的用户身份,VOLUME
创建匿名数据卷等。
- 还有其他一些指令如
一个简化的 Dockerfile 示例:
# 使用官方 Ubuntu 镜像作为基础镜像
FROM ubuntu:latest
# 维护者信息
LABEL maintainer="docker_user@example.com"
# 更新源并安装 Nginx
RUN apt-get update && apt-get install -y nginx
# 复制配置文件到镜像中
COPY nginx.conf /etc/nginx/
# 将 80 端口暴露出来
EXPOSE 80
# 设置容器启动时执行的命令
CMD ["nginx", "-g", "daemon off;"]
以上就是 Dockerfile 的基本结构和常见指令的用途,实际编写时可以根据项目需求添加更多自定义步骤。