Builds de vários estágios com contêiner
Os sistemas rapidamente se tornam muito grandes quando você os envia completos. Isso inclui a compilação e, muitas vezes, o ambiente de compilação e teste. Mesmo que a extração dos arquivos a serem enviados não seja um problema, é demorado.
Os contêineres oferecem a possibilidade de fazer isso automaticamente.
Aqui você tem a opção de definir vários contêineres em um arquivo. Um site criado em JavaScript e construído com Node.js é um bom exemplo.
Exemplo:
Node.js:~ 400 Mbyte – 600 Mbyte
Nginx do servidor Web:~ 20 Mbyte
Site:~ 2 Mbyte
Todo o sistema como um container resulta em um total de mais de 600 Mbyte, embora apenas 22 Mbyte (servidor web + site) sejam necessários. Além disso, há um risco de segurança para o sistema porque está presente software, o que não é necessário para uma operação produtiva. Uma solução aqui é uma compilação em vários estágios.
Em uma compilação de vários estágios, vários contêineres são definidos em um arquivo e, em seguida, apenas os dados necessários de um contêiner para o outro são transmitidos.
Exemplo de arquivo docker de vários estágios
Para ficar com o Node.js, aqui está um exemplo de compilação de vários estágios. O primeiro container contém o Node.js como sistema de compilação, nele é criado o site. O segundo contêiner contém o servidor web, que copia os dados necessários do primeiro contêiner após a compilação.
## 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;"]
O resultado é um pequeno recipiente que contém apenas o mais necessário. Usamos uma distribuição Linux muito pequena para nginx com alpine.
Outra vantagem é que você pode acessar dois contêineres comunitários prontos e, portanto, não tem trabalho para criá-los e mantê-los. Para atualizações do sistema, os contêineres da comunidade são simplesmente substituídos regularmente. A coisa toda pode ser maravilhosamente automatizada em um pipeline com o GitLab (ou outras ferramentas).
Tecnologia industrial
- Escolha seus serviços em nuvem com sabedoria para construir a confiança dos líderes empresariais
- Aritmética com notação científica
- Perguntas e respostas com um arquiteto de soluções da indústria 4.0
- Crie sua primeira IOT com um Raspberry Pi, sensor DHT11 e Thingspeak.
- A Microsoft constrói o maior modelo de geração de linguagem com 17 bilhões de parâmetros
- Como as empresas da cadeia de suprimentos podem construir roteiros com IA
- Saldos de Aquisições Inteligentes AI com HI
- Guindastes para contêineres
- Builds de contêiner para arm em x86
- Builds de vários estágios com contêiner