Compose com build de imagem

Até então o processo de build de imagem era realizado a partir do arquivo Dockerfile da aplicação com o comando abaixo:

$ docker build -t marcelodpbarbieri/kube-news:v1 -f Dockerfile

Com o Docker Compose é possível especificar os parâmetros de build de uma imagem.

Antes, baixar o Docker Compose:

~/compose$ docker compose down
[+] Running 4/4
  Container compose-nginx-1     Removed                                  0.5s
  Container compose-kubenews-1  Remove...                               10.6s
  Container compose-postgre-1   Removed                                  0.5s
  Network compose_default       Removed                                  0.7s

Remove a especificação do container nginx do arquivo compose.yaml e ajustar as especificações da rede:

services:
  postgre:
    image: postgres:13.16
    ports:
      - 5432:5432
    environment:
      POSTGRES_PASSWORD: kubenews
      POSTGRES_USER: kubenews
      POSTGRES_DB: kubenews
    volumes:
      - postgre-docker-vol:/var/lib/postgresql/data
    networks:
      - kubenews-net
  kubenews:
    image: marcelodpbarbieri/kube-news:v2
    ports:
      - 8080:8080
    depends_on:
      - postgre
    environment:
      DB_DATABASE: kubenews
      DB_USERNAME: kubenews
      DB_PASSWORD: kubenews
      DB_HOST: postgre
    networks:
      - kubenews-net

volumes:
  postgre-docker-vol:

networks:
  kubenews-net:
    driver: bridge

Demais ajustes nos containers, redes e imagens existentes:

Build de image

Mover o arquivo compose.yaml para dentro do diretório da aplicação:

O container kube-news precisa ser especificada para dizer que ela passará pelo processo de construção da imagem:

Listar as imagens existentes antes de subir o Docker Compose:

Foi realizado o pulling da imagem kubenews:

Listar as imagens após subir o Docker Compose para demonstrar que a imagem marcelodpbarbieri/kube-news:latest foi baixada:

Porém não foi realizado o build da aplicação!

Para isso, faz-se necessário passar a instrução --build para o comando docker compose up -d:

Com isso, a especificação de build inserida no arquivo compose.yaml é considerada, porém é necessária a existente do arquivo Dockerfile da aplicação:

Dockerfile e Docker Compose são complementares

Se o namespace não existir e não for especificada a instrução --build, ele fará o build da aplicação pois a imagem não existe:

Outras Opções

  • Fazer somente o build das imagens:

  • Push da imagem

  • Baixar as imagens que fazem parte do projeto

Limpar o ambiente:

Utilizar uma versão existente no Docker Registry:

Construir a imagem da aplicação:

Baixar as imagens do projeto:

Com as imagens baixadas o processo de build é mais rápido:

O desenvolvimento fica mais eficiente.

Também existe a opção de hot-reload para as alterações da aplicação.

Last updated