promovaweb-devops-dockerfile-basics
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill de Fundamentos de Dockerfile
Dockerfile基础知识Skill
Domine os fundamentos do Dockerfile e as melhores práticas de 2024-2025 para criar imagens de container seguras e otimizadas.
掌握Dockerfile的基础知识以及2024-2025年的最佳实践,构建安全且优化的容器镜像。
Propósito
目标
Fornecer orientação abrangente sobre a sintaxe do Dockerfile, ordenação de instruções, otimização de camadas (layers) e melhores práticas de segurança.
提供关于Dockerfile语法、指令排序、层(layers)优化以及安全最佳实践的全面指导。
Parâmetros
参数
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| base_image | string | Não | - | Imagem base a ser utilizada |
| language | string | Não | - | Linguagem de programação (node/python/go/java) |
| optimize | boolean | Não | true | Aplicar recomendações de otimização |
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| base_image | string | 否 | - | 要使用的基础镜像 |
| language | string | 否 | - | 编程语言(node/python/go/java) |
| optimize | boolean | 否 | true | 应用优化建议 |
Instruções Principais
核心指令
Referência de Instruções
指令参考
| Instrução | Propósito | Exemplo |
|---|---|---|
| FROM | Imagem base | |
| WORKDIR | Define o diretório de trabalho | |
| COPY | Copia arquivos | |
| RUN | Executa um comando | |
| ENV | Define variáveis de ambiente | |
| EXPOSE | Documenta a porta | |
| USER | Define o usuário | |
| CMD | Comando padrão | |
| ENTRYPOINT | Comando fixo | |
| HEALTHCHECK | Verificação de integridade | |
| 指令 | 用途 | 示例 |
|---|---|---|
| FROM | 基础镜像 | |
| WORKDIR | 定义工作目录 | |
| COPY | 复制文件 | |
| RUN | 执行命令 | |
| ENV | 定义环境变量 | |
| EXPOSE | 声明端口 | |
| USER | 指定运行用户 | |
| CMD | 默认执行命令 | |
| ENTRYPOINT | 固定入口命令 | |
| HEALTHCHECK | 健康检查 | |
Ordem de Otimização de Camadas (Layers)
层(Layers)优化顺序
dockerfile
undefineddockerfile
undefined1. Imagem base (mais estável)
1. 基础镜像(最稳定)
FROM node:20-alpine
FROM node:20-alpine
2. Dependências do sistema
2. 系统依赖
RUN apk add --no-cache curl
RUN apk add --no-cache curl
3. Criar usuário (segurança)
3. 创建运行用户(安全要求)
RUN addgroup -g 1001 app && adduser -u 1001 -G app -D app
RUN addgroup -g 1001 app && adduser -u 1001 -G app -D app
4. Definir diretório de trabalho
4. 定义工作目录
WORKDIR /app
WORKDIR /app
5. Copiar arquivos de dependência (camada de cache)
5. 复制依赖声明文件(缓存层)
COPY package*.json ./
COPY package*.json ./
6. Instalar dependências
6. 安装依赖
RUN npm ci --only=production
RUN npm ci --only=production
7. Copiar código da aplicação (mais volátil)
7. 复制应用代码(变更最频繁)
COPY --chown=app:app . .
COPY --chown=app:app . .
8. Mudar para usuário não-root
8. 切换为非root用户运行
USER app
USER app
9. Health check
9. 健康检查
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3000/health || exit 1
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3000/health || exit 1
10. Comando padrão
10. 默认启动命令
CMD ["node", "server.js"]
undefinedCMD ["node", "server.js"]
undefinedMelhores Práticas (2024-2025)
最佳实践(2024-2025)
Essenciais de Segurança
安全核心要点
dockerfile
undefineddockerfile
undefinedSempre use tags de versão específicas
始终使用具体的版本标签
FROM node:20.10-alpine # Bom
FROM node:20.10-alpine # 推荐
FROM node:latest # Ruim
FROM node:latest # 不推荐
Executar como usuário não-root
以非root用户运行
USER nonroot
USER nonroot
Usar multi-stage builds
使用多阶段构建
FROM node:20 AS builder
FROM node:20 AS builder
... passos de build ...
... 构建步骤 ...
FROM node:20-alpine AS runtime
COPY --from=builder /app/dist ./
undefinedFROM node:20-alpine AS runtime
COPY --from=builder /app/dist ./
undefinedTécnicas de Otimização
优化技巧
dockerfile
undefineddockerfile
undefinedCombinar comandos RUN
合并RUN命令
RUN apt-get update &&
apt-get install -y --no-install-recommends curl &&
rm -rf /var/lib/apt/lists/*
apt-get install -y --no-install-recommends curl &&
rm -rf /var/lib/apt/lists/*
RUN apt-get update &&
apt-get install -y --no-install-recommends curl &&
rm -rf /var/lib/apt/lists/*
apt-get install -y --no-install-recommends curl &&
rm -rf /var/lib/apt/lists/*
Usar .dockerignore
使用.dockerignore文件
node_modules, .git, *.md, etc.
排除node_modules、.git、*.md等文件
Aproveitar BuildKit cache mounts
利用BuildKit缓存挂载
RUN --mount=type=cache,target=/root/.npm npm ci
undefinedRUN --mount=type=cache,target=/root/.npm npm ci
undefinedTratamento de Erros
错误处理
Erros Comuns
常见错误
| Erro | Causa | Solução |
|---|---|---|
| Arquivo fora do contexto | Verifique o .dockerignore |
| Comando não encontrado | Instale o pacote primeiro |
| Executando como não-root | Use COPY --chown |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 文件不在构建上下文内 | 检查.dockerignore配置 |
| 命令不存在 | 先安装对应的依赖包 |
| 非root用户无权限 | 使用COPY --chown参数 |
Comandos de Validação
校验命令
bash
undefinedbash
undefinedLint do Dockerfile
Dockerfile语法检查
hadolint Dockerfile
hadolint Dockerfile
Build sem cache
无缓存构建
docker build --no-cache -t app:test .
docker build --no-cache -t app:test .
Inspecionar camadas (layers)
查看镜像层信息
docker history app:test
undefineddocker history app:test
undefinedSolução de Problemas (Troubleshooting)
问题排查(Troubleshooting)
Checklist de Depuração
调试检查清单
- O .dockerignore exclui arquivos desnecessários?
- A tag da imagem base é específica (não :latest)?
- As dependências foram copiadas antes do código-fonte?
- O usuário não-root está configurado?
- HEALTHCHECK está definido?
- .dockerignore是否排除了不必要的文件?
- 基础镜像是否使用了具体标签(而非:latest)?
- 依赖文件是否早于源代码复制?
- 是否配置了非root运行用户?
- 是否定义了HEALTHCHECK?
Problemas Comuns
常见问题
| Sintoma | Causa | Correção |
|---|---|---|
| Tamanho grande da imagem | Sem multi-stage | Adicione um estágio de build |
| Builds lentos | Ordem de camadas ruim | Mova o COPY para depois das dependências |
| Avisos de segurança | Usuário root | Adicione a instrução USER |
| 现象 | 原因 | 修复方法 |
|---|---|---|
| 镜像体积过大 | 未使用多阶段构建 | 新增构建阶段 |
| 构建速度慢 | 层顺序不合理 | 将依赖复制步骤移到代码复制之前 |
| 安全告警 | 使用root用户运行 | 添加USER指令指定非root用户 |
Uso
使用方式
Skill("dockerfile-basics")Skill("dockerfile-basics")Skills Relacionadas
相关Skill
- docker-multi-stage
- docker-optimization
- docker-security
- docker-multi-stage
- docker-optimization
- docker-security