Como usar o comando docker compose start para iniciar serviços

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker-compose start para gerenciar suas aplicações Docker de múltiplos contêineres. Começaremos criando um simples arquivo docker-compose.yml para definir nossos serviços.

Após a criação do arquivo compose, você praticará a inicialização de todos os serviços definidos nele usando um único comando. Finalmente, você aprenderá como iniciar seletivamente um serviço específico a partir da sua configuração compose. Essa experiência prática o equipará com as habilidades fundamentais para gerenciar efetivamente seus projetos Docker Compose.

Criar um arquivo docker-compose.yml simples

Nesta etapa, criaremos um arquivo docker-compose.yml simples. Docker Compose é uma ferramenta para definir e executar aplicações Docker de múltiplos contêineres. Com o Compose, você usa um arquivo YAML para configurar os serviços da sua aplicação. Então, com um único comando, você cria e inicia todos os serviços a partir da sua configuração.

Antes de criarmos o arquivo docker-compose.yml, precisamos instalar o Docker Compose. Como ele não vem pré-instalado no ambiente LabEx, o instalaremos usando o pip.

Primeiro, vamos atualizar a lista de pacotes e instalar o pip se ele ainda não estiver instalado.

sudo apt update
sudo apt install -y python3-pip

Agora, podemos instalar o Docker Compose usando o pip.

pip install docker-compose

Após a conclusão da instalação, você pode verificar a instalação verificando a versão do Docker Compose.

docker-compose --version

Você deve ver uma saída semelhante a docker-compose version 1.29.2, build 5becea4c.

Agora que o Docker Compose está instalado, vamos criar um diretório para nosso projeto e navegar até ele. Criaremos o arquivo docker-compose.yml dentro deste diretório.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Em seguida, criaremos o arquivo docker-compose.yml usando o editor nano.

nano docker-compose.yml

Dentro do editor nano, cole o seguinte conteúdo. Este arquivo docker-compose.yml define um único serviço chamado web que usa a imagem nginx e mapeia a porta 80 do contêiner para a porta 8080 na máquina host.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

Vamos detalhar este arquivo:

  • version: '3.8' especifica a versão do formato do arquivo Compose.
  • services: define os diferentes serviços que compõem sua aplicação.
  • web: é o nome do nosso serviço. Você pode escolher qualquer nome que desejar.
  • image: nginx:latest especifica a imagem Docker a ser usada para este serviço. Neste caso, estamos usando a versão mais recente da imagem oficial do Nginx. Faremos o pull desta imagem mais tarde, quando iniciarmos o serviço.
  • ports: mapeia as portas entre o host e o contêiner.
  • - "8080:80" mapeia a porta 80 dentro do contêiner (onde o Nginx é executado por padrão) para a porta 8080 na sua máquina host. Isso significa que você pode acessar o servidor web Nginx visitando http://localhost:8080 no seu navegador web (ou usando curl no terminal).

Salve o arquivo pressionando Ctrl + X, depois Y e, em seguida, Enter.

Você pode verificar o conteúdo do arquivo usando o comando cat.

cat docker-compose.yml

Você deve ver o conteúdo YAML que acabou de colar.

Iniciar todos os serviços definidos no arquivo compose

Nesta etapa, iniciaremos todos os serviços definidos em nosso arquivo docker-compose.yml. Usaremos o comando docker-compose up para este fim.

Primeiro, certifique-se de estar no diretório onde você criou o arquivo docker-compose.yml.

cd ~/project/my-compose-app

Agora, execute o comando docker-compose up. A flag -d executa os contêineres em modo detached (destacado), o que significa que eles serão executados em segundo plano e não bloquearão seu terminal.

docker-compose up -d

Quando você executa este comando pela primeira vez, o Docker Compose irá:

  1. Procurar o arquivo docker-compose.yml no diretório atual.
  2. Ler as definições dos serviços.
  3. Para cada serviço, ele verificará se a imagem especificada existe localmente. Caso contrário, ele fará o pull da imagem do Docker Hub. Em nosso caso, ele fará o pull da imagem nginx:latest.
  4. Criar e iniciar os contêineres para cada serviço.

