0%
Os Fundamentos do Docker: Guia Completo para Desenvolvedores

Os Fundamentos do Docker: Guia Completo para Desenvolvedores

Descubra os conceitos essenciais do Docker, como criar e gerenciar contêineres e as melhores práticas para integração contínua e implantação.

I

InSkillCoach

· min

Os Fundamentos do Docker: Guia Completo para Desenvolvedores

O Docker revolucionou a forma como desenvolvemos, implantamos e executamos aplicações. Este guia apresenta os conceitos fundamentais do Docker e como utilizá-lo de forma eficiente no seu fluxo de trabalho de desenvolvimento.

O que é o Docker?

O Docker é uma plataforma de conteinerização que permite empacotar uma aplicação e suas dependências em um “contêiner” isolado, que poderá ser executado em qualquer servidor. Diferentemente das máquinas virtuais, os contêineres não exigem um hypervisor e são executados diretamente no kernel da máquina host.

Vantagens do Docker

  • Consistência de ambiente: “Funciona na minha máquina” passa a ser “Funciona em qualquer lugar”
  • Isolamento: As aplicações são executadas de forma isolada, sem interferir umas nas outras
  • Eficiência de recursos: Mais leve que as VMs tradicionais
  • Implantação rápida: Inicialização rápida dos contêineres
  • Escalabilidade fácil: Replicação simples dos contêineres

Arquitetura do Docker

A arquitetura do Docker é composta por vários componentes principais:

  • Docker Daemon (dockerd): O serviço que gerencia os contêineres
  • Docker Client: A interface de linha de comando
  • Docker Registry: O repositório onde as imagens são armazenadas (por exemplo, o Docker Hub)
  • Docker Images: Templates somente leitura usados para criar contêineres
  • Docker Containers: Instâncias em execução das imagens

Instalação do Docker

Windows

# Instalar o Docker Desktop para Windows
# Baixar em https://www.docker.com/products/docker-desktop
# Seguir as instruções de instalação

Linux (Ubuntu)

# Atualizar a lista de pacotes
sudo apt-get update

# Instalar os pré-requisitos
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# Adicionar a chave GPG oficial do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | 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] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

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

# Adicionar seu usuário ao grupo docker
sudo usermod -aG docker $USER

macOS

# Instalar o Docker Desktop para Mac
# Baixar em https://www.docker.com/products/docker-desktop
# Seguir as instruções de instalação

Comandos Essenciais do Docker

Gerenciamento de Imagens

# Baixar uma imagem
docker pull ubuntu:latest

# Listar as imagens
docker images

# Construir uma imagem a partir de um Dockerfile
docker build -t mon-app:1.0 .

# Remover uma imagem
docker rmi ubuntu:latest

Gerenciamento de Contêineres

# Criar e iniciar um contêiner
docker run -d -p 8080:80 --name mon-conteneur nginx

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

# Listar todos os contêineres (incluindo os parados)
docker ps -a

# Parar um contêiner
docker stop mon-conteneur

# Iniciar um contêiner existente
docker start mon-conteneur

# Remover um contêiner
docker rm mon-conteneur

Interação com os Contêineres

# Executar um comando em um contêiner em execução
docker exec -it mon-conteneur bash

# Exibir os logs de um contêiner
docker logs mon-conteneur

# Copiar arquivos para/de um contêiner
docker cp mon-fichier.txt mon-conteneur:/chemin/destination
docker cp mon-conteneur:/chemin/source/fichier.txt .

Criação de Dockerfile

Um Dockerfile é um arquivo de texto que contém todos os comandos para montar uma imagem Docker.

# Usar uma imagem base
FROM node:14-alpine

# Definir o diretório de trabalho
WORKDIR /app

# Copiar os arquivos de dependências
COPY package*.json ./

# Instalar as dependências
RUN npm install

# Copiar o restante dos arquivos
COPY . .

# Expor uma porta
EXPOSE 3000

# Definir o comando a ser executado na inicialização do contêiner
CMD ["npm", "start"]

Melhores Práticas para Dockerfiles

  1. Usar imagens base leves, como o Alpine Linux
  2. Combinar os comandos RUN para reduzir o número de camadas
  3. Limpar os caches após a instalação dos pacotes
  4. Usar o .dockerignore para excluir arquivos desnecessários
  5. Especificar versões exatas das dependências
  6. Usar usuários não-root para executar a aplicação

Docker Compose

O Docker Compose é uma ferramenta para definir e executar aplicações com múltiplos contêineres.

Exemplo de docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://postgres:password@db:5432/app

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=app

volumes:
  postgres_data:

Comandos do Docker Compose

# Iniciar todos os serviços definidos no docker-compose.yml
docker-compose up -d

# Parar todos os serviços
docker-compose down

# Ver os logs de todos os serviços
docker-compose logs

