A instalação do Docker e do Docker Compose em uma VPS Linux é um dos primeiros passos fundamentais para qualquer profissional de TI, desenvolvedor backend ou especialista em DevOps que deseja modernizar sua infraestrutura. A containerização não apenas padroniza o ambiente de desenvolvimento e produção, mas também simplifica drasticamente o gerenciamento de dependências, escalabilidade e portabilidade das aplicações. Neste tutorial técnico completo, você aprenderá como realizar a instalação oficial do Docker Engine e configurar o Docker Compose em uma VPS com sistema operacional baseado em Debian ou Ubuntu (como Ubuntu 20.04/22.04 LTS ou Debian 11/12), que são as distribuições mais comuns para servidores web e aplicações modernas.
Pré-requisitos e Preparação do Sistema
Antes de iniciarmos a instalação propriamente dita, é crucial garantir que o ambiente esteja limpo e atualizado. Uma VPS recém-provisionada pode conter pacotes antigos ou configurações conflitantes de repositórios de software. O primeiro passo lógico é atualizar o índice de pacotes do gerenciador de software apt para garantir que baixemos as versões mais recentes disponíveis nos repositórios oficiais.
sudo apt update
sudo apt upgrade -y
Em seguida, devemos instalar os pacotes necessários para permitir que o apt use um repositório via HTTPS. Por padrão, a maioria das instalações Linux não vem com esses utilitários de segurança e transporte configurados. Execute o comando abaixo para instalar as dependências básicas:
sudo apt-get install ca-certificates curl gnupg lsb-release -y
Esses pacotes são essenciais para validar a integridade das chaves GPG do repositório oficial do Docker e garantir que a comunicação entre sua VPS e o repositório seja segura.
Configuração do Repositório Oficial do Docker
A instalação mais recomendada pela documentação oficial é utilizar os repositórios oficiais do Docker, em vez de confiar na versão disponível nos repositórios padrão do sistema operacional. Isso garante que você tenha acesso às últimas correções de segurança e funcionalidades do Docker Engine.
O primeiro passo neste processo é adicionar a chave GPG oficial do Docker ao seu sistema. Essa chave é usada para verificar a autenticidade dos pacotes baixados. Execute o seguinte comando:
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
Com a chave segura instalada, precisamos configurar o repositório de software. O Docker oferece scripts auxiliares para automatizar essa tarefa, identificando automaticamente sua distribuição e arquitetura (x86_64, arm64, etc.). Execute:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Agora que o repositório está configurado, atualize o índice de pacotes novamente para incluir os novos repositórios adicionados:
sudo apt update
Instalação do Docker Engine
Com o ambiente preparado, estamos prontos para instalar o pacote principal. O nome correto do pacote no novo repositório é docker-ce (Community Edition). Evite instalar apenas docker.io, pois essa versão vem dos repositórios padrão do Ubuntu/Debian e geralmente está desatualizada ou não recebe as mesmas atualizações de segurança.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Neste comando, instalamos não apenas o motor do Docker (docker-ce), mas também a linha de comando (docker-ce-cli), o gerenciador de contêineres de baixo nível (containerd.io) e os plugins essenciais para construção de imagens e execução de compostos. A opção -y confirma automaticamente a instalação, facilitando scripts automatizados.
Após a conclusão da instalação, o serviço do Docker não inicia imediatamente em algumas configurações padrão. Você pode verificar o status do serviço utilizando:
sudo systemctl status docker
Se o status indicar inactive ou dead, inicie o serviço manualmente:
sudo systemctl start docker
Para garantir que o Docker inicie automaticamente sempre que a VPS for reiniciada, habilite o serviço:
sudo systemctl enable docker
Verificação da Instalação e Permissões de Usuário
Uma verificação rápida pode ser feita executando a imagem hello-world. Isso baixa uma imagem mínima do Docker Hub e executa um contêiner que imprime uma mensagem de sucesso:
sudo docker run hello-world
Se você vir uma mensagem indicando que sua instalação parece estar funcionando corretamente, a parte técnica está completa. No entanto, há um ponto crítico para a produtividade: o gerenciamento de permissões.
Por padrão, o Docker cria um grupo chamado docker. Apenas usuários pertencentes a esse grupo (e o root) podem executar comandos do Docker sem precisar usar o sudo. Executar sudo docker em todos os seus scripts de deploy e desenvolvimento pode ser tedioso e aumentar riscos de segurança acidental. Para resolver isso, adicione seu usuário atual ao grupo docker:
sudo usermod -aG docker $USER
Após executar este comando, você precisará sair do seu terminal e fazer login novamente (ou usar o comando newgrp docker) para que as novas permissões sejam aplicadas à sua sessão atual. Teste a configuração executando um comando sem sudo:
docker ps
Se o comando retornar uma lista vazia de contêineres em execução (sem erro de permissão), suas configurações estão perfeitas.
Docker Compose: Orquestração Simplificada
O Docker Compose é uma ferramenta para definir e executar aplicações Docker multi-contêiner. Ele utiliza um arquivo YAML para configurar os serviços da sua aplicação, facilitando o deploy de stacks complexas que envolvem banco de dados, cache, balanceadores de carga e a aplicação em si.
Nos passos anteriores, já instalamos o docker-compose-plugin. Isso significa que o Docker Compose está disponível como um plugin nativo do Docker. Você pode verificar a versão instalada com:
docker compose version
Nota importante: A nova sintaxe utiliza docker compose (sem hífen), em vez da versão antiga que era uma binário separado chamado docker-compose. Recomendamos o uso da nova sintaxe para compatibilidade futura.
Criando seu Primeiro Projeto com Docker Compose
Vamos criar um exemplo prático. Imagine que você deseja hospedar um servidor web simples Nginx e um banco de dados PostgreSQL, ambos gerenciados pelo Docker Compose.
- Crie um diretório para o projeto:
mkdir ~/meu-projeto-docker
cd ~/meu-projeto-docker
- Crie um arquivo chamado
docker-compose.yml. Este arquivo definirá sua infraestrutura:
nano docker-compose.yml
Dentro do arquivo, insira a seguinte configuração de exemplo:
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:15-alpine
environment:
POSTGRES_PASSWORD: senha_segura_123
POSTGRES_DB: meu_banco
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Neste arquivo, definimos dois serviços: web, que expõe a porta 80 do contêiner para a porta 8080 da VPS, e db, que configura um banco PostgreSQL. O uso de volumes garante que os dados do banco persistam mesmo se o contêiner for removido.
Executando e Gerenciando os Contêineres
Agora, vamos iniciar a infraestrutura descrita no arquivo YAML. Use o comando up com a flag -d para rodar em modo detached (background):
docker compose up -d
O Docker irá baixar as imagens necessárias, criar os contêineres e iniciá-los. Você pode verificar se estão rodando com:
docker compose ps
Para visualizar os logs de ambos os serviços combinados, utilize:
docker compose logs -f
Se precisar parar todos os serviços definidos no arquivo, use:
docker compose down
Esta é a vantagem principal do Docker Compose: um único comando gerencia todo o ciclo de vida da sua aplicação multi-contêiner.
Otimizações e Boas Práticas para VPS
Ao operar Docker em uma VPS, considere limitações de recursos. Se sua VPS possui pouca memória RAM (ex: 512MB ou 1GB), o consumo do daemon Docker e dos contêineres pode ser significativo.
Limitando Recursos
Você pode limitar a quantidade de CPU e memória que um contêiner utiliza diretamente no docker-compose.yml:
services:
web:
image: nginx:alpine
deploy:
resources:
limits:
cpus: '0.50'
memory: 256M
Segurança Básica
Nunca exponha portas de banco de dados diretamente na internet. No exemplo acima, a porta do PostgreSQL não foi mapeada para o host (- "8080:80" existe, mas não há - "5432:5432"). Isso impede que acessos externos tentem fazer login no banco de dados. Se sua aplicação precisar acessar o banco, ela deve fazê-lo através da rede interna do Docker (usando o nome do serviço db como hostname).
Mantendo Imagens Atualizadas
Para manter suas imagens seguras, atualize periodicamente as imagens base. O comando abaixo verifica e atualiza todas as imagens definidas no seu compose file:
docker compose pull
docker compose up -d
Conclusão
A instalação do Docker e Docker Compose em sua VPS Linux é um processo robusto que transforma a maneira como você gerencia aplicações. Ao seguir os passos de configuração dos repositórios oficiais, você garante estabilidade e segurança. O uso do docker-compose.yml padroniza seu ambiente de desenvolvimento e produção, reduzindo o clássico problema "funciona na minha máquina".
Com este conhecimento básico, você está preparado para implementar stacks mais complexas, integrar pipelines de CI/CD e explorar orquestradores como Kubernetes em ambientes escaláveis. Lembre-se sempre de monitorar o uso de recursos da sua VPS e ajustar as restrições dos contêineres conforme necessário para manter a estabilidade do servidor.