插件窝 干货文章 dockerfile怎么用

dockerfile怎么用

镜像 Dockerfile 构建 指令 136    来源:    2025-04-08

Dockerfile 是用于构建 Docker 镜像的文本文件,包含一系列指令。以下是详细使用指南:


1. 基本结构

# 基础镜像
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"]

2. 核心指令

指令 作用 示例
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

3. 构建镜像

# 构建镜像(注意最后的点表示当前目录)
docker build -t my-image:1.0 .

# 指定不同 Dockerfile 路径
docker build -f /path/to/Dockerfile -t my-image:1.0 .

4. 最佳实践

  1. 多阶段构建:减少镜像大小

    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
    
  2. 合理使用缓存

    • 将变化频率低的指令(如 RUN apt-get update)放在前面。
  3. 避免冗余文件

    • 使用 .dockerignore 忽略不必要的文件(类似 .gitignore)。
  4. 最小化镜像

    • 优先选择 Alpine 等小型基础镜像。

5. 调试技巧

  • 查看构建过程docker build --progress=plain .
  • 进入临时容器bash docker run -it --rm my-image:1.0 sh
  • 检查镜像历史docker history my-image:1.0

6. 常见问题

  • 权限问题:用 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 并构建优化的镜像。根据实际需求调整指令顺序和内容即可。