Dockerfile入门指南
Dockerfile 概述
Dockerfile 是一个文本文件,包含一组用于构建 Docker 镜像的指令。通过逐行执行这些指令,Docker 可以自动化地创建镜像,用于运行容器化应用。
核心指令
FROM
指定基础镜像,所有后续操作基于此镜像。例如:
FROM ubuntu:22.04
RUN
在镜像构建过程中执行命令,常用于安装软件或配置环境。例如:
RUN apt-get update && apt-get install -y python3
COPY 与 ADD
将文件从主机复制到镜像中。COPY
仅支持本地文件,ADD
还支持远程 URL 和解压功能。例如:
COPY ./app /app
ADD https://example.com/file.tar.gz /tmp
WORKDIR
设置后续指令的工作目录。若目录不存在,Docker 会自动创建。例如:
WORKDIR /app
ENV
设置环境变量,可被后续指令或容器运行时使用。例如:
ENV PYTHONPATH=/usr/lib/python3
EXPOSE
声明容器运行时监听的端口,但实际映射需通过 docker run -p
参数实现。例如:
EXPOSE 8080
CMD 与 ENTRYPOINT
定义容器启动时的默认命令。CMD
可被 docker run
覆盖,ENTRYPOINT
则更固定。例如:
CMD ["python3", "app.py"]
ENTRYPOINT ["nginx", "-g", "daemon off;"]
多阶段构建
通过多阶段构建可减小最终镜像体积,仅保留必要的文件。例如:
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .FROM alpine:latest
COPY --from=builder /app/main .
CMD ["./main"]
最佳实践
- 使用
.dockerignore
文件排除无需复制的文件(如node_modules
)。 - 合并多个
RUN
指令以减少镜像层数。 - 优先使用官方镜像作为基础镜像。
- 固定镜像版本(如
ubuntu:22.04
而非ubuntu:latest
)以保证一致性。
示例 Dockerfile
以下是一个完整的 Python 应用示例:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
ENV FLASK_APP=app.py
CMD ["flask", "run", "--host=0.0.0.0"]
通过以上指令和示例,可以高效定义容器化应用的构建流程。