Docker 与运行环境
Docker 解决什么问题
Section titled “Docker 解决什么问题”“在我电脑上能运行”常常是因为系统、Node 版本、依赖和环境变量刚好不同。Docker 把应用和运行所需的一部分环境打包成可重复启动的镜像。
- 镜像(Image):可复用的构建模板;
- 容器(Container):镜像启动后的运行实例;
- 仓库(Registry):保存和分发镜像的地方;
- Volume:在容器重建后仍保留的数据;
- Compose:用一个文件描述多个相关容器。
容器不是完整虚拟机;它共享宿主机内核,隔离范围和安全模型需要单独理解。
先掌握四个概念
Section titled “先掌握四个概念”应用端口 → 容器端口 → 宿主机端口应用配置 ← 环境变量持久数据 ← Volume构建步骤 ← Dockerfile容器删除后,写在容器临时文件系统里的数据可能消失。数据库、上传文件和日志要设计持久化和备份。
一个最小 Dockerfile
Section titled “一个最小 Dockerfile”# 示例版本;实际以项目 engines 和官方 LTS 为准FROM node:22-alpineWORKDIR /appCOPY package*.json ./RUN npm ciCOPY . .RUN npm run buildEXPOSE 3000CMD ["npm", "run", "start"]这只是示例,Node 版本、构建命令、启动命令和输出目录必须以项目文档为准。生产环境应使用经过验证的版本,不要盲目复制。
- 端口是否只暴露必要范围;
- 环境变量是否在运行时注入而不是写进镜像;
.dockerignore是否排除了密钥、依赖缓存和本地构建物;- 镜像是否锁定版本并定期更新;
- 应用是否有健康检查和优雅停止;
- 日志是否可查看且没有敏感数据。
新手什么时候不需要 Docker
Section titled “新手什么时候不需要 Docker”纯静态网站、简单文档和已有平台自动构建的项目,通常直接连接 Git 部署更省心。只有当需要固定运行环境、同时运行多个服务或迁移到自有服务器时,再引入 Docker。
不要把 API Key 写进 Dockerfile 或提交到镜像仓库;不要为了“能跑”默认使用 --privileged、开放 Docker daemon 或把所有端口暴露公网。生产部署要限制资源、配置备份和回滚。