Como Criar Contêineres Docker no Ubuntu

DockerBeginner
Pratique Agora

Introdução

Este tutorial abrangente do Docker fornece aos desenvolvedores e profissionais de TI conhecimento essencial sobre a tecnologia de contêineres. Aprenda a configurar o Docker no Ubuntu, compreenda os conceitos centrais e utilize a contencionalização para a implantação consistente de aplicações em diferentes ambientes de computação.

Fundamentos do Docker

Introdução à Tecnologia Docker

Docker é uma plataforma poderosa para tecnologia de contêineres que revoluciona a implantação e a virtualização de software. Como ferramenta de código aberto, o Docker permite que desenvolvedores empacotem, distribuam e executem aplicações de forma consistente em diferentes ambientes de computação.

Conceitos Centrais do Docker

O que é Docker?

Docker é uma tecnologia de virtualização leve que permite aos desenvolvedores criar, implantar e executar aplicações usando contêineres. Ao contrário das máquinas virtuais tradicionais, os contêineres compartilham o kernel do sistema host, tornando-os mais eficientes e rápidos para iniciar.

Arquitetura de Contêineres

graph TD
    A[Docker Engine] --> B[Container Runtime]
    A --> C[Imagens Docker]
    B --> D[Contêiner de Aplicação]
    C --> D

Componentes Principais do Docker

Componente Descrição Finalidade
Docker Engine Ambiente de execução central Gerencia o ciclo de vida do contêiner
Imagem Docker Modelo somente leitura Define a configuração do contêiner
Contêiner Docker Instância executável Executa a aplicação

Instalação no Ubuntu 22.04

## Atualizar o índice de pacotes
sudo apt update

## Instalar dependências
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Adicionar a chave GPG oficial do Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Configurar o repositório estável
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Instalar o Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Comandos Básicos do Docker

## Verificar a versão do Docker
docker --version

## Verificar a instalação do Docker
docker run hello-world

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

## Listar todos os contêineres
docker ps -a

Vantagens do Docker

O Docker oferece benefícios significativos para o desenvolvimento de software moderno:

  • Ambiente consistente entre desenvolvimento e produção
  • Implantação de aplicações mais rápida
  • Melhor utilização de recursos
  • Gerenciamento de dependências simplificado
  • Escalabilidade e portabilidade aprimoradas

Criando Imagens Docker

Compreendendo Imagens Docker

Imagens Docker são modelos somente leitura usados para criar contêineres. Elas contêm o código da aplicação, o tempo de execução, as bibliotecas, as variáveis de ambiente e os arquivos de configuração necessários para executar uma aplicação.

Fundamentos do Dockerfile

Um Dockerfile é um documento de texto que contém instruções para construir uma imagem Docker. Cada instrução cria uma nova camada na imagem.

Estrutura do Dockerfile

graph TD
    A[Imagem Base] --> B[Instalar Dependências]
    B --> C[Copiar Código da Aplicação]
    C --> D[Definir Variáveis de Ambiente]
    D --> E[Definir Comando de Inicialização]

Instruções Comuns do Dockerfile

Instrução Finalidade Exemplo
FROM Especificar a imagem base FROM ubuntu:22.04
RUN Executar comandos RUN apt-get update
COPY Copiar arquivos para a imagem COPY ./app /application
WORKDIR Definir diretório de trabalho WORKDIR /application
CMD Definir comando padrão CMD ["python", "app.py"]

Criando uma Imagem Simples de Aplicação Web Python

Dockerfile de Exemplo

## Usar a imagem de tempo de execução Python oficial como imagem base
FROM python:3.9-slim

## Definir o diretório de trabalho
WORKDIR /app

## Copiar o arquivo requirements
COPY requirements.txt .

## Instalar dependências
RUN pip install --no-cache-dir -r requirements.txt

## Copiar o código da aplicação
COPY . .

## Expor porta
EXPOSE 5000

## Definir o comando de inicialização
CMD ["python", "app.py"]

Construindo a Imagem Docker

## Construir a imagem com tag
docker build -t hello-world-app .

## Listar imagens locais
docker images

## Executar a imagem criada
docker run -p 5000:5000 hello-world-app

Comandos de Gerenciamento de Imagens

## Remover imagem específica
docker rmi hello-world-app

## Remover todas as imagens não utilizadas
docker image prune

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

Boas Práticas

  • Utilize imagens base mínimas
  • Minimize o número de camadas
  • Evite instalar pacotes desnecessários
  • Utilize builds multi-stage para imagens menores
  • Utilize o cache de build eficientemente

Gerenciamento de Contêineres

Visão Geral do Ciclo de Vida de Contêineres

Contêineres Docker possuem um ciclo de vida definido com vários estados, desde a criação até a terminação. Compreender esses estados é crucial para um gerenciamento eficaz de contêineres.

stateDiagram-v2
    [*] --> Criado
    Criado --> Em Execução
    Em Execução --> Pausado
    Pausado --> Em Execução
    Em Execução --> Parado
    Parado --> Removido
    Removido --> [*]

Operações Básicas de Contêineres

Comandos de Gerenciamento de Contêineres

Comando Função Exemplo
docker create Criar um contêiner docker create nginx
docker start Iniciar um contêiner docker start container_id
docker stop Parar um contêiner em execução docker stop container_id
docker restart Reiniciar um contêiner docker restart container_id
docker rm Remover um contêiner docker rm container_id

Executando Contêineres

## Executar contêiner em primeiro plano
docker run nginx

## Executar contêiner em segundo plano
docker run -d nginx

## Executar contêiner com mapeamento de porta
docker run -p 8080:80 nginx

## Executar contêiner com nome personalizado
docker run --name web-server nginx

Inspeção e Monitoramento de Contêineres

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

## Listar todos os contêineres
docker ps -a

## Visualizar logs do contêiner
docker logs container_id

## Inspecionar detalhes do contêiner
docker inspect container_id

## Monitorar o uso de recursos do contêiner
docker stats

Rede de Contêineres

## Listar redes docker
docker network ls

## Criar rede personalizada
docker network create mynetwork

## Conectar contêiner à rede
docker network connect mynetwork container_id

Gerenciamento Avançado de Contêineres

Limites de Recursos de Contêineres

## Limitar CPU e memória
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  nginx

Escalonamento de Contêineres

## Criar várias instâncias de contêiner
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx

Estratégias de Implantação de Contêineres

Gerenciamento de Dados Persistentes

## Criar volume
docker volume create myvolume

## Montar volume no contêiner
docker run -v myvolume:/app/data nginx

Configuração de Ambiente

## Definir variáveis de ambiente
docker run -e DATABASE_URL=localhost nginx

Resumo

O Docker revoluciona o desenvolvimento de software, permitindo contêineres leves e portáteis que simplificam a implantação de aplicativos. Ao dominar os componentes principais do Docker, o processo de instalação e os comandos básicos, os desenvolvedores podem criar ambientes de software mais eficientes, escaláveis e reproduzíveis com sobrecarga mínima e máxima flexibilidade.