Docker no VPS: Deploy Rápido e Eficiente (Passo a Passo)

11 min 1 Docker

O que é Docker e por que usá-lo em um VPS?

Docker é uma plataforma de código aberto que automatiza o deploy, a escala e a gestão de aplicações dentro de containers. Pense em containers como pacotes leves e isolados que contêm tudo o que uma aplicação precisa para rodar: código, bibliotecas, ferramentas de sistema, runtime e configurações. Em vez de instalar cada aplicação diretamente no seu servidor, você as empacota em containers, que podem ser executados de forma consistente em qualquer ambiente que tenha o Docker instalado. Em minha experiência, a adoção do Docker em servidores VPS simplifica drasticamente o ciclo de vida das aplicações, desde o desenvolvimento até a produção.

Ao rodar Docker em um VPS, você ganha portabilidade, isolamento e eficiência. Suas aplicações não dependem mais de configurações específicas do sistema operacional do servidor, pois tudo está encapsulado. Isso é um divisor de águas para DevOps, permitindo CI/CD (Continuous Integration/Continuous Deployment) mais robustos e rápidos. Para quem gerencia múltiplos serviços ou quer garantir que o ambiente de produção seja idêntico ao de desenvolvimento, o Docker é uma ferramenta indispensável.

Benefícios do Docker para Deploy em VPS

  • Consistência: Garante que a aplicação rode da mesma forma em qualquer ambiente.
  • Isolamento: Aplicações e suas dependências não entram em conflito.
  • Portabilidade: Mova seus containers entre servidores e nuvens sem problemas.
  • Eficiência: Containers são mais leves e iniciam mais rápido que máquinas virtuais.
  • Automação: Facilita a orquestração e o gerenciamento de múltiplos serviços.

Requisitos Mínimos para Docker em Produção

Para rodar Docker em um ambiente de produção, mesmo que em um VPS, é importante ter recursos adequados. Para a execução do próprio Docker, o sistema operacional (geralmente Linux) consome uma pequena quantidade de recursos. No entanto, o consumo real virá das aplicações que você rodar dentro dos containers. Como regra geral, um VPS com no mínimo 2GB de RAM e 2 vCPUs é recomendado para começar, especialmente se você planeja rodar mais de um container ou aplicações que exigem mais processamento. Para aplicações mais robustas ou múltiplos serviços, recomendamos 4GB de RAM e 4 vCPUs. O espaço em disco dependerá do tamanho das suas imagens e dados persistentes, mas 20GB de espaço livre é um bom ponto de partida.

Instalando Docker em um VPS Ubuntu: Passo a Passo

A instalação do Docker no Ubuntu é um processo relativamente simples. Vamos garantir que você tenha o Docker Engine instalado, configurado e pronto para uso. Este guia assume que você já tem acesso SSH a um servidor Ubuntu (preferencialmente uma versão LTS como 20.04 ou 22.04) e que você está logado como usuário com privilégios `sudo`.

Passo 1: Atualizar o índice de pacotes e instalar pré-requisitos

Antes de instalar qualquer coisa nova, é sempre uma boa prática atualizar a lista de pacotes do seu sistema e instalar algumas dependências que o Docker pode precisar. Execute os seguintes comandos:

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release

Passo 2: Adicionar o repositório oficial do Docker

O Docker recomenda a instalação a partir de seus próprios repositórios para garantir que você sempre tenha a versão mais recente e estável. Primeiro, adicione a chave GPG oficial do Docker ao seu sistema. Isso garante a autenticidade dos pacotes.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Em seguida, adicione o repositório Docker ao APT. Certifique-se de usar a versão correta do Ubuntu (substitua `$(lsb_release -cs)` pela sua versão, se necessário).

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Passo 3: Instalar o Docker Engine

Agora que o repositório foi adicionado, atualize novamente o índice de pacotes para incluir os pacotes do Docker e, em seguida, instale o Docker Engine, o Docker CLI e o containerd.

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

O comando acima instala o Docker Engine (o daemon que gerencia os containers), a interface de linha de comando (CLI) para interagir com o daemon, e o containerd, que é o runtime de containers. O `docker-compose-plugin` permite usar o comando `docker compose` diretamente, sem precisar instalar o Docker Compose separadamente.

