Tutorial

Como instalar e utilizar o Docker Compose no Ubuntu 20.04

UbuntuDockerUbuntu 20.04

Introdução

O Docker simplifica o fluxo de gerenciamento de processos de aplicações em contêineres. Embora os contêineres sejam semelhantes às máquinas virtuais em certos aspectos, eles são mais leves e fáceis de usar. Isso permite que os desenvolvedores dividam um ambiente de aplicação em vários serviços isolados.

Para aplicações que dependem de vários serviços, orquestrar todos os contêineres para iniciar, comunicar e fechar juntos pode tornar-se algo rapidamente incontrolável. O Docker Compose é uma ferramenta que lhe permite executar ambientes de aplicações com vários contêineres com base nas definições contidas em um arquivo YAML. Ele usa as definições de serviço para compilar ambientes totalmente personalizados com contêineres múltiplos que podem compartilhar redes e volumes de dados.

Neste guia, vamos demonstrar como instalar o Docker Compose em um servidor Ubuntu 20.04 e como começar a usar esta ferramenta.

Pré-requisitos

Para seguir este artigo, você irá precisar do seguinte:

  • Acesso a uma máquina local com Ubuntu 20.04, ou um servidor de desenvolvimento como um usuário não-root com privilégios sudo. Se estiver usando um servidor remoto, é recomendável ter um firewall ativo instalado. Para configurar tudo isso, consulte nosso tutorial Initial Server Setup Guide for Ubuntu 20.04.
  • O Docker instalado em seu servidor ou máquina local, seguindo os Passos 1 e 2 de How To Install and Use Docker on Ubuntu 20.04.

Passo 1 — Instalando o Docker Compose

Para garantir que vamos obter a versão estável mais atualizada do Docker Compose, faremos o download deste software a partir do seu repositório oficial do Github.

Primeiro, confirme a versão mais recente disponível em sua página de releases. No momento da redação deste artigo, a versão estável mais atual é a 1.26.0.

O comando a seguir irá baixar a release 1.26.0 e salvar o arquivo executável em /usr/local/bin/docker-compose, que tornará este software globalmente acessível como docker-compose:

  • sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Em seguida, defina as permissões corretas para que o comando docker-compose seja executável:

  • sudo chmod +x /usr/local/bin/docker-compose

Para verificar se a instalação foi bem-sucedida, execute:

  • docker-compose --version

Você verá um resultado parecido com este:

Output
docker-compose version 1.26.0, build 8a1c60f6

O Docker Compose agora está instalado com sucesso em seu sistema. Na próxima seção, vamos ver como configurar um arquivo docker-compose.yml e obter um ambiente conteinerizado funcionando com esta ferramenta.

Passo 2 — Configurando um arquivo docker-compose.yml

Para demonstrar como configurar um arquivo docker-compose.yml e trabalhar com o Docker Compose, vamos criar um ambiente de servidor Web usando a imagem Nginx oficial do Docker Hub, o registro público do Docker. Este ambiente conteinerizado fornecerá um único arquivo HTML estático.

Comece criando um novo diretório em sua pasta home e então movendo-se para ele:

  • mkdir ~/compose-demo
  • cd ~/compose-demo

Neste diretório, configure uma pasta da aplicação para funcionar como a raiz de documentos para seu ambiente Nginx:

  • mkdir app

Usando seu editor de texto preferido, crie um novo arquivo index.html dentro da pasta app:

  • nano app/index.html

Coloque o seguinte conteúdo neste arquivo:

~/compose-demo/app/index.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Demo</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>

    <h1>This is a Docker Compose Demo Page.</h1>
    <p>This content is being served by an Nginx container.</p>

</body>
</html>

Salve e feche o arquivo quando terminar. Caso esteja usando o nano, faça isso digitando CTRL+X e, depois, Y e ENTER para confirmar.

Em seguida, crie o arquivo docker-compose.yml:

  • nano docker-compose.yml

Insira o seguinte conteúdo em seu arquivo docker-compose.yml:

docker-compose.yml
version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

O arquivo docker-compose.yml normalmente começa com a definição de version. Isso dirá ao Docker Compose qual versão de configuração estamos usando.

