Construindo Contêineres Docker Usando um Dockerfile Personalizado

DockerBeginner
Pratique Agora

Introdução

Este tutorial guiará você pelo processo de criação de uma imagem Docker personalizada usando um Dockerfile, deploy e gerenciamento de aplicações Docker. Você aprenderá o comando para construir uma imagem Docker a partir de um Dockerfile personalizado, permitindo que você otimize seu fluxo de trabalho de contentores e implante aplicações de forma mais eficiente.

Introdução aos Contêineres Docker

Docker é uma plataforma de código aberto popular que permite aos desenvolvedores construir, implantar e executar aplicações em um ambiente de contentores. Os contêineres são pacotes de software leves, autônomos e executáveis que incluem tudo o que é necessário para executar uma aplicação, incluindo o código, o tempo de execução, as ferramentas do sistema e as bibliotecas.

O que é Docker?

Docker é uma ferramenta projetada para facilitar a criação, implantação e execução de aplicações usando contêineres. Os contêineres permitem que um desenvolvedor empacote uma aplicação com todas as partes necessárias, como bibliotecas e outras dependências, e a envie como um único pacote.

Benefícios dos Contêineres Docker

  1. Portabilidade: Os contêineres Docker podem ser executados de forma consistente em qualquer ambiente, desde o computador local do desenvolvedor até servidores de produção, garantindo que a aplicação se comporte da mesma forma, independentemente da infraestrutura subjacente.
  2. Escalabilidade: Docker facilita a escala de aplicações para cima ou para baixo conforme necessário, adicionando ou removendo contêineres.
  3. Eficiência: Os contêineres Docker são leves e compartilham o kernel do sistema operacional hospedeiro, o que os torna mais eficientes do que as máquinas virtuais tradicionais.
  4. Consistência: Docker garante que a aplicação seja executada da mesma forma, do desenvolvimento à produção, eliminando o problema "funciona na minha máquina".

Arquitetura Docker

Docker utiliza uma arquitetura cliente-servidor, onde o cliente Docker se comunica com o daemon Docker, que é responsável por construir, executar e distribuir contêineres Docker.

graph LD
    subgraph Arquitetura Docker
        client[Cliente Docker]
        daemon[Daemon Docker]
        client -- API --> daemon
        daemon -- Images --> registry[Registro Docker]
    end

Contêineres Docker vs. Máquinas Virtuais

Embora contêineres e máquinas virtuais (VMs) tenham o propósito de executar aplicações em ambientes isolados, existem algumas diferenças importantes:

Característica Contêineres Docker Máquinas Virtuais
Isolamento Os contêineres compartilham o kernel do sistema operacional hospedeiro, proporcionando um isolamento mais leve. As VMs têm seu próprio sistema operacional completo, proporcionando um isolamento mais forte.
Uso de Recursos Os contêineres são mais eficientes, pois compartilham os recursos do hospedeiro e não precisam executar um sistema operacional completo. As VMs requerem mais recursos, pois cada VM tem seu próprio sistema operacional.
Tempo de Inicialização Os contêineres podem ser inicializados em segundos, pois não precisam inicializar um sistema operacional completo. As VMs podem levar minutos para serem inicializadas, pois precisam inicializar todo o sistema operacional.

Começando com Docker

