基础环境设置#
FROM:指定基础镜像- 功能:这是每个
Dockerfile的第一条指令(除注释外)。它决定了你的应用运行在什么环境之上。 - 示例:
FROM ubuntu:24.04(基于 Ubuntu 24.04 系统)或FROM nginx:alpine(基于轻量级的 Nginx 镜像)。
- 功能:这是每个
WORKDIR:设置工作目录- 功能:相当于 Linux 里的
cd命令。后续的RUN、CMD、COPY等指令都会在这个目录下执行。如果目录不存在,Docker 会自动帮你创建。 - 示例:
WORKDIR /app(将后续操作的默认路径设为容器内的/app目录)。
- 功能:相当于 Linux 里的
2. 文件复制#
COPY:复制文件/目录到容器中- 功能:将宿主机(你的电脑或服务器)上的文件或目录,原封不动地拷贝到容器的指定路径下。
- 示例:
COPY . /app(将当前宿主机目录下的所有文件,复制到容器的/app目录下)。
ADD:高级复制- 功能:和
COPY类似,但带有额外功能。如果复制的是一个本地的.tar.gz压缩包,ADD会自动解压到目标路径;它也支持填入一个网络 URL 来下载文件。(新手推荐优先使用COPY,语义更清晰)。
- 功能:和
3. 执行命令与配置#
RUN:在构建镜像时执行命令- 功能:这是构建阶段的主力军。通常用来安装软件包、创建文件夹、配置环境等。注意:每次
RUN都会生成一个新的镜像层,所以通常会把多条命令用&&连起来写。 - 示例:
RUN apt-get update && apt-get install -y curl。
- 功能:这是构建阶段的主力军。通常用来安装软件包、创建文件夹、配置环境等。注意:每次
ENV:设置环境变量- 功能:定义环境变量,后续的
RUN指令可以使用,并且这些变量也会一直保留到容器运行阶段供你的程序读取。 - 示例:
ENV MYSQL_ROOT_PASSWORD=my-secret-pw或ENV PORT=8080。
- 功能:定义环境变量,后续的
EXPOSE:声明监听端口- 功能:这只是一个声明,告诉使用这个镜像的人,该容器内部的程序会使用哪个端口。它不会自动将端口映射到宿主机,映射依然需要在运行
docker run时加上-p参数或在docker-compose.yml中配置。 - 示例:
EXPOSE 80(声明容器内的 Web 服务使用 80 端口)。
- 功能:这只是一个声明,告诉使用这个镜像的人,该容器内部的程序会使用哪个端口。它不会自动将端口映射到宿主机,映射依然需要在运行
4. 容器启动指令#
CMD:容器启动时的默认命令- 功能:指定容器跑起来之后要做的第一件事(例如启动 Nginx、运行 Java 后端应用等)。如果用户在
docker run时手动指定了其他命令,CMD的内容会被覆盖。 - 示例:
CMD ["nginx", "-g", "daemon off;"]。
- 功能:指定容器跑起来之后要做的第一件事(例如启动 Nginx、运行 Java 后端应用等)。如果用户在
ENTRYPOINT:容器启动的主入口- 功能:和
CMD类似,但它不会被轻易覆盖。通常用于让容器表现得像一个独立的可执行程序。如果同时存在ENTRYPOINT和CMD,CMD的内容会作为参数传递给ENTRYPOINT。
- 功能:和
综合示例#
为了方便理解,这里提供一个部署简单前端/静态网页的通用 Dockerfile 模板:
# 1. 声明基础镜像为 Nginx
FROM nginx:latest
# 2. 声明维护者信息(可选)
LABEL maintainer="yourname@example.com"
# 3. 设置工作目录为 Nginx 存放网页的默认路径
WORKDIR /usr/share/nginx/html
# 4. 把当前目录下所有的前端静态文件(如 html/css/js)拷贝到容器的工作目录
COPY ./dist/ .
# 5. 声明容器将提供 80 端口的服务
EXPOSE 80
# 6. 启动 Nginx,并保持在前台运行(防止容器启动后立刻退出)
CMD ["nginx", "-g", "daemon off;"]






