Introdução
Este guia abrangente irá levá-lo numa jornada pelos aspectos fundamentais da referência de ficheiro Docker. Irá adquirir um profundo conhecimento da anatomia de um Dockerfile e aprender como aproveitar o seu poder para construir imagens Docker eficientes. Quer seja um utilizador iniciante ou experiente do Docker, este tutorial equipará-o com o conhecimento e as competências para dominar a arte da contencionalização.
Introdução ao Docker
Docker é uma plataforma de código aberto popular que permite aos desenvolvedores construir, implantar e executar aplicações num ambiente de contentores. Fornece uma forma de empacotar uma aplicação e as suas dependências numa unidade padronizada, conhecida como um contêiner, que pode ser facilmente distribuída e executada em qualquer sistema que tenha o Docker instalado.
O que é o Docker?
Docker é uma plataforma de software que permite construir, implantar e executar aplicações em contentores. Os contentores são pacotes 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. Isto garante que a aplicação funcionará de forma consistente em diferentes ambientes informáticos, independentemente da infraestrutura subjacente.
Benefícios do Docker
- Consistência: Os contentores Docker garantem que as aplicações funcionam da mesma forma, independentemente da infraestrutura subjacente, proporcionando um ambiente consistente e fiável.
- Escalabilidade: O Docker facilita a escala de aplicações para cima ou para baixo, dependendo da carga de trabalho, simplesmente adicionando ou removendo contentores.
- Eficiência: Os contentores são leves e utilizam menos recursos do que as máquinas virtuais tradicionais, tornando-os mais eficientes de executar e gerir.
- Portabilidade: Os contentores Docker podem ser facilmente movidos entre diferentes ambientes informáticos, como desenvolvimento, testes e produção, sem a necessidade de alterações de configuração complexas.
- Isolamento: Os contentores Docker proporcionam um elevado grau de isolamento, garantindo que as aplicações funcionam num ambiente seguro e isolado, sem interferir umas com as outras.
Arquitectura do Docker
O Docker utiliza uma arquitectura cliente-servidor, onde o cliente Docker comunica com o daemon Docker, que é responsável por construir, executar e gerir os contentores Docker. Os componentes chave da arquitectura Docker são:
graph LR
A[Cliente Docker] -- Comunica com --> B[Daemon Docker]
B[Daemon Docker] -- Gerencia --> C[Contentores Docker]
B[Daemon Docker] -- Gerencia --> D[Imagens Docker]
B[Daemon Docker] -- Gerencia --> E[Redes Docker]
B[Daemon Docker] -- Gerencia --> F[Volumes Docker]
Instalação do Docker
Para começar com o Docker, precisa de instalar o software Docker no seu sistema. O processo de instalação varia consoante o seu sistema operativo. Por exemplo, no Ubuntu 22.04, pode instalar o Docker utilizando os seguintes comandos:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker
Depois de o Docker estar instalado, pode verificar a instalação executando o seguinte comando:
docker version
Isto irá mostrar a versão do Docker instalada no seu sistema.
Anatomia de um Dockerfile
Um Dockerfile é um ficheiro de texto que contém um conjunto de instruções para construir uma imagem Docker. Serve como um modelo para criar um ambiente consistente e repetível para a sua aplicação. Vamos explorar os componentes chave de um Dockerfile:
Estrutura do Dockerfile
Um Dockerfile normalmente consiste nas seguintes secções:
- Imagem Base: A instrução
FROMespecifica a imagem base a utilizar para o processo de construção. Este é o ponto de partida para a sua imagem Docker. - Metadados: A instrução
LABELpermite adicionar metadados à sua imagem Docker, como o mantenedor, a versão ou a descrição. - Configuração do Ambiente: A instrução
ENVdefine variáveis de ambiente que podem ser utilizadas durante todo o processo de construção e no contêiner em execução. - Cópia de Ficheiros: As instruções
COPYeADDsão utilizadas para copiar ficheiros e diretórios do sistema hospedeiro para a imagem Docker. - Diretório de Trabalho: A instrução
WORKDIRdefine o diretório de trabalho para quaisquer instruções subsequentes no Dockerfile. - Execução: As instruções
CMDeENTRYPOINTespecificam o(s) comando(s) a executar quando o contêiner é executado. - Portas: A instrução
EXPOSEinforma o Docker que o contêiner escuta nas portas de rede especificadas durante a execução.
Exemplo de Dockerfile
Aqui está um exemplo de Dockerfile que constrói um servidor web simples utilizando a imagem Nginx:
## Utilize a imagem oficial Nginx como imagem base
FROM nginx:latest
## Defina o mantenedor da imagem
LABEL maintainer="LabEx <info@labex.io>"
## Copie o ficheiro HTML personalizado para o contêiner
COPY index.html /usr/share/nginx/html/
## Exponha a porta 80 para tráfego HTTP
EXPOSE 80
## Defina o comando para iniciar o servidor Nginx
CMD ["nginx", "-g", "daemon off;"]
Neste exemplo, o Dockerfile:
- Utiliza a imagem oficial Nginx como imagem base.
- Define o mantenedor da imagem como "LabEx".
- Copia um ficheiro
index.htmlpersonalizado para o diretório HTML do Nginx no contêiner. - Exponha a porta 80 para tráfego HTTP.
- Define o comando para iniciar o servidor Nginx.
Pode construir esta imagem Docker utilizando o seguinte comando:
docker build -t my-nginx-app .
Isto criará uma nova imagem Docker chamada my-nginx-app com base nas instruções no Dockerfile.
Construindo Imagens Docker com Dockerfile
Agora que tem uma compreensão básica da estrutura do Dockerfile, vamos explorar como construir imagens Docker usando um Dockerfile.
Construindo uma Imagem Docker
Para construir uma imagem Docker usando um Dockerfile, siga estes passos:
Crie um novo diretório para o seu projeto e navegue até ele no seu terminal.
Crie um novo ficheiro chamado
Dockerfileno diretório do projeto e adicione as suas instruções Dockerfile.Execute o seguinte comando para construir a imagem Docker:
docker build -t my-image-name .O sinal
-tpermite etiquetar a imagem com um nome, neste caso,my-image-name. O.no final do comando indica ao Docker para usar o diretório atual como contexto de construção.Após o processo de construção ser concluído, pode listar todas as imagens Docker no seu sistema usando o seguinte comando:
docker imagesIsto irá exibir uma lista de todas as imagens Docker, incluindo a que acabou de construir.
Optimizando Camadas Dockerfile
Ao construir imagens Docker, é importante otimizar o Dockerfile para minimizar o número de camadas e melhorar os tempos de construção. Aqui estão algumas boas práticas:
- Utilize a Imagem Base Adequada: Escolha uma imagem base o mais pequena e leve possível, fornecendo ainda as dependências necessárias para a sua aplicação.
- Combine Comandos RUN: Combine vários comandos
RUNnum único comando para reduzir o número de camadas na imagem. - Aproveite o Cache: O Docker guarda em cache cada camada do Dockerfile, por isso é importante ordenar as suas instruções de forma a tirar partido deste mecanismo de cache.
- Minimize a Cópia de Ficheiros: Copie apenas os ficheiros necessários para a imagem Docker e evite copiar diretórios grandes ou ficheiros desnecessários.
- Utilize Construções Multi-Fase: As construções multi-fase permitem utilizar múltiplas instruções
FROMnum único Dockerfile, o que pode ajudar a reduzir o tamanho final da imagem.
Empurrando Imagens Docker para um Registo
Depois de construir uma imagem Docker, pode empurrá-la para um registo Docker, como o Docker Hub ou um registo privado, para que possa ser partilhada e utilizada por outros. Para empurrar uma imagem para um registo, siga estes passos:
Crie uma conta no registo Docker da sua escolha.
Etiquete a sua imagem Docker com o URL do registo e o nome do repositório apropriados:
docker tag my-image-name registry.example.com/my-repo/my-image:latestEmpurre a imagem para o registo:
docker push registry.example.com/my-repo/my-image:latest
Após a conclusão do empurrão, a sua imagem Docker estará disponível no registo e outros poderão puxá-la e utilizá-la nos seus próprios projetos.
Resumo
No final deste guia, terá uma compreensão abrangente da referência do ficheiro Docker, permitindo-lhe construir, gerir e implementar imagens Docker com confiança. Irá aprender os componentes essenciais de um Dockerfile e descobrir como os utilizar para criar aplicações containerizadas robustas e escaláveis. Este tutorial é imprescindível para qualquer pessoa interessada em explorar o mundo do Docker e da contencionalização.



