Introdução
Docker é uma plataforma popular de contentores que permite aos desenvolvedores empacotar e implantar aplicações num ambiente consistente e isolado. Neste tutorial, aprenderá a construir uma imagem Docker personalizada e a executar um contêiner Docker baseado nessa imagem. No final deste guia, terá uma compreensão sólida do processo para criar, gerir e executar contentores Docker para as suas aplicações.
Compreendendo Contêineres Docker
Docker é uma plataforma de código aberto popular que permite aos desenvolvedores construir, implantar e executar aplicações num ambiente de contentores. Os contentores 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 de sistema e as bibliotecas.
O que é um Contêiner Docker?
Um contêiner Docker é uma unidade de software padronizada que empacota o código e todas as suas dependências para que a aplicação execute de forma rápida e fiável de um ambiente informático para outro. Os contentores são criados a partir de imagens Docker, que são os projetos para criar contentores.
graph LR
A[Imagem Docker] --> B[Contêiner Docker]
B[Contêiner Docker] --> C[Aplicação em execução]
Benefícios dos Contêineres Docker
Os contentores Docker oferecem várias vantagens em relação às abordagens tradicionais de virtualização:
| Benefício | Descrição |
|---|---|
| Portabilidade | Os contentores podem executar-se de forma consistente em qualquer máquina, independentemente da infraestrutura subjacente. |
| Eficiência | Os contentores partilham o sistema operativo do host, tornando-os mais leves e eficientes do que as máquinas virtuais. |
| Consistência | Os contentores garantem que as aplicações sempre executarão da mesma forma, independentemente do ambiente. |
| Escalabilidade | Os contentores podem ser facilmente escalados para cima ou para baixo para satisfazer as necessidades em mudança. |
Ciclo de Vida de um Contêiner Docker
O ciclo de vida de um contêiner Docker inclui as seguintes fases:
- Construção: Criação de uma imagem Docker a partir de um Dockerfile.
- Envio: Armazenamento da imagem Docker num registo, como o Docker Hub.
- Execução: Lançamento de um novo contêiner a partir de uma imagem Docker.
- Gestão: Monitorização, escalamento e manutenção de contentores em execução.
Compreendendo os fundamentos dos contentores Docker, pode agora prosseguir para a construção de uma imagem Docker personalizada.
Construindo uma Imagem Docker Personalizada
Para construir uma imagem Docker personalizada, precisa criar um Dockerfile, que é um ficheiro de texto que contém instruções para a construção da imagem.
Criando um Dockerfile
Eis um exemplo de Dockerfile que constrói uma imagem personalizada baseada na imagem base Ubuntu 22.04 e instala o servidor web Apache:
## Utilize a imagem base Ubuntu 22.04
FROM ubuntu:22.04
## Atualize o índice de pacotes e instale o Apache
RUN apt-get update && apt-get install -y apache2
## Defina o comando padrão a executar quando o contêiner é iniciado
CMD ["apache2ctl", "-D", "FOREGROUND"]
Construindo a Imagem Docker
Para construir a imagem Docker a partir do Dockerfile, execute o seguinte comando no mesmo diretório do Dockerfile:
docker build -t my-apache-image .
Este comando criará uma nova imagem Docker chamada my-apache-image com base nas instruções no Dockerfile.
Inspecionando a Imagem Docker
Após a construção da imagem, pode listar todas as imagens no seu sistema usando o seguinte comando:
docker images
Isto mostrará a lista de imagens Docker, incluindo a my-apache-image que acabou de criar.
Também pode inspecionar os detalhes da imagem usando o seguinte comando:
docker inspect my-apache-image
Isto mostrará os metadados e a configuração da imagem Docker.
Agora que tem uma imagem Docker personalizada, pode prosseguir para a execução de um contêiner baseado nesta imagem.
Executando um Contêiner Docker a Partir de uma Imagem Personalizada
Agora que tem uma imagem Docker personalizada, pode executar um contêiner baseado nessa imagem.
Iniciar um Contêiner Docker
Para iniciar um novo contêiner a partir da imagem my-apache-image, utilize o seguinte comando:
docker run -d -p 80:80 --name my-apache-container my-apache-image
Aqui está o que cada parte do comando faz:
docker run: Inicia um novo contêiner Docker.-d: Executa o contêiner em modo desacoplado, o que significa que ele roda em segundo plano.-p 80:80: Mapeia a porta 80 no host para a porta 80 no contêiner, permitindo aceder ao servidor web a partir do host.--name my-apache-container: Atribui o nome "my-apache-container" ao contêiner em execução.my-apache-image: O nome da imagem Docker a utilizar para o contêiner.
Verificando o Contêiner em Execução
Após iniciar o contêiner, pode verificar se ele está a funcionar utilizando os seguintes comandos:
## Listar todos os contêineres em execução
docker ps
## Inspecionar o contêiner
docker inspect my-apache-container
O comando docker ps mostrará a lista de contêineres em execução, incluindo o my-apache-container que acabou de iniciar.
O comando docker inspect fornecerá informações detalhadas sobre o contêiner em execução, incluindo o seu endereço IP, mapeamentos de portas e outros detalhes de configuração.
Acedendo ao Servidor Web
Uma vez que o contêiner esteja a funcionar, pode aceder ao servidor web Apache abrindo um navegador web e acedendo a http://localhost. Deverá ver a página de boas-vindas padrão do Apache.
Compreendendo como executar um contêiner Docker baseado numa imagem personalizada, pode agora implantar as suas próprias aplicações num ambiente de contentores.
Resumo
Neste tutorial, aprendeu a construir uma imagem Docker personalizada e a executar um contêiner Docker baseado nessa imagem. Explorou os passos para criar uma imagem Docker, incluindo a escrita de um Dockerfile e a construção da imagem. Adicionalmente, aprendeu a executar um contêiner Docker utilizando a imagem personalizada, a gerir o ciclo de vida do contêiner e a aceder ao contêiner em execução. Com estas competências, pode agora empacotar e implantar as suas aplicações com confiança utilizando contêineres Docker.



