Como Criar Contêineres Docker do Zero

DockerBeginner
Pratique Agora

Introdução

Este tutorial fornece um guia abrangente sobre o trabalho com Docker Compose, focando na resolução do erro "docker: 'compose' não é um comando docker". Você aprenderá a instalar e configurar o Docker Compose, construir e gerenciar suas aplicações multi-container e explorar as melhores práticas para um uso eficaz do Docker Compose.

Fundamentos do Docker

Introdução à Contenção Docker

Docker é uma poderosa tecnologia de contenção que revoluciona o desenvolvimento e implantação de aplicações. A tecnologia de contenção permite aos desenvolvedores empacotar aplicações com todas as suas dependências, garantindo um desempenho consistente em diferentes ambientes de computação.

Conceitos Principais do Docker

O que é Docker?

Docker é uma plataforma de código aberto para contenção que permite aos desenvolvedores automatizar a implantação, escalonamento e gerenciamento de aplicações. Ele fornece uma alternativa leve às máquinas virtuais tradicionais, criando ambientes isolados chamados contêineres.

Componentes Principais do Docker

Componente Descrição
Docker Engine Ambiente de tempo de execução principal para criar e executar contêineres
Docker Image Modelo somente leitura contendo o código da aplicação e dependências
Docker Container Instância executável de uma imagem Docker
Dockerfile Arquivo de texto definindo as instruções de construção do contêiner

Arquitetura Docker

graph TD
    A[Cliente Docker] --> B[Demônio Docker]
    B --> C[Tempo de Execução do Contêiner]
    B --> D[Registro de Imagens]
    D --> E[Docker Hub]

Comandos e Exemplos Básicos do Docker

Instalando Docker no Ubuntu 22.04

## Atualizar pacotes do sistema
sudo apt update

## Instalar dependências do Docker
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 Docker
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

Operações Básicas do Docker

## Extrair uma imagem do Docker Hub

## Listar imagens disponíveis

## Executar um contêiner

## Listar contêineres em execução

## Parar um contêiner

Benefícios da Tecnologia de Contêineres

A contenção Docker oferece várias vantagens:

  • Ambientes de aplicação consistentes
  • Implantação e escalonamento mais rápidos
  • Consumo de recursos reduzido
  • Fluxo de trabalho de desenvolvimento aprimorado
  • Independência de plataforma

Casos de Uso para Contêineres Docker

Docker é amplamente utilizado em:

  • Arquitetura de microserviços
  • Integração Contínua/Entrega Contínua (CI/CD)
  • Desenvolvimento de aplicações nativas de nuvem
  • Ambientes de desenvolvimento e teste

Fluxo de Trabalho do Docker Compose

Compreendendo o Docker Compose

Docker Compose é uma ferramenta para definir e executar aplicações Docker multi-contêiner. Permite aos desenvolvedores usar um arquivo YAML para configurar serviços de aplicação, redes e volumes, simplificando o processo de gerenciamento de ambientes complexos de contêineres.

Arquitetura do Docker Compose

graph TD
    A[Docker Compose] --> B[docker-compose.yml]
    B --> C[Serviço 1]
    B --> D[Serviço 2]
    B --> E[Serviço 3]
    C --> F[Rede]
    D --> F
    E --> F

Configuração do Docker Compose

Estrutura do Arquivo YAML

Chave Descrição
version Versão do formato do arquivo Compose
services Define contêineres individuais
networks Configura a rede de contêineres
volumes Gerencia o armazenamento de dados persistentes

Exemplo Prático: Implantação de Aplicação Web

docker-compose.yml de Exemplo

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Comandos do Docker Compose

## Instalar o Docker Compose no Ubuntu 22.04
sudo apt update
sudo apt install docker-compose

## Validar o arquivo compose
docker-compose config

## Iniciar a aplicação multi-contêiner
docker-compose up -d

## Visualizar contêineres em execução
docker-compose ps

## Parar e remover contêineres
docker-compose down

Técnicas de Orquestração de Serviços

Docker Compose permite orquestração avançada de serviços:

  • Definição de dependências entre contêineres
  • Gerenciamento de variáveis de ambiente
  • Configuração de conexões de rede
  • Controle da ordem de inicialização dos contêineres

Escalabilidade e Flexibilidade

Aplicações multi-contêineres se beneficiam de:

  • Arquitetura modular
  • Escalabilidade horizontal fácil
  • Gerenciamento de configuração simplificado
  • Ambientes de desenvolvimento consistentes

Técnicas Avançadas do Docker

Configuração de Rede Docker

Tipos de Rede

Modo de Rede Descrição
Bridge Modo de rede padrão
Host Usar diretamente a rede host
Overlay Comunicação multi-host
Macvlan Atribuir endereço MAC
graph TD
    A[Rede Docker] --> B[Rede Bridge]
    A --> C[Rede Host]
    A --> D[Rede Overlay]
    A --> E[Rede Macvlan]

Criação de Rede Personalizada

## Criar rede bridge personalizada
docker network create --driver bridge custom_network

## Listar redes
docker network ls

## Inspecionar detalhes da rede
docker network inspect custom_network

Gerenciamento de Recursos do Contêiner

Restrições de Recursos

services:
  webapp:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M

Gerenciamento de Volumes Docker

## Criar volume nomeado
docker volume create app_data

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

## Listar volumes
docker volume ls

## Remover volumes não utilizados
docker volume prune

Otimização do Dockerfile

## Exemplo de build em várias etapas
FROM golang:1.17 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin
ENTRYPOINT ["myapp"]

Depuração Avançada

## Inspeção de logs do contêiner

## Monitoramento de recursos em tempo real

## Detalhes do processo do contêiner

Melhorias de Segurança

Opções de Segurança em Tempo de Execução

## Executar contêiner com sistema de arquivos somente leitura
docker run --read-only nginx

## Limitar capacidades do contêiner
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

Monitoramento de Desempenho

## Informações do Docker em todo o sistema
docker system info

## Análise de uso do disco
docker system df

## Remover recursos não utilizados
docker system prune -a

Resumo

Ao final deste tutorial, você terá um profundo entendimento do Docker Compose e como solucionar o erro "docker: 'compose' não é um comando docker". Você será capaz de configurar, gerenciar e escalar suas aplicações Docker Compose com confiança, seguindo as melhores práticas do setor para um desempenho e manutenibilidade ótimos.