Como Implantar Rapidamente Contêineres Docker com docker-compose

DockerBeginner
Pratique Agora

Introdução

Neste tutorial abrangente, você aprenderá a implantar rapidamente contêineres Docker usando a poderosa ferramenta docker-compose. Guiá-lo-emos pelo processo de compreensão da arquitetura Docker, instalação e configuração do Docker e início de uso do Docker Compose. Ao final deste tutorial, você será capaz de definir e configurar aplicações multi-contêiner, implantar e gerenciar contêineres Docker com Compose, e escalar e conectar suas redes Docker com facilidade. Vamos mergulhar e explorar o poder de "docker-compose up -d" para dar vida rapidamente às suas aplicações!

Introdução ao Docker e à Contenção de Aplicativos

O Docker é uma plataforma de código aberto popular que permite o desenvolvimento, implantação e gerenciamento de aplicações em ambientes contêinerizados. A contenção é um método de empacotamento e distribuição de aplicações, juntamente com suas dependências, em unidades isoladas e autocontidas chamadas contêineres.

O que é o Docker?

O Docker é uma plataforma de software que permite criar, implantar e executar aplicações dentro de contêineres. Os contêineres são ambientes leves, portáteis e autocontidos que incluem tudo o que uma aplicação precisa para funcionar, como código, tempo de execução, ferramentas de sistema e bibliotecas. Essa abordagem garante que a aplicação funcione de forma consistente em diferentes ambientes computacionais, desde o laptop de um desenvolvedor até um servidor de produção.

Benefícios do Docker e da Contenção

  • Consistência: Os contêineres garantem que as aplicações funcionem da mesma forma, independentemente da infraestrutura subjacente.
  • Escalabilidade: Os contêineres podem ser facilmente escalados para cima ou para baixo para atender à demanda em mudança.
  • Eficiência: Os contêineres são leves e utilizam os recursos de forma mais eficiente do que as máquinas virtuais tradicionais.
  • Portabilidade: Os contêineres podem ser movidos entre diferentes ambientes computacionais, como da máquina de um desenvolvedor para um servidor de produção.
  • Isolamento: Os contêineres oferecem um alto grau de isolamento, garantindo que os processos de um contêiner não interfiram nos de outro.

Arquitetura e Componentes do Docker

A arquitetura do Docker consiste em vários componentes principais:

  • Docker Engine: O tempo de execução principal que gerencia os contêineres.
  • Imagens Docker: Modelos para criar contêineres, contendo os arquivos, bibliotecas e dependências necessários.
  • Contêineres Docker: Instâncias de imagens Docker que executam aplicações.
  • Registro Docker: Um repositório para armazenar e distribuir imagens Docker.
graph TD
    A[Docker Engine] --> B[Imagens Docker]
    A --> C[Contêineres Docker]
    A --> D[Registro Docker]

Casos de Uso do Docker

O Docker é amplamente utilizado em várias indústrias e cenários, como:

  • Aplicações Web: Implantar e escalar aplicações web em diferentes ambientes.
  • Microserviços: Construir e gerenciar aplicações distribuídas complexas compostas de pequenos serviços independentes.
  • Integração Contínua e Implantação: Automatizar a construção, teste e implantação de aplicações.
  • Aprendizado de Máquina e Ciência de Dados: Empacotar e implantar modelos de aprendizado de máquina e pipelines de processamento de dados.
  • IoT e Computação de Ponta: Implantar aplicações e serviços na borda da rede.

Ao compreender os fundamentos do Docker e da contenção, você pode aproveitar essas ferramentas poderosas para otimizar seus processos de desenvolvimento, implantação e gerenciamento de aplicações.

Compreendendo a Arquitetura e Componentes do Docker

Docker Engine

O Docker Engine é o tempo de execução central que impulsiona todo o ecossistema Docker. É responsável por gerenciar o ciclo de vida dos contêineres Docker, incluindo a construção, execução e monitoramento deles. O Docker Engine consiste nos seguintes componentes principais:

  • Docker Daemon: O processo em segundo plano que gerencia objetos Docker, como imagens, contêineres, redes e volumes.
  • Docker API: A API que programas e ferramentas utilizam para interagir com o Docker Daemon.
  • Docker CLI: A interface de linha de comando que permite aos usuários interagir com o Docker Daemon.

Imagens Docker

