用途:为 Node.js 应用构建和部署 Docker 容器,并用于优化 Docker 构建、配置容器安全。核心原则:使用 slim 基础镜像与多阶段构建保持镜像精简;生产环境不以 root 运行;按依赖变化频率排列 Dockerfile 层以利用缓存;镜像中不放密钥并扫描漏洞;固定版本并使用锁文件保证可复现。
项目结构:Dockerfile、Dockerfile.dev、docker-compose.yml、docker-compose.dev.yml、.dockerignore、.env.example。生产 Dockerfile 分 deps(npm ci --only=production)、build(npm ci 后 npm run build)、production 三阶段,创建 UID/GID 1001 的非 root 用户 nodejs,设置 NODE_ENV、PORT,并用 HEALTHCHECK 请求 /health。静态站点可用 nginx:alpine 提供构建产物并以 nginx 用户运行。开发镜像用 nodemon 热重载。
Docker Compose:生产文件定义 app 与 postgres 服务,配置端口、env_file、restart、healthcheck 及 CPU/内存限制;开发文件挂载 src 实现热重载并排除 node_modules。.dockerignore 排除 .git、node_modules、dist、.env、IDE 与测试文件等。
安全实践:通过 groupadd/useradd 创建专用用户并以 --chown 复制文件;不在 ENV 嵌入密钥,改为运行时传入、Docker secrets 或 BuildKit 的 --mount=type=secret;用 docker scout cves 或 trivy 扫描,可加 --exit-code --only-severity critical,high;支持 read_only 与 tmpfs。
常用命令(保持原样):docker build -t myapp:latest .;DOCKER_BUILDKIT=1 docker build -t myapp:latest .;docker build --target build -t myapp:build .;docker run -p 3000:3000 --env-file .env myapp:latest;docker compose -f docker-compose.yml -f docker-compose.dev.yml up;docker compose up -d;docker compose logs -f app;docker compose exec app sh;docker compose up -d --build app;docker image prune -a。
部署:给出 DigitalOcean App Platform 的 app.yaml 与 Droplet 拉取镜像示例。另附容器化检查清单及关联技能(deployment、ci-cd、security、nodejs-backend)。限制与收费、平台支持范围等资料暂未提供。