Como Criar e Personalizar Imagens Docker

DockerBeginner
Pratique Agora

Introdução

Este guia passo a passo irá ensiná-lo a executar imagens Docker interativamente, explorar e manipular contêineres Docker e gerenciar seu ambiente Docker de forma eficaz. Ao final deste tutorial, você terá um conhecimento sólido de como aproveitar o modo interativo do Docker para otimizar seus fluxos de trabalho baseados em contêineres.

Noções Básicas de Imagens Docker

Compreendendo Imagens Docker

Imagens Docker são fundamentais para a tecnologia de contêineres, servindo como modelos de leitura-somente que contêm um sistema operacional pré-configurado e um ambiente de aplicação. Essas imagens consistem em várias camadas que definem o sistema de arquivos completo para um contêiner.

Estrutura da Imagem e Camadas

graph TD
    A[Imagem Base] --> B[Camada de Aplicação]
    A --> C[Camada de Configuração]
    A --> D[Camada de Dependências]

Características-chave das imagens Docker incluem:

Tipo de Camada Descrição Exemplo
Imagem Base Camada fundamental do sistema operacional Ubuntu 22.04
Camada de Dependências Bibliotecas e pacotes necessários Runtime Python
Camada de Aplicação Código da aplicação propriamente dito Aplicação web

Criando uma Imagem Docker

Aqui está um exemplo prático de criação de uma imagem Docker para uma aplicação Python:

## Crie um novo diretório para o projeto
mkdir python-app
cd python-app

## Crie o Dockerfile
touch Dockerfile

## Edite o Dockerfile com a configuração básica
echo "FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 python3-pip
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
CMD ['python3', 'app.py']" > Dockerfile

## Construa a imagem Docker
docker build -t my-python-app .

Este Dockerfile demonstra passos-chave na criação da imagem:

  • Selecionar uma imagem base (Ubuntu 22.04)
  • Instalar dependências do sistema
  • Definir o diretório de trabalho
  • Copiar arquivos da aplicação
  • Instalar requisitos da aplicação
  • Definir o comando padrão

Comandos de Gerenciamento de Imagens

## Listar imagens locais
docker images

## Baixar uma imagem do Docker Hub
docker pull ubuntu:22.04

## Remover uma imagem
docker rmi my-python-app

Imagens Docker fornecem um ambiente consistente e repetível em diferentes plataformas de computação, permitindo o deploy e escalonamento eficientes de aplicações.

Gerenciando Contêineres Docker

Fundamentos da Execução de Contêineres

Contêineres Docker representam instâncias de execução de imagens, fornecendo ambientes isolados para a execução de aplicações. Compreender a gestão de contêineres é crucial para um deploy e escalonamento eficazes.

Estados do Ciclo de Vida do Contêiner

stateDiagram-v2
    [*] --> Created
    Created --> Running
    Running --> Paused
    Paused --> Running
    Running --> Stopped
    Stopped --> Removed
    Removed --> [*]

Comandos Básicos de Gerenciamento de Contêineres

Comando Função Exemplo
docker run Criar e iniciar contêiner docker run ubuntu:22.04
docker ps Listar contêineres em execução docker ps -a
docker start Iniciar contêiner parado docker start container_id
docker stop Parar contêiner em execução docker stop container_id
docker rm Remover contêiner docker rm container_id

Cenários Práticos de Execução de Contêineres

Modo Interativo de Contêiner

## Executar contêiner Ubuntu interativamente
docker run -it ubuntu:22.04 /bin/bash

## Instalar pacotes dentro do contêiner
apt-get update
apt-get install python3

## Sair do contêiner
exit

Execução de Contêiner em Fundo

## Executar servidor web em modo desacoplado
docker run -d -p 8080:80 nginx

## Verificar contêineres em execução
docker ps

Gerenciamento de Recursos do Contêiner

## Limitar recursos do contêiner
docker run -d \
  --cpus="1" \
  --memory="512m" \
  nginx

Rede de Contêineres

graph LR
    A[Host Docker] --> B[Rede Bridge]
    B --> C[Contêiner 1]
    B --> D[Contêiner 2]
    B --> E[Contêiner 3]

Docker fornece capacidades de rede flexíveis, permitindo comunicação perfeita entre contêineres e redes externas.

Técnicas de Otimização de Imagens

Estratégias de Redução do Tamanho da Imagem

A otimização de imagens Docker é crucial para um deploy eficiente de contêineres, reduzindo os requisitos de armazenamento e melhorando o desempenho.

Princípios de Otimização de Camadas

graph TD
    A[Imagem Base] --> B[Dependências Mínimas]
    B --> C[Execução em Camada Única]
    C --> D[Otimização de Cache]

Boas Práticas para Dockerfile

Técnica Descrição Impacto
Construções em Múltiplas Etapas Ambientes de construção e execução separados Reduz o tamanho final da imagem
Imagens Base Alpine Distribuição Linux leve Minimiza a pegada da imagem
Combinação de Comandos RUN Reduzir o número de camadas Diminui a complexidade da imagem

Exemplo Prático de Otimização

## Dockerfile não otimizado
FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y python3
RUN pip3 install flask
COPY . /app
EXPOSE 5000
CMD ["python3", "app.py"]

## Dockerfile otimizado
FROM python:3.9-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]

Comparação do Tamanho da Imagem

## Verificar tamanhos de imagem
docker images

Cache e Otimização de Construção

graph LR
    A[Dockerfile] --> B[Cache de Camadas]
    B --> C[Camadas Sem Mudanças]
    B --> D[Camadas Reconstruídas]

A otimização eficaz de imagens Docker envolve a gestão estratégica de camadas, minimizando dependências desnecessárias e aproveitando mecanismos de cache de construção para melhorar o desempenho e a escalabilidade dos contêineres.

Resumo

Neste guia abrangente, você aprenderá a baixar e extrair imagens Docker, executar contêineres Docker interativamente, explorar e manipular contêineres em execução, modificar e registrar alterações nos contêineres e gerenciar seu ambiente Docker de forma eficiente. Seja você um usuário iniciante ou experiente do Docker, este tutorial o equipará com o conhecimento necessário para executar imagens Docker interativamente e assumir o controle de suas aplicações baseadas em contêineres.