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:latestespecifica 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 visitandohttp://localhost:8080no seu navegador web (ou usandocurlno 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á:
- Procurar o arquivo
docker-compose.ymlno diretório atual. - Ler as definições dos serviços.
- 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. - 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.



