← ClaudeAtlas

dockerfilelisted

Dockerfile 编写最佳实践
ryukyagamilight/terminal-skills · ★ 1 · Data & Documents · score 79
Install: claude install-skill ryukyagamilight/terminal-skills
# Dockerfile 编写 ## 概述 Dockerfile 最佳实践、安全扫描等技能。 ## 指令详解 ### FROM ```dockerfile # 基础镜像 FROM ubuntu:22.04 FROM node:18-alpine FROM python:3.11-slim # 多阶段构建 FROM node:18 AS builder FROM nginx:alpine AS production # 使用 ARG 动态指定 ARG BASE_IMAGE=node:18-alpine FROM ${BASE_IMAGE} ``` ### WORKDIR ```dockerfile # 设置工作目录(推荐使用绝对路径) WORKDIR /app WORKDIR /home/node/app # 多次使用会切换目录 WORKDIR /app WORKDIR src # 当前目录: /app/src ``` ### COPY 与 ADD ```dockerfile # COPY(推荐) COPY package.json ./ COPY src/ ./src/ COPY --chown=node:node . . # 多文件复制 COPY package.json package-lock.json ./ # ADD(支持 URL 和解压) ADD https://example.com/file.tar.gz /app/ ADD archive.tar.gz /app/ # 自动解压 # 推荐:优先使用 COPY,除非需要 ADD 的特殊功能 ``` ### RUN ```dockerfile # Shell 形式 RUN apt-get update && apt-get install -y curl # Exec 形式 RUN ["apt-get", "update"] # 最佳实践:合并命令减少层数 RUN apt-get update && \ apt-get install -y --no-install-recommends \ curl \ wget \ git && \ rm -rf /var/lib/apt/lists/* ``` ### CMD 与 ENTRYPOINT ```dockerfile # CMD - 默认命令(可被覆盖) CMD ["node", "app.js"] CMD ["npm", "start"] # ENTRYPOINT - 入口点(不易被覆盖) ENTRYPOINT ["docker-entrypoint.sh"] CMD ["postgres"] # 组合使用 ENTRYPOINT ["python"] CMD ["app.py"] # 运行: python app.py # docker run myimage other.py -> python other.py ``` ### ENV 与 ARG ```dockerfile # ENV - 运行时环境变量 ENV NODE_ENV=production ENV PORT=3000 HOST=0.0.0.0 # ARG - 构建时参数 ARG VERSION=1.0 ARG BUILD_DATE # ARG 转 ENV ARG APP_VERSION ENV APP_VERSION=${APP_VERSIO