Otimize Implantações com Builds Multi-Stage de Containers
Sistemas tornam-se rapidamente muito grandes quando você os entrega completos. Isso inclui o ambiente de build e, frequentemente, o de build e teste. Mesmo que a extração dos arquivos a serem entregues não seja um problema, o processo é demorado.
Containers oferecem a possibilidade de automatizar isso.
Aqui você tem a opção de definir múltiplos containers em um único arquivo. Um site criado em JavaScript e construído com Node.js é um bom exemplo.
Exemplo:
- Node.js: ~ 400-600 MB
- Servidor web nginx: ~ 20 MB
- Site: ~ 2 MB
O sistema completo como container resulta em um total superior a 600 MB, embora apenas 22 MB (servidor web + site) sejam necessários. Além disso, há um risco de segurança para o sistema porque há software presente que não é necessário para a operação produtiva. A solução aqui é um build multi-stage.
Em um build multi-stage, vários containers são definidos em um arquivo e, em seguida, apenas os dados necessários de um container para o outro são transmitidos.
Exemplo de Dockerfile Multi-Stage
Mantendo o exemplo do Node.js, aqui está um exemplo de build multi-stage. O primeiro container contém o Node.js como sistema de build, nele o site é criado. O segundo container contém o servidor web, que copia os dados necessários do primeiro container após o build.
## Sistema Base Stage 1 ## Usa container comunitário Node.js FROM node:8.11.3 as buildsystem ## Adiciona fonte do nosso projeto Git COPY ./source /root/frontend ## Build do frontend com Nodejs WORKDIR /root/frontend/ RUN npm install \ && npm run build ##################################################################### ##################################################################### ## Sistema Base Stage 2 ## Usa container comunitário nginx FROM nginx:alpine ## Copia build do stage 1 RUN mkdir -p /var/www/html/<MyApp> COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/ ## Adiciona configuração padrão para nginx ADD default.conf /etc/nginx/conf.d/ ## Publica Porta EXPOSE 80 ## Inicia nginx CMD ["nginx", "-g", "daemon off;"]
O resultado é um container pequeno que contém apenas o mais necessário. Usamos uma distribuição Linux muito pequena para o nginx com alpine.
Outra vantagem é que você pode acessar dois containers comunitários prontos e, portanto, não tem trabalho para criá-los e mantê-los. Para atualizações do sistema, os containers comunitários são simplesmente substituídos regularmente. Tudo isso pode ser maravilhosamente automatizado em um pipeline com GitLab (ou outras ferramentas).
Tecnologia industrial
- Construindo Confiança com Líderes de Negócio: Escolhendo os Serviços de Nuvem Certos
- Dominando Multiplicação e Divisão com Notação Científica
- Indústria 4.0: Perguntas e Respostas com Verena Majuntke da Bosch.IO sobre IoT, Automação e a Fábrica do Futuro
- Crie Seu Primeiro Projeto IoT com Raspberry Pi, DHT11 e ThingSpeak
- Microsoft Apresenta Modelo de Linguagem Recorde de 17 Bilhões de Parâmetros
- Roteiros Impulsionados por IA: Guia Estratégico para Empresas da Cadeia de Suprimentos
- Compras Inteligentes: Unindo IA com Insight Humano
- Guindastes de Contêineres Eficientes: Carregamento e Descarregamento de Precisão para Portos e Pátios Ferroviários
- Builds Eficientes de Containers ARM em Sistemas x86
- Otimize Implantações com Builds Multi-Stage de Containers