1.1 Fundamentos dos Docker Images
Docker Images (imagens Docker) — são templates para containers Docker. Eles contêm tudo que é necessário pra rodar aplicações: código, bibliotecas, dependências, ferramentas e arquivos de configuração. Entender o que são Docker Images e como elas estão estruturadas é essencial pra usar o Docker de forma eficiente.
Docker Image — é um template imutável
que é usado pra criar containers. Ele contém todos os componentes necessários pra executar uma aplicação em um ambiente isolado. Quando você roda um container, o Docker cria uma instância da imagem e a executa.
Características principais dos Docker Images:
- Imutabilidade: os Docker Images são imutáveis. Qualquer alteração no container não afeta a imagem original. Pra modificar o conteúdo da imagem, você precisa criar uma nova imagem.
- Estrutura por camadas: os Docker Images são compostos por várias camadas. Cada camada representa uma mudança em relação à anterior. Isso permite o uso eficiente de espaço reutilizando camadas.
- Identificação: cada imagem tem um identificador único (SHA256 hash) e pode ter uma ou várias tags que facilitam o gerenciamento de versões das imagens.
Estrutura dos Docker Images:
Os Docker Images têm uma estrutura por camadas, onde cada camada é um sistema de arquivos. Essas camadas ficam armazenadas no cache do Docker e podem ser reutilizadas por outras imagens. A estrutura por camadas torna as imagens Docker leves e eficientes. Por exemplo, a primeira camada é o sistema operacional, a segunda é o Python, e a terceira é sua aplicação.
Componentes principais da estrutura dos Docker Images:
- Camada Base (Base Layer): a camada inicial da imagem, que geralmente é usada como base pra criar outras imagens. Por exemplo, pode ser uma versão mínima de um sistema operacional, como Ubuntu ou Alpine Linux.
- Camadas Intermediárias (Intermediate Layers): essas camadas são criadas com base nos comandos executados no Dockerfile (como instalar pacotes, copiar arquivos, etc.). Cada camada adiciona mudanças à anterior.
- Camada Final (Final Layer): a última camada, criada com base nas instruções CMD, ENTRYPOINT ou alterações dentro do container, é chamada de camada "do container". Essa camada é temporária e só existe enquanto o container está rodando.
1.2 Como funcionam as camadas dos Docker Images
Cada camada de uma imagem Docker é um conjunto de alterações em relação à camada anterior. Quando o Docker cria uma imagem, ele executa cada instrução do Dockerfile e adiciona uma nova camada para cada mudança.
Exemplo de criação de camadas:
- Imagem base: vamos começar com uma imagem base, por exemplo,
ubuntu:20.04
. Essa será a primeira camada. - Instalação de pacotes: o comando
RUN apt-get update && apt-get install -y python3
criará uma nova camada com o Python instalado. - Cópia de arquivos: o comando
COPY . /app
adicionará os arquivos do aplicativo em uma nova camada. - Configuração do diretório de trabalho: o comando
WORKDIR /app
criará uma camada que define o diretório de trabalho para os próximos comandos.
Vantagens do uso de camadas:
- Reutilização: as camadas podem ser reutilizadas por outras imagens. Por exemplo, se duas imagens usarem a mesma camada base, o Docker irá carregar essa camada apenas uma vez, economizando espaço e tempo.
- Cache: o Docker faz cache das camadas, o que acelera o processo de build das imagens. Se uma camada não foi alterada, o Docker a usa do cache em vez de reconstruí-la.
- Modularidade: a estrutura em camadas permite desenvolver imagens de maneira modular. Você pode atualizar ou alterar camadas específicas sem afetar toda a imagem.
Identificação e tags dos Docker Images:
Cada Docker Image é identificada por um hash único (SHA256), que é gerado com base no conteúdo da imagem e de todas as suas camadas. Para facilitar o gerenciamento e a versão das Docker Images, elas também podem ter tags.
Exemplo de identificação de imagem:
O próximo comando mostrará a lista de todas as imagens no seu sistema, incluindo o repositório, tags, identificadores e tamanhos:
docker images
1.3 Trabalhando com Docker Images
Docker fornece um monte de comandos pra lidar com imagens. Aqui estão os principais:
- Criando uma imagem:
docker build
- Iniciar um container a partir de uma imagem:
docker run
- Listar imagens:
docker images
- Deletar uma imagem:
docker rmi
- Procurar imagens no Docker Hub:
docker search
- Baixar uma imagem do Docker Hub:
docker pull
- Enviar uma imagem para o Docker Hub:
docker push
Exemplo de criação e uso de uma Docker Image:
1. Criando um Dockerfile:
# Usando a imagem base do Ubuntu
FROM ubuntu:20.04
# Instalando Python
RUN apt-get update && apt-get install -y python3
# Copiando os arquivos da aplicação pro container
COPY . /app
# Definindo o diretório de trabalho
WORKDIR /app
# Declarando o comando pra rodar a aplicação
CMD ["python3", "app.py"]
2. Construindo a imagem:
O seguinte comando vai criar uma imagem chamada my_python_app
, usando o Dockerfile no diretório atual:
docker build -t my_python_app .
3. Iniciar um container a partir da imagem:
Use o seguinte comando pra iniciar um container a partir da imagem criada my_python_app
rodando em background:
docker run -d my_python_app
GO TO FULL VERSION