常用指令详解(FROM/COPY/RUN/CMD)

Dockerfile 中的指令定义了镜像构建过程和容器运行行为。本节详细讲解四个核心指令的用法与实践技巧。

1. FROM 指令

  • 用于指定基础镜像,是 Dockerfile 的首行指令
  • 支持官方镜像或自定义镜像
  • 可指定版本标签,保证镜像一致性

示例:

FROM ubuntu:22.04
FROM node:20-alpine

`

  • 多阶段构建也使用多个 FROM:
FROM golang:1.21 AS builder
FROM alpine:latest

2. COPY 指令

  • 将宿主机文件或目录复制到镜像中
  • 语法:
COPY <源路径> <目标路径>

示例:

COPY ./app /app
COPY requirements.txt /app/
  • COPY 不支持 URL
  • 对于远程资源,使用 ADD 指令

3. RUN 指令

  • 在镜像构建阶段执行命令
  • 常用于安装依赖或配置环境

示例:

RUN apt-get update && apt-get install -y python3
RUN npm install --global yarn
  • RUN 会生成新的镜像层,建议合并命令减少层数

4. CMD 指令

  • 指定容器启动时的默认命令

  • 可以被 docker run 命令行参数覆盖

  • 两种格式:

    • exec 格式(推荐):
CMD ["python3", "app.py"]
  • shell 格式:
CMD python3 app.py
  • CMD 与 ENTRYPOINT 配合使用,实现更灵活的容器启动

5. 使用示例

FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

CMD ["python3", "main.py"]
  • 构建镜像:
docker build -t mypythonapp .
  • 启动容器:
docker run -d -p 5000:5000 mypythonapp

理解 FROM、COPY、RUN、CMD 四个核心指令,可以帮助开发者高效构建镜像,并保持镜像体积小、构建快速且易于维护。