Passo 4: Verificar a instalação

Para confirmar que o Docker foi instalado corretamente, execute o comando `hello-world`. Este comando baixa uma imagem de teste e a executa em um container. Se a instalação foi bem-sucedida, você verá uma mensagem indicando que sua instalação Docker está funcionando.

sudo docker run hello-world

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


Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
   (assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
   executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
   to your terminal.

To try something more ambitious, you can run our tutorials at https://docs.docker.com/language/

Se você obteve essa saída, parabéns! O Docker está rodando no seu VPS.

Passo 5: Gerenciar o Docker como um usuário não-root (opcional, mas recomendado)

Por padrão, o comando `docker` requer privilégios de `sudo`. Para executar comandos Docker sem `sudo`, você precisa adicionar seu usuário ao grupo `docker`. Em ambientes de produção, esta é uma configuração comum para facilitar o trabalho de desenvolvedores e administradores. Para adicionar seu usuário ao grupo `docker`:

sudo usermod -aG docker $USER

Após executar este comando, você precisará fazer logout e login novamente, ou executar `newgrp docker` para que as alterações de grupo tenham efeito na sua sessão atual. A partir de agora, você poderá executar comandos como `docker ps` sem o prefixo `sudo`.

Usando Docker Compose para Deploy de Aplicações

O Docker Compose é uma ferramenta que simplifica a definição e a execução de aplicações multi-container. Com um único arquivo YAML, você pode configurar todos os serviços, redes e volumes necessários para sua aplicação. Isso é ideal para cenários de deploy mais complexos ou para aplicações que dependem de múltiplos componentes, como um servidor web e um banco de dados. Se você ainda não tem familiaridade com a configuração de serviços em containers, um guia sobre o que são containers e como usá-los pode ser um bom ponto de partida.

Criando um arquivo `docker-compose.yml`

Vamos criar um exemplo simples usando Docker Compose para rodar um servidor web Nginx e um banco de dados PostgreSQL. Crie um diretório para o seu projeto e, dentro dele, crie um arquivo chamado `docker-compose.yml`:

version: '3.8'

services:
  web:
    image: nginx:latest
    container_name: meu_nginx_web
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    restart: unless-stopped

  db:
    image: postgres:14-alpine
    container_name: meu_postgres_db
    environment:
      POSTGRES_USER: meu_usuario
      POSTGRES_PASSWORD: minha_senha_segura
      POSTGRES_DB: meu_banco_de_dados
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  postgres_data:

Neste exemplo:

  • Definimos dois serviços: `web` (usando a imagem Nginx) e `db` (usando a imagem PostgreSQL).
  • O serviço `web` expõe a porta 80 do container na porta 8080 do host e monta um diretório local `./html` para servir conteúdo estático.
  • O serviço `db` configura o usuário, senha e nome do banco de dados, e usa um volume nomeado `postgres_data` para persistir os dados do banco.
  • `restart: unless-stopped` garante que os containers reiniciem automaticamente se o daemon Docker for reiniciado, a menos que você os pare manualmente.

Executando a aplicação com Docker Compose

Para iniciar seus containers, navegue até o diretório onde você salvou o arquivo `docker-compose.yml` e execute:

docker compose up -d

O flag `-d` executa os containers em modo detached (em segundo plano). Para ver os logs dos seus containers, use `docker compose logs -f`.

Comparando Docker com Outras Soluções de Deploy

O Docker revolucionou a forma como pensamos sobre deploy e gerenciamento de aplicações. Antes dele, a principal alternativa para isolamento e consistência eram as máquinas virtuais (VMs). Embora VMs sejam poderosas, elas são significativamente mais pesadas, exigindo um sistema operacional completo para cada instância, o que consome mais recursos (CPU, RAM e disco) e leva mais tempo para iniciar.

Docker vs. Máquinas Virtuais (VMs)

A principal diferença reside na arquitetura. VMs virtualizam o hardware, enquanto os containers virtualizam o sistema operacional. Isso faz com que os containers do Docker sejam muito mais eficientes em termos de recursos e velocidade.

Recurso Docker Containers Máquinas Virtuais (VMs)
Uso de Recursos (RAM/CPU) Baixo (compartilha o kernel do host) Alto (cada VM tem seu próprio SO)
Tempo de Boot Segundos Minutos
Portabilidade Alta (mesma imagem em qualquer OS compatível) Média (depende do hypervisor e SO)
Isolamento Nível de SO (processos, rede) Nível de Hardware e SO
Tamanho da Imagem Megabytes Gigabytes

Para cenários de DevOps que exigem agilidade e otimização de recursos, o Docker é geralmente a escolha superior. Se você busca rodar várias aplicações em um mesmo servidor VPS, o Docker pode ser a solução mais econômica e eficiente. Para entender melhor como o Docker se encaixa no ecossistema de automação, confira nosso guia sobre Docker na Prática para Automação e DevOps.

Erros Comuns ao Usar Docker em VPS e Como Evitá-los

Embora o Docker seja poderoso, alguns erros podem surgir durante a instalação ou o uso em um VPS. Estar ciente deles pode economizar muito tempo e frustração.

Problemas com Permissões (Sem `sudo`)

Como mencionado anteriormente, a necessidade de usar `sudo` para todos os comandos Docker pode ser incômoda. Se você não adicionar seu usuário ao grupo `docker` ou se o grupo não for configurado corretamente, você encontrará erros de permissão. A solução é seguir o passo de adicionar seu usuário ao grupo `docker` e reiniciar a sessão.

Imagens de Container Excessivamente Grandes

Imagens Docker grandes consomem mais espaço em disco, levam mais tempo para baixar e podem afetar o desempenho do deploy. Para evitar isso:

  • Use imagens base leves (como Alpine Linux).
  • Utilize multi-stage builds para separar o ambiente de build do ambiente de runtime.
  • Limpe caches e arquivos desnecessários após a instalação de pacotes dentro do Dockerfile.

Gerenciamento de Dados Persistentes

Containers são efêmeros por natureza. Se um container é removido, seus dados são perdidos a menos que você os tenha armazenado externamente. Utilize volumes Docker (como no exemplo do PostgreSQL) ou bind mounts para garantir que os dados importantes persistam mesmo que o container seja recriado. Se você está migrando para Docker de um sistema existente, planeje cuidadosamente a estratégia de persistência de dados.

Segurança dos Containers

Rodar containers com privilégios excessivos ou sem as devidas configurações de segurança pode ser um risco. Sempre execute containers com o mínimo de privilégios necessários. Evite rodar containers como `root` (a menos que seja estritamente necessário e com medidas de segurança adicionais) e utilize políticas de rede para isolar seus containers.

Perguntas Relacionadas

O que são containers Docker?

Containers Docker são unidades de software que empacotam código, bibliotecas e dependências, permitindo que uma aplicação rode de forma isolada e consistente em qualquer ambiente. Eles compartilham o kernel do sistema operacional do host, tornando-os mais leves e rápidos que máquinas virtuais.

É seguro rodar Docker em um VPS?

Sim, Docker é considerado seguro quando configurado corretamente. A segurança depende de boas práticas como manter o Docker atualizado, usar imagens confiáveis, gerenciar permissões adequadamente, configurar redes isoladas e evitar rodar containers com privilégios desnecessários.

Quantos containers posso rodar em um VPS?

O número de containers que você pode rodar em um VPS depende dos recursos do servidor (RAM, CPU, disco) e das demandas de cada aplicação. Um VPS com 4GB de RAM pode rodar confortavelmente vários containers leves, enquanto aplicações mais pesadas podem exigir mais recursos por container.

Docker Compose é necessário para usar Docker?

Não, Docker Compose não é estritamente necessário para usar Docker. Você pode gerenciar containers individuais com comandos `docker`. No entanto, Docker Compose é altamente recomendado para aplicações com múltiplos serviços, pois simplifica a configuração e o gerenciamento de todo o ecossistema de containers em um único arquivo.

Conclusão: O Poder do Docker para seu Deploy em VPS

Implementar o Docker em seu VPS abre um mundo de possibilidades para automação, deploy e gerenciamento de aplicações. A capacidade de empacotar e executar software em containers de forma consistente e isolada é fundamental para práticas modernas de DevOps. Desde a instalação básica no Ubuntu até o uso de Docker Compose para orquestrar serviços complexos, o Docker oferece uma solução poderosa e flexível.

Para garantir que você tenha a infraestrutura ideal para rodar suas aplicações em containers, com performance e confiabilidade, recomendamos o uso de nossos servidores otimizados. Para este tutorial e para a maioria dos cenários de deploy com Docker, o plano VPS Brasil Starter, com 2GB de RAM e 2 vCPUs por apenas R$ 49/mês, é a escolha perfeita. Testamos cada comando deste artigo em uma VPS Brasil Starter e confirmamos sua eficácia e desempenho.

Comece hoje mesmo a otimizar seus deploys e a automatizar seus fluxos de trabalho com a robustez do Docker em um ambiente de hospedagem confiável. Conheça o plano VPS Brasil Starter e dê o próximo passo na sua jornada de desenvolvimento e infraestrutura!

Leia também: Veja mais tutoriais de N8N

Perguntas Frequentes

Para rodar o Docker em si, os requisitos são mínimos. No entanto, para executar aplicações em produção com Docker, um VPS com pelo menos 2GB de RAM e 2 vCPUs é recomendado. Para aplicações mais exigentes ou múltiplos serviços, 4GB de RAM e 4 vCPUs são ideais. O espaço em disco dependerá do tamanho das suas imagens e dados, mas 20GB livres é um bom ponto de partida. É crucial que o servidor execute uma distribuição Linux compatível, como Ubuntu LTS.

Sim, é possível e recomendado para conveniência e segurança. Adicionando seu usuário ao grupo 'docker' no Linux, você pode executar comandos Docker sem precisar do prefixo `sudo`. Isso é feito com o comando `sudo usermod -aG docker $USER`. Lembre-se de fazer logout e login novamente ou usar `newgrp docker` para que a alteração tenha efeito na sua sessão atual.

O Docker Compose simplifica a definição, configuração e execução de aplicações multi-container. Com um único arquivo YAML, você descreve todos os serviços, redes e volumes necessários. Isso automatiza o processo de levantar toda a infraestrutura da sua aplicação com um único comando (`docker compose up -d`), tornando o deploy mais rápido e consistente, ideal para fluxos de trabalho de DevOps.

A principal diferença é a forma como virtualizam. VMs virtualizam o hardware e rodam um sistema operacional completo, consumindo mais recursos (RAM, CPU, disco) e tempo de boot. Containers Docker virtualizam o sistema operacional, compartilhando o kernel do host. Isso os torna muito mais leves, rápidos para iniciar e eficientes em termos de recursos, ideais para isolamento e portabilidade de aplicações em servidores VPS.

Containers Docker são efêmeros por padrão. Para garantir a persistência de dados, utilize volumes Docker ou bind mounts. Volumes são gerenciados pelo Docker e são a forma recomendada para dados de bancos de dados e outras informações que precisam sobreviver à recriação de containers. Bind mounts permitem montar um diretório do host diretamente dentro do container, útil para arquivos de configuração ou conteúdo estático.

Docker é fundamental para DevOps por várias razões: ele garante consistência entre ambientes (desenvolvimento, staging, produção), facilita a automação de CI/CD pipelines, permite a portabilidade de aplicações e otimiza o uso de recursos. A padronização proporcionada pelos containers acelera o ciclo de vida do desenvolvimento e deploy, reduzindo erros e gargalos.

Uma 'imagem' Docker é um template somente leitura que contém as instruções para criar um container. Pense nela como uma classe em programação orientada a objetos. Um 'container' é uma instância executável de uma imagem. É o ambiente isolado onde sua aplicação roda. Você pode criar múltiplos containers a partir de uma única imagem, cada um sendo uma instância independente da aplicação.

Para expor aplicações rodando em containers de forma segura e eficiente, um proxy reverso (como Nginx ou Traefik) é essencial. Você pode configurar um container de proxy reverso usando Docker Compose, que direcionará o tráfego externo para os containers de aplicação corretos com base no nome do host ou caminho da URL. Isso também permite gerenciar certificados SSL e balanceamento de carga.

Comentários (0)

Ainda não há comentários. Seja o primeiro!