Como Criar e Configurar Contêineres Docker

DockerBeginner
Pratique Agora

Introdução

Este tutorial abrangente sobre Docker fornece aos desenvolvedores e profissionais de TI um guia prático para compreender e implementar a tecnologia de contêineres. Explorando os conceitos centrais do Docker, os processos de instalação e os comandos fundamentais, os aprendizes adquirirão habilidades essenciais para ambientes modernos de desenvolvimento e implantação de software.

Conceitos Básicos do Docker

O que é Docker?

Docker é uma poderosa tecnologia de contêineres que revoluciona a implantação e o desenvolvimento de software. Permite que desenvolvedores empacotem aplicações com todas as suas dependências em unidades padronizadas chamadas contêineres, garantindo desempenho consistente em diferentes ambientes de computação.

Conceitos Centrais do Docker

Tecnologia de Contêinerização

A contêinerização permite que aplicações executem em ambientes isolados, proporcionando várias vantagens-chave:

Característica Descrição
Isolamento Os contêineres executam independentemente, sem interferir uns nos outros
Portabilidade As aplicações podem ser movidas entre diferentes sistemas sem problemas
Eficiência Leve e mais rápido do que máquinas virtuais tradicionais
graph TD A[Código da Aplicação] --> B[Contêiner Docker] B --> C[Implantação Consistente] B --> D[Eficiência de Recursos]

Instalação do Docker no Ubuntu 22.04

Para instalar o Docker no Ubuntu, utilize os seguintes comandos:

## Atualizar o índice de pacotes
sudo apt-get update

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

## Adicionar a chave GPG oficial do Docker
curl -fsSL | sudo apt-key add -

## Configurar o repositório do Docker
sudo add-apt-repository "deb [arch=amd64]  $(lsb_release -cs) stable"

## Instalar o Docker CE
sudo apt-get update
sudo apt-get install docker-ce

Primeiro Exemplo de Contêiner Docker

Criar e executar um contêiner nginx simples:

## Baixar a imagem nginx
sudo docker pull nginx

## Executar o contêiner nginx
sudo docker run -d -p 80:80 nginx

Este comando baixa a imagem nginx e executa um contêiner, mapeando a porta 80 do contêiner para a porta 80 no sistema hospedeiro.

Componentes Principais do Docker

  • Docker Engine: Ambiente de tempo de execução principal
  • Imagens Docker: Modelos somente leitura para contêineres
  • Contêineres Docker: Instâncias executáveis de imagens
  • Dockerfile: Script para construir imagens personalizadas

Variáveis de Ambiente

Compreendendo Variáveis de Ambiente no Docker

Variáveis de ambiente são pares chave-valor que fornecem informações de configuração e tempo de execução para contêineres Docker. Elas permitem a configuração dinâmica de aplicações sem modificar o código-fonte do contêiner.

Tipos de Configuração de Variáveis de Ambiente

Método de Configuração Descrição Caso de Uso
Dockerfile ENV Define variáveis de ambiente estáticas durante a construção da imagem Definir configurações padrão
Comando Docker Run Passa variáveis específicas do tempo de execução Sobrescrever configurações padrão
Docker Compose Define variáveis de ambiente em arquivos de configuração Configurações complexas de múltiplos contêineres
graph TD A[Fontes de Variáveis de Ambiente] --> B[Dockerfile] A --> C[Comando Docker Run] A --> D[Docker Compose]

Exemplo de Variável de Ambiente no Dockerfile

Crie um Dockerfile simples com variáveis de ambiente:

## Imagem base
FROM ubuntu:22.04

## Definir variáveis de ambiente
ENV APP_HOME=/opt/myapp
ENV DATABASE_URL=localhost
ENV LOG_LEVEL=info

## Criar diretório da aplicação
RUN mkdir -p $APP_HOME

## Definir diretório de trabalho
WORKDIR $APP_HOME

Injeção de Variáveis de Ambiente em Tempo de Execução

Passe variáveis de ambiente durante a execução do contêiner:

## Executar contêiner com variáveis de ambiente personalizadas
docker run -e DATABASE_URL=postgresql://user:pass@db.example.com \
  -e LOG_LEVEL=debug \
  myapp:latest

Configuração de Ambiente no Docker Compose

Exemplo de docker-compose.yml com variáveis de ambiente:

version: "3"
services:
  web:
    image: myapp
    environment:
      - DATABASE_URL=postgresql://user:pass@db
      - LOG_LEVEL=info

Boas Práticas para Variáveis de Ambiente

  • Utilize variáveis de ambiente para informações sensíveis
  • Evite codificar credenciais
  • Utilize arquivos .env para desenvolvimento local
  • Implemente estratégias de gerenciamento de variáveis seguras

Melhores Práticas Docker

Otimização de Imagens de Contêiner

Imagens Docker eficientes são cruciais para o desempenho e a segurança. Implemente builds em várias etapas para reduzir o tamanho e a complexidade da imagem:

## 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/
EXPOSE 8080
CMD ["myapp"]

Considerações de Segurança

Prática de Segurança Descrição Implementação
Imagens Base Mínimas Utilize imagens base leves Alpine Linux
Usuários Não-Root Execute contêineres como não-root Diretiva USER
Varredura de Imagens Detectar vulnerabilidades Trivy, Docker Scout
graph TD A[Segurança Docker] --> B[Imagens Mínimas] A --> C[Execução sem privilégios de root] A --> D[Varredura Regular]

Gerenciamento de Recursos de Contêiner

Implemente restrições de recursos para evitar sobrecarga do contêiner:

## Limitar o uso de CPU e memória
docker run -d \
  --cpus="0.5" \
  --memory="512m" \
  --memory-reservation="256m" \
  myapp:latest

Técnicas de Otimização de Dockerfile

Reduza as camadas de imagem e otimize o processo de build:

## Combinar comandos para minimizar camadas
RUN apt-get update \
 && apt-get install -y python3 \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

Princípios de Orquestração de Contêineres

Utilize o Docker Compose para implantações complexas:

version: "3"
services:
  web:
    image: myapp
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"

Estratégias de Log e Monitoramento

Configure log e monitoramento centralizados:

## Log em arquivo JSON com limites de tamanho
docker run --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

Resumo

O Docker representa uma abordagem revolucionária para a implantação de software, oferecendo aos desenvolvedores ferramentas poderosas para criar, gerenciar e escalar aplicações em diferentes ambientes computacionais. Ao dominar as técnicas de contencionalização, os desenvolvedores podem alcançar maior consistência, portabilidade e eficiência em seus fluxos de trabalho de desenvolvimento e implantação de software.