Para começar com Docker, você precisará instalar o motor Docker em seu sistema. Você pode baixar e instalar o Docker no site oficial do Docker (https://www.docker.com/get-started). Após a instalação, você poderá começar a usar o Docker para construir, implantar e executar suas aplicações.

Criando uma Imagem Docker Personalizada

Criar uma imagem Docker personalizada é o processo de construir uma nova imagem com base em uma imagem base existente e, em seguida, adicionar suas próprias personalizações, como código de aplicação, dependências e configurações.

Dockerfile

Um Dockerfile é um arquivo de texto que contém todas as instruções necessárias para construir uma imagem Docker. Ele especifica a imagem base, as etapas a serem executadas durante o processo de construção e a configuração final da imagem.

Aqui está um exemplo de Dockerfile:

## Use a imagem base oficial Ubuntu 22.04
FROM ubuntu:22.04

## Atualiza o índice de pacotes e instala os pacotes necessários
RUN apt-get update && apt-get install -y \
  git \
  python3 \
  python3-pip \
  && rm -rf /var/lib/apt/lists/*

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

## Copia o código da aplicação
COPY . /app

## Instala as dependências Python
RUN pip3 install --no-cache-dir -r requirements.txt

## Exponha a porta em que a aplicação será executada
EXPOSE 8080

## Define o comando para executar a aplicação
CMD ["python3", "app.py"]

Construindo uma Imagem Personalizada

Para construir uma imagem Docker personalizada usando o Dockerfile, siga estas etapas:

  1. Crie um Dockerfile no diretório do seu projeto.

  2. Abra um terminal e navegue até o diretório do projeto.

  3. Execute o seguinte comando para construir a imagem:

    docker build -t my-custom-image .
    

    Este comando construirá uma nova imagem Docker com o nome "my-custom-image" usando as instruções no Dockerfile.

Empurrando a Imagem para um Registro

Depois de construir sua imagem Docker personalizada, você pode empurrá-la para um registro Docker, como o Docker Hub ou um registro privado, para que possa ser compartilhada e implantada em outros sistemas.

  1. Faça login no registro Docker:

    docker login
    
  2. Etiquete a imagem com o URL do registro e seu nome de usuário:

    docker tag my-custom-image username/my-custom-image:latest
    
  3. Empurre a imagem para o registro:

    docker push username/my-custom-image:latest
    

Agora, sua imagem Docker personalizada está disponível no registro e pode ser puxada e usada por outros desenvolvedores ou implantada em ambientes de produção.

Implantando e Gerenciando Aplicações Docker

Depois de criar sua imagem Docker personalizada, você pode implantar e gerenciar suas aplicações baseadas em Docker. Esta seção abordará os conceitos e etapas principais envolvidos na implantação e gerenciamento de aplicações Docker.

Implantando Contêineres Docker

Para implantar um contêiner Docker, você pode usar o comando docker run. Este comando inicia um novo contêiner com base em uma imagem especificada e permite configurar várias opções, como mapeamento de portas, variáveis de ambiente e volumes montados.

Aqui está um exemplo de execução de um contêiner com base na imagem "my-custom-image":

docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image

Este comando fará o seguinte:

  • Executar o contêiner em modo desacoplado (-d)
  • Mapear a porta 8080 do contêiner para a porta 8080 do host (-p 8080:8080)
  • Definir uma variável de ambiente DB_HOST com o valor 192.168.1.100 (-e DB_HOST=192.168.1.100)
  • Montar um diretório do host /data no diretório /app/data do contêiner (-v /data:/app/data)
  • Usar a imagem "my-custom-image" para iniciar o contêiner

Gerenciando Contêineres Docker

Docker fornece vários comandos para gerenciar contêineres em execução:

  • docker ps: Listar todos os contêineres em execução
  • docker stop <container_id>: Parar um contêiner em execução
  • docker start <container_id>: Iniciar um contêiner parado
  • docker logs <container_id>: Visualizar os logs de um contêiner
  • docker exec -it <container_id> /bin/bash: Acessar o shell de um contêiner em execução

Docker Compose

Docker Compose é uma ferramenta que permite definir e gerenciar aplicações Docker multi-contêiner. Ele usa um arquivo YAML para configurar os serviços, redes e volumes para sua aplicação.

Aqui está um exemplo de arquivo docker-compose.yml:

version: "3"
services:
  web:
    build: .
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=database
    depends_on:
      - database
  database:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=myapp
      - MYSQL_ROOT_PASSWORD=secret
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Este arquivo Compose define dois serviços: um serviço web e um serviço de banco de dados. O serviço web é construído a partir do diretório atual, enquanto o serviço de banco de dados usa a imagem oficial MySQL 5.7. Os serviços são conectados por meio de uma rede, e os dados do serviço de banco de dados são mantidos em um volume nomeado.

Para implantar esta aplicação, você pode executar docker-compose up -d no mesmo diretório do arquivo docker-compose.yml.

Escalando Aplicações Docker

Docker facilita a escala de suas aplicações adicionando ou removendo contêineres. Você pode usar o Docker Compose para escalar seus serviços:

docker-compose up -d --scale web=3

Este comando iniciará três instâncias do serviço "web".

Monitoramento e Log

Docker fornece ferramentas integradas para monitorar e registrar seus contêineres. Você pode usar o comando docker stats para visualizar o uso de recursos em tempo real e o comando docker logs para acessar os logs de um contêiner.

Além disso, você pode integrar suas aplicações Docker a ferramentas externas de monitoramento e registro, como Prometheus, Grafana e Elasticsearch, para obter insights e capacidades mais avançadas.

Resumo

Neste tutorial, você aprendeu a criar uma imagem Docker personalizada usando um Dockerfile, bem como a implantar e gerenciar aplicações Docker. Agora você conhece o comando para construir uma imagem Docker a partir de um Dockerfile personalizado, permitindo que você otimize seu processo de contencionalização e implante aplicações de forma mais eficaz.