Imagens Docker são os modelos para criar contêineres Docker. Elas contêm os arquivos, bibliotecas e dependências necessários para executar uma aplicação. As imagens Docker são construídas usando um Dockerfile, que é um script baseado em texto que define as etapas para criar a imagem.

Aqui está um exemplo de Dockerfile:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Este Dockerfile cria uma nova imagem baseada na imagem base Ubuntu 22.04, instala o servidor web Nginx, copia um arquivo index.html para dentro do contêiner, expõe a porta 80 e define o comando padrão para iniciar o servidor Nginx.

Contêineres Docker

Contêineres Docker são instâncias de imagens Docker. São os ambientes em execução e isolados que executam aplicações. Os contêineres são leves e portáteis, pois empacotam a aplicação e suas dependências em uma única unidade autocontida.

Você pode criar e executar um novo contêiner usando o comando docker run:

docker run -d -p 80:80 --name my-nginx nginx

Este comando cria um novo contêiner baseado na imagem Nginx, mapeia a porta 80 no host para a porta 80 no contêiner e inicia o contêiner em modo desacoplado.

Registro Docker

O Registro Docker é um repositório para armazenar e distribuir imagens Docker. Ele permite que você carregue, baixe e compartilhe imagens Docker com outros. O registro Docker público mais popular é o Docker Hub, mas você também pode configurar seu próprio registro privado.

Ao compreender os componentes-chave da arquitetura Docker, você pode construir, implantar e gerenciar suas aplicações contêinerizadas de forma eficaz.

Instalando e Configurando o Docker no Seu Sistema

Instalando o Docker no Ubuntu 22.04

Para instalar o Docker em um sistema Ubuntu 22.04, siga estas etapas:

  1. Atualize o índice de pacotes e instale as dependências necessárias:

    sudo apt-get update
    sudo apt-get install -y \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    
  2. Adicione a chave GPG oficial do Docker e adicione o repositório Docker:

    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  3. Instale o Docker Engine, containerd e os pacotes Docker Compose:

    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    
  4. Verifique a instalação executando o comando docker version:

    sudo docker version
    

Configurando o Docker

Após instalar o Docker, você pode configurá-lo de acordo com suas necessidades. Aqui estão algumas tarefas de configuração comuns:

Gerenciando o Docker como um usuário não-root

Por padrão, o daemon Docker roda como o usuário root. Para permitir que usuários não-root executem comandos Docker, você pode adicioná-los ao grupo docker:

sudo usermod -aG docker $USER
newgrp docker

Configurando Opções do Docker Daemon

Você pode personalizar o comportamento do daemon Docker editando o arquivo /etc/docker/daemon.json. Por exemplo, para alterar o driver de log padrão:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}

Habilitando o Docker Compose

Docker Compose é uma ferramenta para definir e executar aplicações multi-contêiner. É instalado como parte da instalação do Docker, mas você pode precisar habilitá-lo manualmente:

sudo systemctl enable docker-compose-plugin

Seguindo essas etapas, você pode instalar e configurar o Docker com sucesso em seu sistema Ubuntu 22.04, criando as bases para trabalhar com Docker e Docker Compose.

Introdução ao Docker Compose

O que é o Docker Compose?

Docker Compose é uma ferramenta para definir e executar aplicações Docker multi-contêiner. Permite criar um arquivo YAML que descreve os serviços, redes e volumes que compõem sua aplicação e, em seguida, usar um único comando para iniciar, parar e gerenciar todos os serviços.

Instalando o Docker Compose

O Docker Compose é instalado como parte da instalação do Docker no Ubuntu 22.04. Você pode verificar a instalação executando o seguinte comando:

docker-compose version

Escrevendo um Arquivo Docker Compose

Um arquivo Docker Compose é um arquivo YAML que define os serviços, redes e volumes que compõem sua aplicação. Aqui está um exemplo de arquivo docker-compose.yml que define uma aplicação web simples com um servidor web Nginx e um banco de dados MySQL:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

Este arquivo define dois serviços: web e db. O serviço web utiliza a imagem mais recente do Nginx, expõe a porta 80 e monta um diretório local html para a raiz de documentos do Nginx. O serviço db utiliza a imagem MySQL 5.7, define a senha de root e monta um volume nomeado para os dados do MySQL.

Gerenciando Aplicações Docker Compose

