Dockerfile 是用于构建 Docker 镜像的文本文件,包含一系列指令。以下是详细使用指南:
# 基础镜像
FROM ubuntu:20.04
# 维护者信息(可选)
LABEL maintainer="your-email@example.com"
# 运行命令(构建时执行)
RUN apt-get update && apt-get install -y python3
# 复制文件到镜像
COPY ./app /app
# 工作目录
WORKDIR /app
# 暴露端口
EXPOSE 80
# 环境变量
ENV FLASK_APP=app.py
# 容器启动命令(运行时执行)
CMD ["python3", "app.py"]
指令 | 作用 | 示例 |
---|---|---|
FROM |
指定基础镜像 | FROM python:3.8 |
RUN |
执行命令 | RUN pip install flask |
COPY |
复制本地文件到镜像 | COPY . /app |
ADD |
类似 COPY,支持 URL 和解压压缩包 | ADD https://example.com/file.tar.gz /tmp |
WORKDIR |
设置工作目录 | WORKDIR /app |
EXPOSE |
声明容器运行时监听的端口 | EXPOSE 8080 |
ENV |
设置环境变量 | ENV DEBUG=True |
CMD |
容器启动命令(可被覆盖) | CMD ["nginx", "-g", "daemon off;"] |
ENTRYPOINT |
容器入口命令(不易被覆盖) | ENTRYPOINT ["/entrypoint.sh"] |
ARG |
构建时传递的变量 | ARG VERSION=1.0 |
# 构建镜像(注意最后的点表示当前目录)
docker build -t my-image:1.0 .
# 指定不同 Dockerfile 路径
docker build -f /path/to/Dockerfile -t my-image:1.0 .
多阶段构建:减少镜像大小
FROM node:14 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
合理使用缓存:
RUN apt-get update
)放在前面。避免冗余文件:
.dockerignore
忽略不必要的文件(类似 .gitignore
)。最小化镜像:
docker build --progress=plain .
bash
docker run -it --rm my-image:1.0 sh
docker history my-image:1.0
USER
指令或 chown
调整文件权限。dockerfile
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dockerfile
RUN apt-get update && apt-get install -y package && rm -rf /var/lib/apt/lists/*
通过以上步骤,你可以高效地编写 Dockerfile 并构建优化的镜像。根据实际需求调整指令顺序和内容即可。