Construir imagens antes de iniciar os contêineres
Nas etapas anteriores, usamos imagens Docker pré-construídas do Docker Hub (como nginx:latest). No entanto, você frequentemente precisará construir suas próprias imagens Docker personalizadas para suas aplicações.
O Docker Compose pode construir automaticamente imagens definidas em seu arquivo docker-compose.yml antes de iniciar os serviços. Isso é normalmente feito especificando um contexto build em vez de um nome image para um serviço.
Vamos modificar nosso arquivo docker-compose.yml para construir uma imagem Nginx personalizada simples.
Primeiro, crie um novo diretório chamado nginx_custom dentro de ~/project.
cd ~/project
mkdir nginx_custom
Agora, crie um Dockerfile dentro do diretório nginx_custom.
nano ~/project/nginx_custom/Dockerfile
Adicione o seguinte conteúdo ao Dockerfile:
FROM nginx:latest
RUN echo '<h1>Hello from Custom Nginx!</h1>' >/usr/share/nginx/html/index.html
Este Dockerfile começa com a imagem oficial nginx:latest e, em seguida, substitui o arquivo index.html padrão por um personalizado.
Em seguida, modifique seu arquivo ~/project/docker-compose.yml para usar este Dockerfile para construir a imagem do serviço web. Abra o arquivo para edição:
nano ~/project/docker-compose.yml
Altere a definição do serviço web para usar build em vez de image:
version: "3.8"
services:
web:
build: ./nginx_custom
ports:
- "80:80"
Agora, quando você executar docker compose up, o Docker Compose primeiro construirá a imagem definida pelo Dockerfile no diretório ./nginx_custom e, em seguida, iniciará um contêiner usando essa imagem recém-construída.
Certifique-se de estar no diretório ~/project e execute:
cd ~/project
docker compose up -d
Você verá uma saída indicando que o Docker Compose está construindo a imagem e, em seguida, criando e iniciando o contêiner.
Para verificar se a página Nginx personalizada está sendo servida, use curl:
curl http://localhost
Você deve ver a saída <h1>Hello from Custom Nginx!</h1>, confirmando que a imagem foi construída e o contêiner está em execução com o conteúdo personalizado.
Para limpar, pare os serviços em execução:
cd ~/project
docker compose down