Você pode usar o comando docker-compose para gerenciar sua aplicação Docker Compose. Aqui estão alguns comandos comuns:

  • docker-compose up -d: Inicia a aplicação em modo desacoplado.
  • docker-compose down: Para e remove a aplicação.
  • docker-compose ps: Lista os serviços em execução.
  • docker-compose logs: Exibe os logs da aplicação.
  • docker-compose scale web=3: Escalona o serviço web para 3 instâncias.

Usando o Docker Compose, você pode definir, implantar e gerenciar facilmente aplicações multi-contêiner, tornando-o uma ferramenta poderosa para otimizar seus fluxos de trabalho Docker.

Definindo e Configurando Aplicações Multi-Contêiner

Definindo Serviços no Docker Compose

Em um arquivo Docker Compose, você define os serviços da sua aplicação, que representam os contêineres individuais que compõem a aplicação. Cada serviço possui sua própria configuração, como a imagem Docker a ser usada, variáveis de ambiente, portas a serem expostas e volumes a serem montados.

Aqui está um exemplo de um arquivo Docker Compose multi-serviço:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
volumes:
  mysql-data:

Este arquivo define três serviços: web, db e redis. Cada serviço possui sua própria configuração, como a imagem Docker a ser usada, portas a serem expostas e volumes a serem montados.

Configurando Dependências de Serviços

Você pode definir dependências entre serviços usando a diretiva depends_on no arquivo Docker Compose. Isso garante que os serviços sejam iniciados na ordem correta e que as dependências sejam atendidas antes que um serviço seja iniciado.

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

Neste exemplo, o serviço web depende do serviço db, portanto, o banco de dados será iniciado antes do servidor web.

Configurando Redes e Volumes

Além de definir serviços, você também pode configurar redes e volumes em seu arquivo Docker Compose. Redes permitem que seus serviços se comuniquem entre si, enquanto volumes fornecem armazenamento persistente para os dados da sua aplicação.

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - backend
volumes:
  mysql-data:
networks:
  frontend:
  backend:

Neste exemplo, o serviço web está conectado à rede frontend, e o serviço db está conectado à rede backend. Isso permite que o servidor web se comunique com o banco de dados sem expor o banco de dados diretamente à internet pública.

Compreendendo como definir e configurar aplicações multi-contêiner usando o Docker Compose, você pode construir aplicações complexas, escaláveis e manuteníveis com facilidade.

Implantando e Gerenciando Contêineres Docker com Compose

Implantando uma Aplicação Docker Compose

Para implantar uma aplicação Docker Compose, você pode usar o comando docker-compose up. Este comando lê o arquivo Docker Compose, cria as redes e volumes necessários e inicia os serviços especificados.

docker-compose up -d

O flag -d executa os contêineres em modo desacoplado, o que significa que eles executam em segundo plano.

Gerenciando Contêineres Docker Compose

Depois que sua aplicação Docker Compose estiver em execução, você pode usar os seguintes comandos para gerenciar os contêineres:

  • docker-compose ps: Lista os contêineres em execução.
  • docker-compose logs: Exibe os logs dos contêineres.
  • docker-compose stop: Para os contêineres em execução.
  • docker-compose start: Inicia os contêineres parados.
  • docker-compose down: Para e remove os contêineres, redes e volumes.

Por exemplo, para exibir os logs do serviço web:

docker-compose logs web

Escalonando Serviços Docker Compose

O Docker Compose facilita o escalonamento de seus serviços para cima ou para baixo. Você pode usar o comando docker-compose scale para alterar o número de instâncias de um serviço específico.

docker-compose scale web=3

Este comando escalonará o serviço web para 3 instâncias.

Atualizando Aplicações Docker Compose

Quando precisar atualizar sua aplicação Docker Compose, você pode fazer alterações no arquivo Docker Compose e, em seguida, usar o comando docker-compose up para aplicar as mudanças.

## Atualize o arquivo Docker Compose
vim docker-compose.yml

## Aplique as mudanças
docker-compose up -d

O Docker Compose puxará automaticamente as novas imagens, criará novos contêineres e atualizará a aplicação em execução.

Ao aproveitar o poder do Docker Compose, você pode implantar, gerenciar e escalonar facilmente suas aplicações multi-contêiner, tornando o processo de desenvolvimento e implantação mais eficiente e confiável.

Escalonamento e Rede de Contêineres Docker

Escalonamento de Contêineres Docker

Um dos principais benefícios do uso do Docker é a capacidade de escalonar facilmente suas aplicações para cima ou para baixo para atender à demanda em mudança. O Docker Compose simplifica ainda mais esse processo, fornecendo o comando scale.

