Role para baixo

Imagem com título O que é Compose?

Docker Compose não é nada mais que um orquestrador de containers. Esse plugin para Docker permite definir e gerenciar vários containers de maneira fácil, assim, é possível orquestrar vários containers Docker. Imagine que você possui uma aplicação simples em PHP e MYSQL, caso você deseje implementar esse ambiente em Docker, na mão, você teria que criar um container para o PHP, outro para MySQL, e também para cada instância de VM que vai rodar a aplicação. Com Compose, você precisa apenas definir quais e como fazer cada container necessário para a sua aplicação em um arquivo YAML. O processo de deploy da sua aplicação fica muito mais fácil com Compose, pois basta um arquivo contendo todos os parâmetros e instruções que será possível criar, executar e atualizar os containers.

Como instalar o Docker Compose

Se você estiver utilizando o Docker Engine, muito possivelmente não foi instalado o Docker Compose. Docker Desktop possui no pacote o Compose.
Se a sua instalação estiver condizente com o tutorial disponível em Instalação e Configuração, para instalar o Docker Compose execute sudo apt-get install docker-compose-plugin

Imagem com título Comandos do Compose

Os comandos do Docker Compose são essenciais para criar, iniciar, parar e gerenciar contêineres interligados e facilitar a administração de ambientes complexos com múltiplos serviços. Aqui estão os comandos básicos mais comuns do Docker Compose:

Imagem com escrito Estrutura do Arquivo YAML

A estrutura básica do arquivo YAML que controlará o Compose é essa:

                version: '3.8'
                networks:
                volumes:

                services:
                    exemplo:
                        image: 
                        ports: 
                        deploy:
                        restart: 
                        networks:
                        volumes:
            

Compose trata cada container como um serviço, logo para declarar um container, precisamos declarar dentro da coleção services

Para cada container declarado dentro de services, precisamos definir a imagem do container. A opção image permite declarar qual imagem usar no container. Por exemplo, para criar um container MySQL, declaramos image:mysql. Caso esteja utilizando uma imagem que precisa ser construída, declaramos build, em vez da instrução passada, com o DockerFile e o ambiente para construir a imagem.

A opção port define a porta que o container utilizará do hospedeiro para ofertar algum serviço. Já a opção expose define as portas que o container abrirá para se comunicar com outros containers dentro da mesma rede.

A opção networks define as redes que o container participará, incluindo drivers e sub-redes. Em volumes definimos os volumes que o container utilizará, podendo criar ou acessar volumes do hospedeiro que desejamos referenciar.

Em environment definimos o ambiente que o container terá, incluindo as varíaveis de ambiente. Já em depends_on definimos os containers que será requisitos para a nossa aplicação. Por exemplo, a aplicação PHP precisará de um container MySQL.

Uma imagem com o texto Exemplo

Nesse exemplo, criaremos um arquivo YAML para uma aplicação Wordpress. Inicialmente, vamos criar um arquivo chamado aplicacao.yml
Comando: nano aplicacao.yml

Dentro do aplicacao.yml, vamos inserir uma linha contendo a versão do Compose que estamos utilizando, a versão atual da data deste tutorial.

                    version: '3.8'
                

Então vamos declarar a nossa aplicação dentro de services:

                    version: '3.8'
                    services:
                        aplicacao:
                

Inserimos a imagem que o container utilizará, a porta e a política de reinício.

                    version: '3.8'
                    services:
                        aplicacao:
                            image:wordpress
                            restart:always
                            ports:
                                -"80:80"
                

Então inseremos as variáveis de ambiente para o Wordpress, que conterá os dados do banco de dados.

                    version: '3.8'
                    services:
                        aplicacao:
                            image:wordpress
                            restart:always
                            ports:
                                -"80:80"
                            environment:
                                WORDPRESS_DB_HOST: db:3306
                                WORDPRESS_DB_USER: wordpress
                                WORDPRESS_DB_PASSWORD: wordpress
                                WORDPRESS_DB_NAME: wordpress
                

Como toda aplicação Wordpress precisa de um banco de dados, precisamos criar um container MySQL. Primeiro adicionamos a opção depends_on dentro de aplicação e então adicionamos um novo container dentro de services declarando o container MySQL.

                version: '3.8'
                volumes:
                    db_data:
                services:
                    aplicacao:
                        image:wordpress
                        restart:always
                        ports:
                            -"80:80"
                        environment:
                            WORDPRESS_DB_HOST: db:3306
                            WORDPRESS_DB_USER: wordpress
                            WORDPRESS_DB_PASSWORD: wordpress
                            WORDPRESS_DB_NAME: wordpress
                        depends_on:
                            -db
                    
                    db:
                        image: mysql:5.7
                        volumes:
                        - db_data:/var/lib/mysql
                        restart: always
                        environment:
                            MYSQL_ROOT_PASSWORD: senharoot
                            MYSQL_DATABASE: wordpress
                            MYSQL_USER: wordpress
                            MYSQL_PASSWORD: wordpress

            

Com o nosso arquivo aplicacao.yml pronto, para executar, rodamos o comando: docker-compose -f aplicacao.yml up

Já existem arquivos prontos para a sua aplicação, disponível no repositório GIT Awesome Compose. Aproveite para explorá-los!

via GIPHY