# Reconstruir as imagens e iniciar
docker-compose up -d --build

Redes Docker

Por padrão, o Docker cria várias redes:

  • bridge: Rede padrão para os contêineres
  • host: Remove o isolamento de rede entre o contêiner e o host
  • none: Desativa a rede

Criação e Gerenciamento de Redes

# Criar uma rede
docker network create mon-reseau

# Listar as redes
docker network ls

# Conectar um contêiner a uma rede
docker network connect mon-reseau mon-conteneur

# Inspecionar uma rede
docker network inspect mon-reseau

Volumes Docker

Os volumes permitem persistir dados fora dos contêineres.

Tipos de Volumes

  1. Volume nomeado: Gerenciado pelo Docker
  2. Bind mount: Vinculado a um caminho específico no host
  3. Volume tmpfs: Armazenado em memória (não persistente)

Comandos de Gerenciamento de Volumes

# Criar um volume nomeado
docker volume create mon-volume

# Listar os volumes
docker volume ls

# Usar um volume ao iniciar um contêiner
docker run -d -v mon-volume:/data --name mon-conteneur ubuntu

# Associar um diretório do host a um contêiner
docker run -d -v /chemin/hote:/data --name mon-conteneur ubuntu

# Remover um volume
docker volume rm mon-volume

Docker Registry

Um registry é um serviço de armazenamento e distribuição de imagens Docker.

Interação com o Docker Hub

# Fazer login no Docker Hub
docker login

# Aplicar uma tag a uma imagem
docker tag mon-app:1.0 utilisateur/mon-app:1.0

# Enviar uma imagem para o Docker Hub
docker push utilisateur/mon-app:1.0

# Baixar uma imagem do Docker Hub
docker pull utilisateur/mon-app:1.0

Implantar um Registry Privado

# Iniciar um registry local
docker run -d -p 5000:5000 --name registry registry:2

# Aplicar uma tag a uma imagem para o registry local
docker tag mon-app:1.0 localhost:5000/mon-app:1.0

# Enviar para o registry local
docker push localhost:5000/mon-app:1.0

Segurança no Docker

Boas Práticas

  1. Manter o Docker atualizado para se beneficiar das correções de segurança
  2. Escanear as imagens para detectar vulnerabilidades (com Docker Scout ou Trivy)
  3. Limitar as capacidades dos contêineres
  4. Usar usuários não-root nos contêineres
  5. Assinar as imagens com o Docker Content Trust
  6. Restringir os recursos (CPU, memória) dos contêineres

Configuração Segura

# Executar um contêiner com restrições de recursos
docker run -d --name mon-conteneur --memory="512m" --cpus="0.5" nginx

# Executar um contêiner com um usuário específico
docker run -d --user 1000:1000 --name mon-conteneur nginx

# Executar um contêiner em modo somente leitura
docker run -d --read-only --name mon-conteneur nginx

Casos de Uso Comuns

Aplicações Web

# Executar uma aplicação web Node.js
docker run -d -p 3000:3000 --name node-app node-app:1.0

# Executar um servidor Nginx como proxy reverso
docker run -d -p 80:80 --name nginx -v ./nginx.conf:/etc/nginx/nginx.conf nginx

Bancos de Dados

# Iniciar um banco de dados MySQL
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=password -v mysql_data:/var/lib/mysql mysql:8.0

# Iniciar um banco de dados PostgreSQL
docker run -d --name postgres -e POSTGRES_PASSWORD=password -v postgres_data:/var/lib/postgresql/data postgres:13

CI/CD

# Executar testes em um contêiner
docker run --rm -v $(pwd):/app -w /app node:14 npm test

# Construir uma aplicação em um contêiner
docker run --rm -v $(pwd):/app -w /app maven:3.8-openjdk-11 mvn package

Integração com o Kubernetes

O Docker funciona muito bem com o Kubernetes, orquestrador de contêineres:

  1. Criar imagens Docker para a sua aplicação
  2. Enviar as imagens para um registry acessível
  3. Definir manifestos Kubernetes para implantar os contêineres
  4. Usar o kubectl para gerenciar as implantações

Conclusão

O Docker transformou o desenvolvimento de software ao tornar as aplicações mais portáteis, mais fáceis de implantar e de escalar. Dominar o Docker tornou-se uma competência essencial para desenvolvedores e profissionais de DevOps.

Seguindo este guia, você adquiriu os conhecimentos fundamentais para:

  • Compreender os conceitos-chave do Docker
  • Criar e gerenciar contêineres
  • Trabalhar com imagens e volumes
  • Usar o Docker Compose para aplicações com múltiplos contêineres
  • Seguir as melhores práticas de segurança

Para ir além, explore a orquestração de contêineres com o Kubernetes, os pipelines de CI/CD baseados em Docker e a arquitetura de microsserviços.

InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.5k
146

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!