Então temos o bloco services, onde configuramos os serviços que fazem parte deste ambiente. No nosso caso, temos um único serviço chamado web. Este serviço usa a imagem nginx:alpine e configura um redirecionamento de porta com a diretiva ports. Todas as requisições na porta 8000 da máquina host (o sistema a partir do qual você está executando o Docker Compose) serão redirecionadas para o contêiner web na porta 80, onde o Nginx estará em execução.

A diretiva volumes irá criar um volume compartilhado entre a máquina host e o contêiner. Isso irá compartilhar a pasta local app com o contêiner, e o volume estará localizado em /usr/share/nginx/html dentro do contêiner. Assim, ele substituirá a raiz dos documentos padrão para o Nginx.

Salve e feche o arquivo.

Criamos uma página demo e um arquivo docker-compose.yml para criar um ambiente conteinerizado de servidor Web que irá apresentá-la. No próximo passo, vamos ativar este ambiente com o Docker Compose.

Passo 3 — Executando o Docker Compose

Com o arquivo docker-compose.yml no lugar, agora podemos executar o Docker Compose para ativar o nosso ambiente. O comando a seguir irá baixar as imagens Docker necessárias, criar um contêiner para o serviço web, e executar o ambiente conteinerizado em segundo plano.

  • docker-compose up -d

O Docker Compose procurará primeiro pela imagem definida no sistema local, e se ele não puder localizar a imagem ele irá baixar a imagem do Docker Hub. Você verá um resultado como esse:

Output
Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done

Seu ambiente agora está executando em segundo plano. Para verificar se o contêiner está ativo, você pode executar:

  • docker-compose ps

Este comando irá lhe mostrar informações sobre os contêineres em execução e seus estados, bem como quaisquer redirecionamentos de porta atualmente em vigor:

Output
Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp

Agora você pode acessar a aplicação de demonstração apontando seu navegador para localhost:8000 se você a estiver executando em sua máquina local, ou your_server_domain_or_IP:8000 no caso de um servidor remoto.

Você verá uma página como esta:

Docker Compose Demo Page

Porque o volume compartilhado que você configurou dentro do arquivo docker-compose.yml mantém seus arquivos da pasta app em sincronização com a raiz de documentos do contêiner. Se você fizer quaisquer alterações no arquivo index.html, elas serão selecionadas automaticamente pelo contêiner e refletidas no navegador quando você recarregar a página.

No próximo passo, você verá como gerenciar seu ambiente conteinerizado com comandos Docker Compose .

Passo 4 — Familiarizando-se com os comandos Docker Compose

Você viu como configurar um arquivo docker-compose.yml e ativar seu ambiente com docker-compose up. Agora você verá como usar comandos Docker Compose para gerenciar e interagir com seu ambiente conteinerizado.

Para verificar os logs produzidos pelo seu contêiner Nginx, você pode usar o comando logs:

  • docker-compose logs

Você verá um resultado parecido com este:

Output
Attaching to compose-demo_web_1 web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"

Se você quiser pausar a execução do ambiente sem alterar o estado atual dos seus contêineres, você pode usar:

  • docker-compose pause
Output
Pausing compose-demo_web_1 ... done

Para retomar a execução após emitir uma pausa:

  • docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done

O comando stop terminará a execução do contêiner mas ele não irá destruir quaisquer dados associados aos seus contêineres:

  • docker-compose stop
Output
Stopping compose-demo_web_1 ... done

Se você quiser remover os contêineres, redes e volumes associados a este ambiente conteinerizado, use o comando down:

  • docker-compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

Observe que isso não removerá a imagem base usada pelo Docker Compose para lançar seu ambiente (no nosso caso, nginx:alpine). Desta forma, sempre que você ativar seu ambiente novamente com um docker-compose up, o processo será muito mais rápido, uma vez que a imagem já está em seu sistema.

Caso você queira também remover a imagem base do seu sistema, use:

  • docker image rm nginx:alpine
Output
Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

Nota: por favor, consulte nosso guia How to Install and Use Docker para uma referência mais detalhada sobre os comandos Docker.

Conclusão

Neste guia, vimos como instalar o Docker Compose e configurar um ambiente conteinerizado baseado em uma imagem de servidor Web Nginx. Também vimos como gerenciar este ambiente usando comandos Compose.

Para uma referência completa de todos os comandos docker-compose disponíveis, verifique a documentação oficial.

0 Comments

Creative Commons License