Como construir uma imagem Docker a partir de um Dockerfile

DockerBeginner
Pratique Agora

Introdução

Este tutorial guiará você pelo processo de construção de imagens Docker a partir de um Dockerfile. Cobriremos os fundamentos de imagens Docker, os passos para criar e gerenciar imagens Docker e como implantá-las de forma eficaz. Se você é novo no Docker ou está procurando aprimorar seu fluxo de trabalho de contentores, este artigo fornecerá o conhecimento e as habilidades para construir e trabalhar com imagens Docker.

Compreendendo Imagens Docker

O que é uma Imagem Docker?

Uma imagem Docker é um pacote leve, independente e executável que inclui tudo o que é necessário para executar uma aplicação – o código, o tempo de execução, as ferramentas do sistema, as bibliotecas e as definições. As imagens são o componente de construção do Docker e são usadas para criar contentores Docker.

Camadas de Imagens Docker

As imagens Docker são construídas a partir de uma série de camadas. Cada camada representa uma instrução no Dockerfile da imagem. Estas camadas são empilhadas umas sobre as outras para formar a imagem final. Quando uma imagem é atualizada, apenas as camadas modificadas são reconstruídas, tornando o processo mais eficiente.

graph TD A[Imagem Base] --> B[Camada 1] B --> C[Camada 2] C --> D[Camada 3] D --> E[Imagem Final]

Aceder a Imagens Docker

As imagens Docker podem ser acedidas a partir de várias fontes, incluindo:

  • Docker Hub: O registo público oficial de imagens Docker, onde utilizadores e parceiros podem construir e partilhar aplicações em contentores.
  • Registos Privados: As organizações podem configurar os seus próprios registos Docker privados para armazenar e gerir as suas próprias imagens personalizadas.
  • Construção a partir de um Dockerfile: Os utilizadores podem criar as suas próprias imagens Docker escrevendo um Dockerfile e construindo-o usando o comando docker build.

Vantagens das Imagens Docker

  • Consistência: As imagens Docker garantem que a aplicação irá executar da mesma forma, independentemente do ambiente.
  • Escalabilidade: As imagens Docker podem ser facilmente escaladas para cima ou para baixo para satisfazer as necessidades em mudança.
  • Eficiência: As imagens Docker são leves e podem ser implantadas rapidamente, o que melhora a eficiência geral da aplicação.
  • Portabilidade: As imagens Docker podem ser partilhadas e implantadas facilmente em qualquer plataforma Docker, tornando-as altamente portáveis.

Construindo Imagens Docker com Dockerfiles

O que é um Dockerfile?

Um Dockerfile é um documento de texto que contém todos os comandos que um utilizador pode executar na linha de comandos para montar uma imagem Docker. Os Dockerfiles utilizam uma sintaxe específica para definir os passos necessários para criar uma imagem Docker.

Sintaxe Dockerfile

Um Dockerfile normalmente contém as seguintes instruções:

  • FROM: Especifica a imagem base a utilizar para a construção.
  • COPY: Copia ficheiros ou diretórios do host para o sistema de ficheiros do contentor.
  • RUN: Executa um comando no contentor.
  • CMD: Especifica o comando predefinido a executar quando o contentor é iniciado.
  • EXPOSE: Informa o Docker que o contentor ouve nas portas de rede especificadas durante a execução.
  • ENV: Define uma variável de ambiente.

Aqui está um exemplo de Dockerfile:

FROM ubuntu:22.04

COPY . /app
WORKDIR /app

RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip3 install -r requirements.txt

EXPOSE 8080
CMD ["python3", "app.py"]

Construindo uma Imagem Docker

Para construir uma imagem Docker a partir de um Dockerfile, pode usar o comando docker build:

docker build -t my-app .

Este comando construirá uma imagem Docker com a etiqueta my-app utilizando o Dockerfile no diretório atual.

Optimizando o Dockerfile

Para otimizar o seu Dockerfile, pode:

  • Minimizar o número de camadas combinando múltiplas instruções numa única instrução RUN.
  • Utilizar uma imagem base mais pequena para reduzir o tamanho total da imagem.
  • Guardar dependências em cache instalando-as no início do Dockerfile.
  • Utilizar construções multi-stage para separar os ambientes de construção e de tempo de execução.

Gerenciando e Implementando Imagens Docker

Armazenamento e Partilha de Imagens Docker

As imagens Docker podem ser armazenadas e partilhadas de várias maneiras:

  • Docker Hub: O Docker Hub é o registo público oficial para imagens Docker. Pode empurrar as suas imagens para o Docker Hub e partilhá-las com outros.
  • Registos Privados: Pode configurar o seu próprio registo Docker privado para armazenar e gerir as imagens personalizadas da sua organização.
  • Armazenamento Local: As imagens Docker também podem ser armazenadas localmente no computador hospedeiro, mas isto é principalmente para fins de desenvolvimento e testes.

Implementando Contentores Docker

Depois de ter uma imagem Docker, pode implementá-la como um contentor usando o comando docker run:

docker run -d -p 8080:8080 --name my-app my-app

Este comando iniciará um novo contentor a partir da imagem my-app, mapeando a porta 8080 no hospedeiro para a porta 8080 no contentor e nomeando o contentor my-app.

Gerenciando Contentores Docker

Pode gerir os seus contentores Docker usando vários comandos:

  • docker ps: Lista todos os contentores em execução.
  • docker stop <container_id>: Para um contentor em execução.
  • docker start <container_id>: Inicia um contentor parado.
  • docker logs <container_id>: Visualiza os registos de um contentor.
  • docker exec -it <container_id> /bin/bash: Abre um shell dentro de um contentor em execução.

Escalando Contentores Docker

O Docker facilita a escala da sua aplicação executando múltiplas instâncias dos seus contentores. Pode usar ferramentas como o Docker Swarm ou o Kubernetes para orquestrar e gerir as suas implementações de contentores em larga escala.

graph TD A[Hospedeiro Docker] --> B[Contentor 1] A[Hospedeiro Docker] --> C[Contentor 2] A[Hospedeiro Docker] --> D[Contentor 3]

Integração Contínua e Implementação

As imagens Docker podem ser facilmente integradas nas suas pipelines de Integração Contínua (CI) e Implementação Contínua (CD). Ferramentas como o Jenkins, GitLab CI ou GitHub Actions podem ser usadas para construir, testar e implementar automaticamente as suas imagens Docker.

Resumo

No final deste tutorial, terá um conhecimento sólido de imagens Docker e a capacidade de construir suas próprias imagens Docker a partir de um Dockerfile. Você aprenderá a gerenciar e implantar essas imagens, otimizando seu processo de contencionalização e desbloqueando todo o potencial do Docker em seus fluxos de trabalho de desenvolvimento e implantação.