Dockerfile 完全指南
Dockerfile 完全指南
什么是 Dockerfile?
Dockerfile 是一个文本文件,包含了一系列的指令和参数,用于自动化构建 Docker 镜像。通过 Dockerfile,开发者可以定义应用程序运行所需的环境、依赖和配置。
基本结构
一个典型的 Dockerfile 包含以下部分:
1 | # 基础镜像 |
常用指令详解
FROM
指定基础镜像,必须为第一条指令:
1 | FROM python:3.8-slim |
RUN
执行命令并创建新的镜像层:
1 | RUN apt-get update && apt-get install -y curl |
COPY/ADD
复制文件到镜像中:
1 | COPY ./src /app/src |
CMD
指定容器默认执行的命令(只能有一个):
1 | CMD ["nginx", "-g", "daemon off;"] |
ENTRYPOINT
配置容器启动时运行的命令:
1 | ENTRYPOINT ["/app/start.sh"] |
EXPOSE
声明容器运行时监听的端口:
1 | EXPOSE 80 443 |
ENV
设置环境变量:
1 | ENV NODE_ENV production |
WORKDIR
设置工作目录:
1 | WORKDIR /app |
USER
指定运行时的用户:
1 | USER nobody |
最佳实践
-
使用官方镜像:优先选择官方维护的基础镜像
-
多阶段构建:减少最终镜像大小
1
2
3
4
5
6
7FROM node:14 as builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html -
合并 RUN 指令:减少镜像层数
1
2
3RUN apt-get update && \
apt-get install -y git curl && \
rm -rf /var/lib/apt/lists/* -
使用.dockerignore:避免复制不必要的文件
1
2
3node_modules
.git
*.log -
指定版本标签:避免使用 latest 标签
1
FROM python:3.8.12-slim
示例:Python 应用 Dockerfile
1 | # 多阶段构建示例 |
构建和运行
构建镜像:
1 | docker build -t my-app:1.0 . |
运行容器:
1 | docker run -d -p 4000:80 --name my-app-container my-app:1.0 |
总结
Dockerfile 是 Docker 生态系统的核心组成部分,掌握 Dockerfile 的编写技巧可以显著提高容器化应用的效率和安全性。通过遵循最佳实践,你可以创建出高效、安全且易于维护的 Docker 镜像。
评论