制造商博客
- Jan.Mueller@PhoenixContact.de.
- 制造商博客
- Hits: 320
用容器的多级建造
当您运送完成时,系统会很快变得非常大。这包括构建和通常构建和测试环境。即使提取要发货的文件不是问题,即使是问题,也是耗时的。
容器提供自动执行此操作的可能性。
在这里,您可以选择在一个文件中定义多个容器。在JavaScript中创建的网站并使用node.js构建是一个很好的例子。
例子:
node.js:〜400 MBYTE - 600 MB
WebServer nginx:〜20 MB
网站:〜2 MB
整个系统作为集装箱导致总共超过600 MB,尽管只需要22个MB(WebServer +网站)。此外,系统存在安全风险,因为存在软件,其不需要生产操作。这里的解决方案是一个多级构建。
在一个 multi-stage build 在一个文件中定义了几个容器,然后发送从一个容器到另一个容器的必要数据。
示例多级Dockerfile
要保持Node.js,这是一个多级构建示例。第一个容器包含Node.js作为构建系统,在其上创建网站。第二个容器包含Web服务器,它在构建后从第一个容器中复制必要的数据。
## Base System Stage 1
## Use community Node.js container
FROM node:8.11.3 as buildsystem
## Add source from our Git project
COPY ./source /root/frontend
## Build frontend with Nodejs
WORKDIR /root/frontend/
RUN npm install \
&& npm run build
#####################################################################
#####################################################################
## Base System Stage 2
## Use community nginx container
FROM nginx:alpine
## Copy build from stage 1
RUN mkdir -p /var/www/html/<MyApp>
COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/
## Add default config for nginx
ADD default.conf /etc/nginx/conf.d/
## Publish Port
EXPOSE 80
## Start nginx
CMD ["nginx", "-g", "daemon off;"]
结果是一个只包含最必要的小容器。我们使用非常小的Linux分发Nginx 高寒 .
另一个优点是您可以访问两位现成的社区容器,因此无法创建和维护它们。对于系统更新,社区容器只会定期更换。整个事情可以在带有Gitlab(或其他工具)的管道中非常自动化。