Para utilizar o Docker Compose, devemos criar o seu arquivo de configuração, o docker-compose.yml, na raiz do projeto. Em todo arquivo de Docker Compose, que é uma espécie de receita de bolo para construirmos as diferentes partes da nossa aplicação, a primeira coisa que colocamos nele é a versão do Docker Compose que estamos utilizando:
version: '3'COPIAR CÓDIGO
Estamos utilizando a versão 3 pois é a versão mais recente no momento da criação do treinamento. O YAML lembra um pouco o JSON, mas ao invés de utilizar as chaves para indentar o código, ele utiliza espaços.
Agora, começamos a descrever os nossos serviços, os nossos services
:
version: '3'
services:COPIAR CÓDIGO
Um serviço é uma parte da nossa aplicação. Lembrando do nosso diagrama:
Temos NGINX, três Node, e o MongoDB como serviços. Logo, se queremos construir cinco containers, vamos construir cinco serviços, cada um deles com um nome específico.
Então, vamos começar construindo o NGINX, que terá o nome nginx
:
version: '3'
services:
nginx:COPIAR CÓDIGO
Em cada serviço, devemos dizer como devemos construí-lo, como devemos fazer o seu build
:
version: '3'
services:
nginx:
build:COPIAR CÓDIGO
O serviço será construído através de um Dockerfile, então devemos passá-lo onde ele está. E também devemos passar um contexto, para dizermos a partir de onde o Dockerfile deve ser buscado. Como ele será buscado a partir da pasta atual, vamos utilizar o ponto:
version: '3'
services:
nginx:
build:
dockerfile: ./docker/nginx.dockerfile
context: .COPIAR CÓDIGO
Construída a imagem, devemos dar um nome para ela, por exemplo douglasq/nginx:
version: '3'
services:
nginx:
build:
dockerfile: ./docker/nginx.dockerfile
context: .
image: douglasq/nginxCOPIAR CÓDIGO
E quando o Docker Compose criar um container a partir dessa imagem, vamos dizer que o seu nome será nginx:
version: '3'
services:
nginx:
build:
dockerfile: ./docker/nginx.dockerfile
context: .
image: douglasq/nginx
container_name: nginxCOPIAR CÓDIGO
Sabemos também que o NGINX trabalha com duas portas, a 80 e a 443. Como não estamos trabalhando com HTTPS, vamos utilizar somente a porta 80, e no próprio arquivo, podemos dizer para qual porta da nossa máquina queremos mapear a porta 80 do container. Vamos mapear para a porta de mesmo número da nossa máquina: