
云原生和微服务架构盛行的时代,Docker已成为开发者必备的工具之一。许多开发者虽然能够编写基本Dockerfile,却未能充分利用Docker提供的强大功能。本文将分享10个高级Dockerfile技巧,帮助你构建更高效、更安全、更专业的Docker镜像。
初级方式:
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get clean高级方式:
RUN apt-get update && \
apt-get install -y curl && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*优势:
添加 –no-install-recommends 避免安装不必要的推荐包,清理缓存减小镜像大小
问题:
COPY . .会复制所有文件,包括不必要的 node_modules/ 、 .git/ 等
解决方案:
创建 .dockerignore 文件:
node_modules
.git
*.log
Dockerfile建议:
使用 docker build . –no-cache –progress=plain 查看实际传输的文件
初级方式(React应用示例):
FROM node:18
WORKDIR /app
COPY . .
RUN npm install && npm run build
CMD ["npx", "serve", "build"]高级方式:
# 构建阶段
FROM node:18 as builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
# 生产阶段
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html优势:
有风险的方式:
FROM python:latest安全的方式:
FROM python:3.11.6-slim最佳实践:
基础方式:
CMD ["node", "server.js"]高级方式:
HEALTHCHECK --interval=30s --timeout=10s \
CMD curl -f http://localhost:8080/health || exit 1参数说明:
示例:
HEALTHCHECK --interval=30s --timeout=10s \
CMD pgrep myserver || exit 1适用场景:
初级方式:
ENV NODE_ENV=production高级方式:
ARG NODE_VERSION=18
ENV NODE_ENV=production
FROM node:${NODE_VERSION}优势:
最佳实践:
# 优先使用COPY
COPY package.json .
COPY src/ ./src/
# 仅在需要解压或远程URL时使用ADD
ADD https://example.com/big.tar.xz /tmp区别:
优化方式:
COPY package.json package-lock.json .
RUN npm install
COPY . .原理:
安全问题:
# 默认以root运行
CMD ["node", "server.js"]安全方式:
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser
CMD ["node", "server.js"]优势:
掌握这些Dockerfile高级技巧将使镜像:
1、更小(减少层数、多阶段构建)
2、更快(优化缓存、.dockerignore)
3、更安全(非root用户、固定版本)
4、更可靠(健康检查)
5、更专业(合理使用ARG/ENV、COPY/ADD)
将这些技巧应用到项目中能构建出生产级的Docker镜像,显著提升开发效率和部署可靠性。
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!