利用多阶段容器构建精简部署流程
当完整交付系统时,系统体积往往会变得非常庞大,这不仅包含构建过程,还包括构建和测试环境。即使提取待交付文件不是问题,但这一过程耗时较长。
容器技术提供了自动化解决这一问题的可能性。
您可以在一个文件中定义多个容器。例如,使用 Node.js 构建的 JavaScript 网站就是一个典型场景。
以此为例:
- Node.js:约 400–600 MB
- Nginx Web 服务器:约 20 MB
- 网站文件:约 2 MB
若将整个系统打包为单一容器,总大小将超过 600 MB,但实际上生产运行仅需 22 MB(Web 服务器 + 网站)。此外,容器中包含生产环境不需要的软件,存在安全风险。解决方案是采用多阶段构建。
在多阶段构建中,可在一个文件中定义多个容器,并仅在容器间传输必要的数据。
多阶段 Dockerfile 示例
以 Node.js 为例,第一个容器包含作为构建系统的 Node.js,用于构建网站;第二个容器包含 Web 服务器,在构建完成后从第一个容器复制所需数据。
## 基础系统 阶段 1 ## 使用社区 Node.js 容器 FROM node:8.11.3 as buildsystem ## 从 Git 项目添加源代码 COPY ./source /root/frontend ## 使用 Node.js 构建前端 WORKDIR /root/frontend/ RUN npm install \ && npm run build ##################################################################### ##################################################################### ## 基础系统 阶段 2 ## 使用社区 Nginx 容器 FROM nginx:alpine ## 从阶段 1 复制构建产物 RUN mkdir -p /var/www/html/<MyApp> COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/ ## 添加 Nginx 默认配置 ADD default.conf /etc/nginx/conf.d/ ## 暴露端口 EXPOSE 80 ## 启动 Nginx CMD ["nginx", "-g", "daemon off;"]
最终生成的容器极小,仅包含最必要的组件。我们为 Nginx 使用了基于 Alpine Linux 的精简发行版。
另一优势是可直接使用两个现成的社区容器,无需自行创建和维护。系统更新时,只需定期替换社区容器即可。整个流程可在 GitLab 等工具的流水线中完美自动化。
工业技术
- 树莓派 + DHT11 + ThingSpeak:打造你的第一个物联网项目
- 科学计数法乘除法精通:简化极值运算
- 工业4.0洞察:Bosch.IO高级解决方案架构师Verena Majuntke谈物联网、自动化与未来工厂
- 微软发布170亿参数T-NLG:全球最大语言模型重塑NLP应用
- AI驱动供应链战略路线图:从推式向推拉结合转型的指南
- 智慧采购:AI与人类洞察的融合
- CMMS 重塑协作文化:打破壁垒,实现跨部门与供应链的实时联动
- 在 x86 系统上高效构建 ARM 容器
- 利用多阶段容器构建精简部署流程
- Docker 中运行 Node-RED 专家技巧与最佳实践
- 高效集装箱起重机:港口与铁路场站的精准装卸利器
- 赢得业务领导者信任:选择正确的云服务