O que é docker compose ?
Docker compose trata-se de uma ferramenta para a orquestração de containers da docker, em muitos casos ele já vem instalado por padrão junto do docker para utilização, mas se caso isso não ocorrer é possível instala-lo normalmente.
Uma das principais diferenças entre escrever um dockerfile comum e utilizar o docker compose, é de que no modo compose você tem a possibilidade de gerenciar mais de um container ao mesmo tempo, e a linguagem utilizada para escrever o arquivo de configuração é o YAML( Ain't Markup Language).
Caso queira saber mais sobre o docker compose acesse:
Docker compose reference.
Docker compose na pratica.
Neste exemplo vamos subir uma aplicação na qual vai depender de um web server e de um banco de dados para funcionar, nesse caso vamos utilizar o docker compose para subir ambos os containers e fazer com que ambos os containers trabalhem junto porem cada um fazendo sua função. Para esse projeto vou subir uma aplicação chamada sysPass, para quem não conhece o sysPass é um potente gerenciador de senhas, para realizar uma instalação comum do sysPass você precisaria instalar diversos pacotes e você ainda teria que configurar manualmente alguns desses serviços o que poderia deixar a aplicação fora do ar caso tenha algum problema de dependência, configuração ou incompatibilidade entre pacotes.
Para utilização do docker compose, crie um arquivo chamado "docker-compose.yaml" ou "docker-compose.yml", pois tanto faz a extensão, pode ser ".yaml" ou ".yml" que vai funcionar normalmente.

Repare que ao criarmos o arquivo o visual studio code, ele já identifica automaticamente como um arquivo docker, e adiciona uma "flag" no arquivo com a logo do docker.
Agora digite o código abaixo dentro do arquivo criado:
version: '2' services: app: container_name: syspass-app image: syspass/syspass:3.2.2 restart: always ports: - "80" - "443" links: - db volumes: - syspass-config:/var/www/html/sysPass/app/config - syspass-backup:/var/www/html/sysPass/app/backup environment: - USE_SSL=yes db: container_name: syspass-db restart: always image: mariadb:10.2 environment: - MYSQL_ROOT_PASSWORD=syspass ports: - "3306" volumes: - syspass-db:/var/lib/mysql volumes: syspass-config: {} syspass-backup: {} syspass-db: {}
Após criar o arquivo e inserir o código como esta acima, digite o comando abaixo para subir os dois containers:
docker-compose -p syspass -f docker-compose.yaml up -d
Após digitar o comando acima, vemos que ambos os containers subiram sem erros, para verificarmos os containers em execução, basta digitar o comando:
docker-compose ps
Acima vemos também a porta onde os containers estão expostos para acesso externo, nesse caso vamos acessar a aplicação através da porta "52224" por meio da web, para acessar basta em seu navegador digitar:
https://localhost:52224/
ou
https://[IP DO HOST]:52224
OBS: a porta pode variar, pois a opção "-p" que usamos no comando para iniciar os containers ela "sorteia" uma porta para expor a aplicação, então pode ser que mude a porta cada vez que o container seja reinicializado.
Na imagem acima vemos que a aplicação já está disponível.
Caso queira parar os containers em execução, digite o comando abaixo:
docker-compose down
Conclusão.
O docker compose é uma excelente ferramenta para orquestração e para utilização junto do docker swarm para criação de clusters e mater aplicações onde podem ser facilmente escalonas e com alta disponibilidade.