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
- 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.
- Escalabilidade: Docker facilita a escala de aplicações para cima ou para baixo conforme necessário, adicionando ou removendo contêineres.
- 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.
- 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:
Crie um Dockerfile no diretório do seu projeto.
Abra um terminal e navegue até o diretório do projeto.
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.
Faça login no registro Docker:
docker loginEtiquete a imagem com o URL do registro e seu nome de usuário:
docker tag my-custom-image username/my-custom-image:latestEmpurre 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_HOSTcom o valor192.168.1.100(-e DB_HOST=192.168.1.100) - Montar um diretório do host
/datano diretório/app/datado 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çãodocker stop <container_id>: Parar um contêiner em execuçãodocker start <container_id>: Iniciar um contêiner paradodocker logs <container_id>: Visualizar os logs de um contêinerdocker 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.