Você verá uma saída indicando que a imagem está sendo baixada (pulled) e o contêiner está sendo criado e iniciado.

Pulling web (nginx:latest)...
latest: Pulling from library/nginx
... (output showing image layers being downloaded)
Status: Downloaded newer image for nginx:latest
Creating my-compose-app_web_1 ... done

Após a conclusão do comando, você pode verificar se o contêiner está em execução usando o comando docker ps.

docker ps

Você deve ver uma entrada para o contêiner web, com a imagem nginx:latest e o status Up. O nome do contêiner será algo como my-compose-app_web_1.

Para verificar ainda mais se o servidor Nginx está em execução e acessível, você pode usar o comando curl para acessar o servidor web na porta 8080 da máquina host.

curl http://localhost:8080

Você deve ver a saída HTML da página de boas-vindas padrão do Nginx no seu terminal. Isso confirma que o contêiner está em execução e o mapeamento de portas está funcionando corretamente.

Iniciar um serviço específico definido no arquivo compose

Na etapa anterior, iniciamos todos os serviços definidos em nosso arquivo docker-compose.yml usando docker-compose up. Nesta etapa, aprenderemos como iniciar um serviço específico se você tiver vários serviços definidos em seu arquivo Compose.

Embora nosso docker-compose.yml atual tenha apenas um serviço (web), o comando para iniciar um serviço específico é útil quando você tem uma aplicação mais complexa com múltiplos serviços (como um servidor web, um banco de dados e uma API de backend).

Primeiro, vamos parar o serviço atualmente em execução. Podemos fazer isso usando o comando docker-compose down. Este comando para e remove contêineres, redes e volumes criados por up.

Certifique-se de estar no diretório ~/project/my-compose-app.

cd ~/project/my-compose-app

Agora, execute o comando docker-compose down.

docker-compose down

Você verá uma saída indicando que o contêiner e a rede estão sendo parados e removidos.

Stopping my-compose-app_web_1 ... done
Removing my-compose-app_web_1 ... done
Removing network my-compose-app_default

Você pode verificar se o contêiner foi parado executando docker ps. Não deve haver contêineres em execução do nosso arquivo compose.

docker ps

Agora, vamos demonstrar como iniciar um serviço específico. O comando é docker-compose up <service_name>. Em nosso caso, o nome do serviço é web. Usaremos novamente a flag -d para executá-lo em modo detached (destacado).

docker-compose up -d web

Este comando iniciará apenas o serviço web conforme definido no arquivo docker-compose.yml. Como a imagem já foi baixada na etapa anterior, ele criará e iniciará o contêiner diretamente.

Você verá uma saída semelhante a esta:

Creating my-compose-app_web_1 ... done

Novamente, você pode verificar se o contêiner web está em execução usando docker ps.

docker ps

Você deve ver o contêiner my-compose-app_web_1 listado com o status Up.

Isso demonstra como iniciar seletivamente serviços definidos em seu arquivo docker-compose.yml, o que é útil para gerenciar aplicações multi-serviço mais complexas.

Resumo

Neste laboratório, aprendemos como usar o comando docker-compose start. Começamos criando um arquivo docker-compose.yml simples. Isso envolveu a instalação do Docker Compose usando pip, a verificação da instalação, a criação de um diretório de projeto e, em seguida, a criação do próprio arquivo docker-compose.yml. O arquivo criado definiu um único serviço chamado web usando a imagem nginx e mapeando portas.

As etapas subsequentes, que não foram totalmente detalhadas no conteúdo fornecido, envolveriam o uso do comando docker-compose start para iniciar todos os serviços definidos no arquivo compose ou para iniciar um serviço específico. Isso demonstra a funcionalidade principal do comando docker-compose start para gerenciar o ciclo de vida de aplicações multi-contêiner definidas em um arquivo Compose.