跳过正文
  1. 系列/
  2. 技术番外/

番外:Dockerfile 常用指令详解

其雁过无痕
作者
其雁过无痕
目录

基础环境设置
#

  • FROM指定基础镜像
    • 功能:这是每个 Dockerfile第一条指令(除注释外)。它决定了你的应用运行在什么环境之上。
    • 示例FROM ubuntu:24.04 (基于 Ubuntu 24.04 系统)或 FROM nginx:alpine (基于轻量级的 Nginx 镜像)。
  • WORKDIR设置工作目录
    • 功能:相当于 Linux 里的 cd 命令。后续的 RUNCMDCOPY 等指令都会在这个目录下执行。如果目录不存在,Docker 会自动帮你创建。
    • 示例WORKDIR /app (将后续操作的默认路径设为容器内的 /app 目录)。

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-pwENV 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;"]
  • ENTRYPOINT容器启动的主入口
    • 功能:和 CMD 类似,但它不会被轻易覆盖。通常用于让容器表现得像一个独立的可执行程序。如果同时存在 ENTRYPOINTCMDCMD 的内容会作为参数传递给 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;"]

相关文章

任务 3:熟练使用终端复用工具

核心目标 # 操作:安装并学习使用 tmux。 收获:掌握在服务器上跑长耗时任务的能力。即使本地 SSH 突然断开,任务依然会在后台运行,不会前功尽弃。 核心工具:tmux # tmux (Terminal Multiplexer) 是现代服务端开发的必备工具,解决了远程连接中途掉线导致任务中断的痛点。

任务 2:分配虚拟内存 (Swap)

Linux 服务器运维笔记:分配虚拟内存 (Swap) 避坑与实操 # 0. 背景与目标 # 在小内存(如 1GB RAM)的云服务器上运行 Java、MySQL 或进行前端构建时,物理内存极易耗尽导致进程被系统杀掉(OOM)。Swap(交换空间) 充当了“虚拟内存”的角色,是服务器在高负载下的“救命支撑”。