O que é uma imagem no contexto de conteinerização e quais os níveis (camadas) de uma imagem existem?
sobes.tech IA
Resposta da IA
A imagem (ou imagem) na conteinerização é um pacote de software executável, imutável, leve e autónomo que inclui tudo o que é necessário para executar uma aplicação: código, ambiente de execução, ferramentas do sistema, bibliotecas e configurações. É essencialmente uma "instantânea" do sistema de ficheiros e da configuração a partir da qual os contenedores são criados.
Os níveis (camadas) da imagem são sistemas de ficheiros separados e apenas de leitura que compõem a imagem. Cada camada representa um conjunto de alterações em relação à camada anterior. São construídas uma sobre a outra, formando um sistema de ficheiros completo da imagem. As vantagens das camadas:
- Eficiência: As camadas são armazenadas em cache e reutilizadas entre imagens, o que reduz o espaço em disco e acelera a construção.
- Modularidade: As alterações na aplicação ou no sistema operativo base afetam apenas a camada superior, sem modificar as inferiores.
- Partilha: Várias imagens podem partilhar camadas base comuns, como a camada do sistema operativo.
Estrutura típica de camadas:
- Camada base: Frequentemente contém uma imagem mínima do sistema operativo (por exemplo, Alpine, Ubuntu Base).
- Camadas de dependências: Adicionam pacotes como bibliotecas, interpretadores (por exemplo, Python, Node.js).
- Camada da aplicação: Adiciona o código da aplicação.
- Camada de configuração/metadados: Descreve como a aplicação deve ser iniciada (ENTRYPOINT, CMD).
Cada instrução no Dockerfile geralmente cria uma nova camada de imagem. Por exemplo, o comando RUN executa comandos e guarda o resultado como uma nova camada.
# Camada base
FROM ubuntu:latest
# Camadas de dependências
RUN apt-get update && apt-get install -y curl
# Camada da aplicação
COPY . /app
WORKDIR /app
# Camada de configuração
CMD ["node", "app.js"]