Sobes.tech
Junior

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:

  1. Camada base: Frequentemente contém uma imagem mínima do sistema operativo (por exemplo, Alpine, Ubuntu Base).
  2. Camadas de dependências: Adicionam pacotes como bibliotecas, interpretadores (por exemplo, Python, Node.js).
  3. Camada da aplicação: Adiciona o código da aplicação.
  4. 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"]