Instalar e Configurar o Docker no Ubuntu

DockerBeginner
Pratique Agora

Introdução

Este tutorial fornece um guia abrangente para executar uma imagem Docker e gerenciar contêineres Docker. Você aprenderá os fundamentos do Docker, explorará imagens Docker e seus casos de uso, e descobrirá técnicas para puxar, gerenciar e interagir com contêineres Docker. Além disso, o tutorial aborda tópicos avançados de gerenciamento de contêineres, como volumes Docker, redes, Compose e Swarm, para ajudá-lo a implantar e gerenciar suas aplicações usando Docker de forma eficaz.

Conceitos Essenciais do Docker

O que é Docker?

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

Conceitos Principais do Docker

Tecnologia de Contencionalização

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

Característica Descrição
Isolamento Cada contêiner executa independentemente
Portabilidade Os contêineres podem executar em qualquer sistema que suporte Docker
Eficiência Leve em comparação com máquinas virtuais tradicionais
graph TD A[Código da Aplicação] --> B[Contêiner Docker] B --> C[Sistema Operacional do Host] C --> D[Infraestrutura]

Arquitetura do Docker

Docker utiliza uma arquitetura cliente-servidor com componentes-chave:

  1. Daemon do Docker
  2. Cliente Docker
  3. Registro Docker
  4. Imagens Docker
  5. Contêineres Docker

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=$(dpkg --print-architecture)]  $(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

## Puxar uma imagem
docker pull ubuntu:latest

## Listar imagens
docker images

## Executar um contêiner
docker run -it ubuntu:latest /bin/bash

Benefícios Principais do Docker

  • Ambientes de desenvolvimento consistentes
  • Implantação mais rápida
  • Eficiência de recursos
  • Escalabilidade
  • Gerenciamento de configuração simplificado

Trabalhando com Imagens Docker

Compreendendo Imagens Docker

Imagens Docker são modelos de leitura-somente usados para criar contêineres. Elas contêm o código da aplicação, o tempo de execução, as bibliotecas e as ferramentas de sistema necessárias para executar uma aplicação.

graph LR A[Dockerfile] --> B[Imagem Docker] B --> C[Contêiner Docker]

Comandos de Gerenciamento de Imagens

Comando Descrição
docker images Listar imagens locais
docker pull Baixar imagens do registro
docker rmi Remover imagens
docker tag Marcar imagens para versão

Criando um Dockerfile

## Imagem base
FROM ubuntu:22.04

## Metadados
LABEL maintainer="seu-email@exemplo.com"

## Atualizar o sistema
RUN apt-get update && apt-get install -y \
  python3 \
  pip

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

## Copiar arquivos da aplicação
COPY . /app

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

## Expor porta
EXPOSE 5000

## Executar a aplicação
CMD ["python3", "app.py"]

Construindo Imagens Docker

## Construir imagem
docker build -t myapp:v1 .

## Construir com tag específica
docker build -t myapp:latest .

## Construir com argumentos de construção
docker build --build-arg VERSION=1.0 -t myapp:v1 .

Camadas de Imagens Docker

graph TD A[Imagem Base] --> B[Atualizações do Sistema] B --> C[Instalar Dependências] C --> D[Copiar Código da Aplicação] D --> E[Definir Comando de Inicialização]

Armazenamento e Compartilhamento de Imagens

## Entrar no Docker Hub
docker login

## Empurrar imagem para o registro
docker push username/myapp:v1

## Puxar imagem do registro
docker pull username/myapp:v1

Boas Práticas

  • Minimizar o tamanho da imagem
  • Usar builds multi-stage
  • Aproveitar o cache
  • Evitar instalar pacotes desnecessários

Docker na Prática

Rede de Contêineres

Docker fornece vários modos de rede para comunicação entre contêineres:

Modo de Rede Descrição
Bridge Modo de rede padrão
Host Acesso direto à rede do host
None Sem conectividade de rede
## Criar rede personalizada
docker network create mynetwork

## Executar contêiner em rede específica
docker run --network=mynetwork ubuntu

Docker Compose

version: "3"
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  database:
    image: postgres
    environment:
      POSTGRES_PASSWORD: secret

Fluxo de Trabalho de Orquestração de Contêineres

graph TD A[Desenvolvimento] --> B[Contencionalização] B --> C[Teste] C --> D[Pré-produção] D --> E[Implantação de Produção]

Escalonamento de Aplicações

## Escalonar serviços
docker-compose up -d --scale web=3

## Monitorar recursos do contêiner
docker stats

Estratégias de Implantação de Produção

## Atualização incremental
docker service update \
  --image myapp:v2 \
  --update-parallelism 2 \
  --update-delay 10s \
  myservice

Monitoramento de Contêineres

## Visualizar logs do contêiner
docker logs mycontainer

## Uso de recursos em tempo real
docker top mycontainer

Rede Avançada

## Criar rede overlay
docker network create \
  -d overlay \
  --subnet 10.0.0.0/24 \
  my_overlay_network

Práticas de Segurança

Prática Descrição
Limites de Recursos Restrição de CPU/Memória
Sistema de Arquivos de Leitura-Somente Impedir modificações
Usuários Não-Root Reduzir privilégios do contêiner

Resumo

Ao final deste tutorial, você terá um sólido entendimento de como executar uma imagem Docker, gerenciar contêineres Docker e utilizar técnicas avançadas de gerenciamento de contêineres para implantar e gerenciar suas aplicações de forma mais eficiente. O conhecimento adquirido neste tutorial permitirá que você aproveite os benefícios do Docker, como consistência, escalabilidade e portabilidade, em seus processos de desenvolvimento e implantação de software.