Para escalonar um serviço em sua aplicação Docker Compose, você pode usar o seguinte comando:

docker-compose scale web=3

Isso escalonará o serviço web para 3 instâncias. Você pode escalonar qualquer serviço em sua aplicação substituindo web pelo nome do serviço que deseja escalonar.

Rede de Contêineres Docker

O Docker Compose cria automaticamente uma rede padrão para sua aplicação, mas você também pode definir redes personalizadas para controlar como seus serviços se comunicam entre si.

Aqui está um exemplo de um arquivo Docker Compose que define duas redes personalizadas, frontend e backend:

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - frontend
  app:
    image: myapp:latest
    networks:
      - frontend
      - backend
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    networks:
      - backend
networks:
  frontend:
  backend:

Neste exemplo, os serviços web e app estão conectados à rede frontend, enquanto os serviços app e db estão conectados à rede backend. Isso permite que o servidor web se comunique com a aplicação, e a aplicação se comunique com o banco de dados, sem expor o banco de dados diretamente à internet pública.

Você também pode configurar configurações de rede, como faixas de endereços IP e configurações de DNS, usando a seção networks do arquivo Docker Compose.

Compreendendo como escalonar e conectar em rede seus contêineres Docker, você pode construir aplicações altamente disponíveis, escaláveis e seguras que podem se adaptar a demandas e requisitos em mudança.

Melhores Práticas para Implantação e Manutenção do Docker

Otimizar Imagens Docker

  • Utilize uma imagem base mínima (por exemplo, alpine ou scratch) para reduzir o tamanho da imagem e a superfície de ataque.
  • Utilize builds em várias etapas para otimizar o tamanho final da imagem.
  • Mantenha as imagens atualizadas, atualizando regularmente a imagem base e as dependências.
  • Utilize uma ferramenta como dive para analisar e otimizar suas imagens Docker.

Implementar Práticas de Segurança

  • Utilize um repositório Docker oficial e confiável (por exemplo, Docker Hub) para extrair imagens.
  • Analise as imagens quanto a vulnerabilidades usando ferramentas como Snyk ou Trivy.
  • Aplique o princípio do privilégio mínimo executando contêineres como usuários não-root.
  • Habilite o Docker Content Trust para verificar a integridade e a autenticidade das imagens.
  • Configure as configurações de segurança do daemon e do contêiner Docker de acordo com as melhores práticas.

Automatizar o Processo de Build e Implantação

  • Utilize uma ferramenta de integração contínua (CI) como LabEx para automatizar a construção, teste e implantação de suas aplicações Docker.
  • Implemente um fluxo de trabalho GitOps armazenando seus arquivos Docker Compose em um sistema de controle de versão.
  • Utilize arquivos de configuração ou variáveis de ambiente específicos do ambiente para gerenciar diferentes ambientes de implantação.

Monitorar e Manter Ambientes Docker

  • Configure o registro e monitoramento de seus contêineres e hosts Docker.
  • Utilize ferramentas como Prometheus, Grafana ou LabEx para monitorar as métricas de contêiner e sistema.
  • Revise e atualize regularmente seus arquivos Docker Compose e configurações de contêiner.
  • Implemente um processo para lidar graciosamente com falhas e reinicializações de contêineres.

Aproveitar as Ferramentas do Ecossistema Docker

  • Utilize o Docker Swarm ou Kubernetes para orquestrar e gerenciar contêineres Docker em escala.
  • Explore ferramentas como Docker Secrets, Docker Volumes e Docker Networks para aprimorar suas implantações Docker.
  • Integre LabEx ou outras plataformas DevOps para otimizar seus fluxos de trabalho baseados em Docker.

Seguindo essas melhores práticas, você pode garantir que suas implantações Docker sejam seguras, eficientes e manuteníveis, ajudando-o a tirar o máximo proveito da plataforma Docker.

Resumo

Neste tutorial, você aprendeu como implantar rapidamente contêineres Docker usando a ferramenta docker-compose. Explorou a arquitetura Docker, instalou e configurou o Docker e dominou a arte de definir e configurar aplicações multi-contêiner. Ao aproveitar o poder de "docker-compose up -d", você agora pode implantar e gerenciar facilmente seus ambientes Docker, escalar suas aplicações e garantir uma rede otimizada. Com o conhecimento adquirido neste tutorial, você está bem equipado para otimizar seu processo de implantação Docker e levar seus esforços de conteneirização a novos patamares.