Introdução
Neste laboratório, você aprenderá como resolver o erro comum "unable to locate package docker-compose-plugin" (não foi possível localizar o pacote docker-compose-plugin) ao trabalhar com Docker Compose. Docker Compose é uma ferramenta essencial para definir e executar aplicações Docker com múltiplos contêineres, mas os usuários frequentemente encontram problemas de instalação. Este laboratório irá guiá-lo através da compreensão do problema e da implementação de uma solução passo a passo para fazer o Docker Compose funcionar corretamente no seu sistema Ubuntu 22.04.
Compreendendo o Docker Compose e o Erro
Antes de corrigirmos o erro, vamos entender o que é Docker Compose e por que esse erro ocorre.
O que é Docker Compose?
Docker Compose é uma ferramenta para definir e executar aplicações Docker com múltiplos contêineres. Com o Compose, você usa um arquivo YAML para configurar os serviços, redes e volumes da sua aplicação. Então, com um único comando, você cria e inicia todos os serviços a partir da sua configuração.
Docker Compose é particularmente útil para:
- Ambientes de desenvolvimento
- Testes automatizados
- Implantações em um único host
O Erro "Unable to Locate Package" (Não foi possível localizar o pacote)
Quando você tenta instalar o Docker Compose usando o comando:
sudo apt-get install docker-compose-plugin
Você pode encontrar este erro:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package docker-compose-plugin
Este erro ocorre porque o nome do pacote mudou ou o repositório do pacote não está configurado corretamente no seu sistema.
Verificando sua Instalação Atual do Docker
Vamos primeiro verificar se o Docker está corretamente instalado. Execute:
docker --version
Você deve ver uma saída semelhante a:
Docker version 20.10.21, build baeda1f
Isso confirma que o Docker está instalado. Agora, vamos verificar se você já tem alguma versão do Docker Compose instalada:
docker compose version
Se você receber o erro "command not found" (comando não encontrado), isso confirma que o Docker Compose ainda não está instalado:
docker: 'compose' is not a docker command.
Agora que entendemos o problema, vamos prosseguir para corrigi-lo no próximo passo.
Instalando o Docker Compose
Agora que confirmamos que o Docker está instalado, mas o Docker Compose está ausente, vamos instalar o Docker Compose corretamente. Existem dois métodos principais para instalar o Docker Compose no Ubuntu 22.04:
- Usando o plugin Docker Compose para a Docker CLI
- Usando o binário Docker Compose standalone
Vamos com o primeiro método, que é a abordagem recomendada para a versão 20.10.21 do Docker Engine.
Atualizar Listas de Pacotes
Primeiro, certifique-se de que suas listas de pacotes estão atualizadas:
sudo apt-get update
Você deve ver a saída mostrando as listas de pacotes sendo atualizadas:
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
...
Reading package lists... Done
Instalar o Plugin Docker Compose
No Ubuntu 22.04, precisamos instalar o plugin Docker Compose do repositório oficial do Docker. Primeiro, vamos garantir que temos os pré-requisitos necessários:
sudo apt-get install -y ca-certificates curl gnupg
Agora, adicione a chave GPG oficial do Docker:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Adicione o repositório às fontes do Apt:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Atualize o banco de dados de pacotes com os pacotes Docker:
sudo apt-get update
Agora, instale o plugin Docker Compose:
sudo apt-get install -y docker-compose-plugin
Você deve ver a instalação prosseguir com sucesso:
Reading package lists... Done
Building dependency tree... Done
...
Setting up docker-compose-plugin (2.6.0~ubuntu-1~22.04.1) ...
Processing triggers for man-db (2.10.2-1) ...
Vamos verificar se o Docker Compose está agora instalado:
docker compose version
Você deve ver uma saída semelhante a:
Docker Compose version v2.6.0
Agora você instalou com sucesso o plugin Docker Compose para a Docker CLI.
Testando o Docker Compose
Agora que instalamos com sucesso o Docker Compose, vamos criar um projeto simples para testar se ele funciona corretamente.
Criar um Diretório de Projeto
Primeiro, vamos criar um diretório para o nosso projeto de teste:
mkdir -p ~/project/docker-compose-test
cd ~/project/docker-compose-test
Criar um Arquivo de Configuração do Docker Compose
Agora, vamos criar um arquivo docker-compose.yml simples usando o editor nano:
nano docker-compose.yml
Adicione o seguinte conteúdo ao arquivo:
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
Esta configuração define um servidor web simples usando a imagem Nginx. Ele mapeia a porta 8080 no seu host para a porta 80 no contêiner e monta um diretório local para servir conteúdo HTML.
Salve o arquivo pressionando Ctrl+O, depois Enter e saia do nano com Ctrl+X.
Criar Conteúdo HTML
Vamos criar um diretório para o nosso conteúdo HTML e um arquivo HTML simples:
mkdir -p html
nano html/index.html
Adicione o seguinte conteúdo ao arquivo HTML:
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
<p>If you can see this, your Docker Compose setup is working correctly.</p>
</body>
</html>
Salve o arquivo e saia do nano.
Iniciar a Aplicação Docker Compose
Agora, vamos iniciar nossa aplicação Docker Compose:
docker compose up -d
Você deve ver uma saída semelhante a:
[+] Running 2/2
⠿ Network docker-compose-test_default Created
⠿ Container docker-compose-test-web-1 Started
Isso indica que o Docker Compose criou uma rede e iniciou o contêiner Nginx.
Verificar se a Aplicação está Rodando
Vamos verificar se nosso contêiner está rodando:
docker compose ps
Você deve ver uma saída semelhante a:
NAME COMMAND SERVICE STATUS PORTS
docker-compose-test-web-1 "/docker-entrypoint.…" web running 0.0.0.0:8080->80/tcp
Agora, vamos enviar uma requisição para o servidor web para verificar se ele está servindo nosso conteúdo:
curl http://localhost:8080
Você deve ver o conteúdo HTML que criamos:
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
<p>If you can see this, your Docker Compose setup is working correctly.</p>
</body>
</html>
Ótimo! Você criou e executou com sucesso uma aplicação Docker Compose.
Parar a Aplicação Docker Compose
Para parar e remover os contêineres, redes e volumes criados pelo Docker Compose, execute:
docker compose down
Você deve ver uma saída semelhante a:
[+] Running 2/2
⠿ Container docker-compose-test-web-1 Removed
⠿ Network docker-compose-test_default Removed
Isso confirma que o Docker Compose limpou os recursos que ele criou.
Compreendendo os Comandos Comuns do Docker Compose
Agora que você tem o Docker Compose funcionando, vamos explorar alguns comandos e configurações comuns que você usará em seus projetos.
Comandos Essenciais do Docker Compose
Aqui estão os comandos do Docker Compose mais comumente usados:
Iniciando serviços:
docker compose up -dA flag
-dexecuta os contêineres em segundo plano (modo detached).Parando serviços:
docker compose stopIsso para os contêineres sem removê-los.
Parando e removendo serviços:
docker compose downIsso para os contêineres e remove contêineres, redes, volumes e imagens criadas por
up.Visualizando logs:
docker compose logsPara acompanhar os logs em tempo real, adicione a flag
-f:docker compose logs -fListando contêineres:
docker compose psIsso mostra o status dos seus serviços Docker Compose.
Executando comandos dentro de contêineres:
docker compose exec <nome-do-serviço> <comando>Por exemplo, para executar um shell no serviço web:
docker compose exec web bash
Criando uma Configuração Docker Compose Mais Complexa
Vamos criar uma configuração Docker Compose mais complexa que inclui vários serviços. Crie um novo diretório para este exemplo:
mkdir -p ~/project/complex-compose
cd ~/project/complex-compose
Crie um arquivo docker-compose.yml:
nano docker-compose.yml
Adicione o seguinte conteúdo:
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./nginx/html:/usr/share/nginx/html
depends_on:
- app
networks:
- frontend
- backend
app:
image: node:14-alpine
working_dir: /app
volumes:
- ./app:/app
command: "node server.js"
environment:
- NODE_ENV=production
- DB_HOST=db
- DB_PORT=5432
depends_on:
- db
networks:
- backend
db:
image: postgres:13-alpine
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypassword
- POSTGRES_DB=mydb
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
networks:
frontend:
backend:
volumes:
db-data:
Salve o arquivo e saia do nano.
Esta configuração define três serviços:
- Um servidor web (nginx)
- Uma aplicação de backend (Node.js)
- Um banco de dados (PostgreSQL)
Ele também define redes para isolar o tráfego e um volume para armazenamento persistente do banco de dados.
Criar Diretórios e Arquivos para a Configuração Complexa
Vamos criar os diretórios e arquivos necessários:
mkdir -p nginx/html app
Crie um arquivo HTML simples:
nano nginx/html/index.html
Adicione o seguinte conteúdo:
<!DOCTYPE html>
<html>
<head>
<title>Complex Docker Compose Example</title>
</head>
<body>
<h1>Complex Docker Compose Example</h1>
<p>
This page is served by Nginx, and the application is powered by Node.js
with PostgreSQL.
</p>
</body>
</html>
Salve o arquivo e saia do nano.
Crie um servidor Node.js simples:
nano app/server.js
Adicione o seguinte conteúdo:
const http = require("http");
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("Hello from Node.js server!\n");
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running on port ${port}`);
console.log(
`Database connection info: ${process.env.DB_HOST}:${process.env.DB_PORT}`
);
});
Salve o arquivo e saia do nano.
Esta configuração é mais complexa e representa uma arquitetura de aplicação do mundo real, mas não a iniciaremos neste laboratório, pois exigiria mais configuração.
Melhores Práticas do Docker Compose
Aqui estão algumas melhores práticas a serem seguidas ao usar o Docker Compose:
Use variáveis de ambiente: Armazene informações confidenciais, como senhas, em variáveis de ambiente ou arquivos
.env.Defina políticas de reinicialização: Para ambientes de produção, defina políticas de reinicialização:
services: web: restart: alwaysUse tags de imagem específicas: Evite usar
latestem produção, pois pode levar a alterações inesperadas.Organize as configurações: Para configurações complexas, divida sua configuração em vários arquivos usando o padrão
docker-compose.override.yml.Defina limites de recursos: Evite o esgotamento de recursos do contêiner:
services: web: deploy: resources: limits: cpus: "0.5" memory: 512M
Ao seguir essas melhores práticas, você criará configurações Docker Compose mais sustentáveis e robustas.
Resumo
Neste laboratório, você aprendeu a resolver com sucesso o erro "unable to locate package docker-compose-plugin" ao:
- Compreender o que é o Docker Compose e diagnosticar o erro
- Instalar o Docker Compose corretamente adicionando o repositório oficial do Docker
- Criar e testar uma aplicação Docker Compose simples
- Explorar configurações Docker Compose mais complexas e melhores práticas
Agora você tem uma instalação do Docker Compose funcionando e o conhecimento para usá-la para gerenciar aplicações Docker com múltiplos contêineres. Essa base será valiosa à medida que você constrói soluções conteinerizadas mais complexas no futuro.
As habilidades que você adquiriu incluem:
- Solução de problemas de instalação de pacotes no Ubuntu
- Trabalhar com repositórios Docker
- Criar e executar configurações Docker Compose
- Gerenciar aplicações conteinerizadas com Docker Compose
Essas habilidades são essenciais para os fluxos de trabalho modernos de desenvolvimento e implantação de aplicações.



