Docker em VPS: Instale e Execute Containers Facilmente

11 min 2 Docker

O Que é Docker e Por Que Usá-lo em um VPS?

O Docker é uma plataforma de containers que permite empacotar uma aplicação e suas dependências em um ambiente isolado, garantindo que ela funcione de forma consistente em qualquer infraestrutura. Para quem gerencia servidores, rodar Docker em um VPS (Virtual Private Server) significa maior eficiência, agilidade no deploy e melhor isolamento de aplicações. Na minha experiência, muitos clientes buscam a flexibilidade do Docker para consolidar múltiplos serviços em um único servidor, reduzindo custos e complexidade de gerenciamento.

Um VPS com Docker oferece a base ideal para rodar suas aplicações em produção. Você ganha a portabilidade dos containers, a facilidade de gerenciamento e a capacidade de escalar suas aplicações conforme a demanda. Este guia irá levá-lo passo a passo na instalação e configuração do Docker em um VPS Linux, com foco em um ambiente produtivo.

Benefícios do Docker para Aplicações em Servidor

  • Consistência e Portabilidade: Aplicações rodando em containers Docker se comportam da mesma maneira, independentemente do ambiente onde são executadas, eliminando o clássico "funciona na minha máquina".
  • Isolamento: Cada container é isolado de outros e do sistema host, aumentando a segurança e evitando conflitos de dependência.
  • Eficiência de Recursos: Containers compartilham o kernel do sistema operacional hospedeiro, sendo mais leves e consumindo menos recursos (RAM e CPU) do que máquinas virtuais tradicionais.
  • Agilidade no Deploy: Simplifica o processo de construção, teste e deploy de aplicações, acelerando o ciclo de vida do desenvolvimento.
  • Gerenciamento Simplificado: Ferramentas como Docker Compose e orquestradores como Kubernetes facilitam o gerenciamento de múltiplos containers.

Requisitos de Sistema para Docker em Produção

Para rodar Docker em um ambiente de produção, especialmente com múltiplos containers ou aplicações com alta demanda, é crucial ter um servidor com recursos adequados. Uma instalação básica do Docker Engine em si consome poucos recursos em repouso, mas o real consumo virá das aplicações que você rodar dentro dos containers. Para uma experiência fluida e confiável, recomendo os seguintes requisitos mínimos:

  • Memória RAM: Mínimo de 4GB de RAM. Para aplicações mais robustas ou múltiplos containers rodando simultaneamente, 8GB ou mais são altamente recomendados. A falta de memória é a principal causa de instabilidade em ambientes de container.
  • vCPUs: Mínimo de 2 vCPUs. Aplicações mais intensivas em processamento podem se beneficiar de 4 vCPUs ou mais.
  • Armazenamento: SSD é essencial para performance. O espaço necessário dependerá do tamanho das suas imagens Docker e dos dados gerados pelas aplicações. Comece com pelo menos 50GB e planeje a expansão.
  • Sistema Operacional: Uma distribuição Linux recente e com suporte, como Ubuntu LTS (Long Term Support) ou Debian.

Na Host You Secure, nossos planos VPS Brasil Básico oferecem exatamente 4GB de RAM e 4 vCPUs, sendo a escolha ideal para este tutorial e para rodar seus primeiros containers em produção com Docker. Esse tutorial foi validado por nós em uma VPS Brasil Básico.

Instalando Docker no Ubuntu: Um Guia Passo a Passo

A forma mais recomendada e simples de instalar o Docker no Ubuntu é utilizando o script de conveniência oficial. Ele garante que você obtenha a versão mais recente e compatível. Antes de começar, certifique-se de que seu servidor está atualizado:

Passo 1: Atualizar o Sistema

Abra seu terminal SSH e execute os seguintes comandos para garantir que todos os pacotes do sistema estão atualizados:

sudo apt update && sudo apt upgrade -y

Passo 2: Baixar e Executar o Script de Instalação do Docker

O Docker fornece um script que automatiza a instalação do Docker Engine, containerd e Docker Compose. Execute o seguinte comando para baixar e rodar o script:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Este script irá detectar sua distribuição e instalar os pacotes necessários. Após a instalação, o Docker estará pronto para uso.

Passo 3: Verificar a Instalação

Para confirmar que o Docker foi instalado corretamente, execute o comando:

sudo docker --version

Você deverá ver a versão do Docker instalada. Para testar se os containers estão funcionando, execute o container "hello-world":

sudo docker run hello-world

Se tudo estiver certo, você verá uma mensagem confirmando que sua instalação está funcionando.

Passo 4: Adicionar seu Usuário ao Grupo Docker (Opcional, mas Recomendado)

Por padrão, você precisa usar sudo para executar comandos Docker. Para executar comandos Docker sem o prefixo sudo, adicione seu usuário ao grupo docker:

sudo usermod -aG docker $USER

Você precisará fazer logout e login novamente no seu servidor SSH para que essa alteração tenha efeito.

Executando sua Primeira Aplicação com Docker Compose

Docker Compose é uma ferramenta para definir e rodar aplicações Docker multi-container. Ele utiliza um arquivo YAML para configurar a aplicação do seu serviço. Vamos criar um exemplo simples de um servidor web Nginx.

Passo 1: Criar o Diretório do Projeto

Crie um diretório para o seu projeto e navegue até ele:

mkdir meu-app-docker
cd meu-app-docker

Passo 2: Criar o Arquivo docker-compose.yml

Crie um arquivo chamado docker-compose.yml neste diretório com o seguinte conteúdo:

version: '3.8'

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

volumes:
  html: {}

Neste arquivo:

  • version: especifica a versão do Docker Compose.
  • services: define os containers que compõem sua aplicação.
  • web: é o nome do nosso serviço (um servidor Nginx).
  • image: nginx:latest: usa a imagem oficial do Nginx mais recente.
  • ports: - "80:80": mapeia a porta 80 do seu VPS para a porta 80 do container Nginx.
  • volumes: - ./html:/usr/share/nginx/html: monta um diretório local html dentro do container, onde o Nginx busca os arquivos para servir.
  • restart: unless-stopped: garante que o container será reiniciado automaticamente, exceto se for parado manualmente.

Passo 3: Criar o Conteúdo HTML

Crie um diretório chamado html e dentro dele um arquivo index.html:

mkdir html
cd html
echo "<h1>Olá do meu container Docker!</h1>" > index.html
cd ..

Passo 4: Iniciar os Containers

No diretório onde está seu arquivo docker-compose.yml, execute:

sudo docker-compose up -d

O comando up inicia os serviços definidos no compose, e o flag -d (detached mode) o executa em segundo plano. Agora, se você acessar o IP público do seu VPS no navegador, verá a mensagem "Olá do meu container Docker!".

Gerenciamento de Containers e Imagens

Com o Docker instalado, você terá diversas ferramentas para gerenciar seus containers e imagens.

Comandos Essenciais do Docker

  • sudo docker ps: lista todos os containers em execução.
  • sudo docker ps -a: lista todos os containers (em execução e parados).
  • sudo docker stop [ID_DO_CONTAINER]: para um container em execução.
  • sudo docker start [ID_DO_CONTAINER]: inicia um container parado.
  • sudo docker rm [ID_DO_CONTAINER]: remove um container (precisa estar parado).
  • sudo docker images: lista todas as imagens Docker disponíveis localmente.
  • sudo docker rmi [ID_DA_IMAGEM]: remove uma imagem Docker.
  • sudo docker pull [NOME_DA_IMAGEM]: baixa uma imagem de um registry (como o Docker Hub).
  • sudo docker logs [ID_DO_CONTAINER]: exibe os logs de um container.

O Que São Containers e Como Usar em Produção

Containers são instâncias isoladas de aplicações. Em produção, eles oferecem um ambiente previsível e eficiente para rodar seus serviços. A chave para o sucesso está no bom gerenciamento e monitoramento. Para aplicações mais complexas ou que precisam de alta disponibilidade, a orquestração com ferramentas como Kubernetes se torna essencial, mas para muitos casos, o Docker Compose em um bom VPS é suficiente.

Exemplo de Uso com Banco de Dados (PostgreSQL)

Integrar um banco de dados como PostgreSQL é comum. Veja um exemplo de como adicionar um serviço de banco de dados ao nosso docker-compose.yml:

version: '3.8'

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

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: myuser
      POSTGRES_PASSWORD: mypassword
      POSTGRES_DB: mydb
    volumes:
      - db_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  html: {}
  db_data: {}

Neste exemplo, adicionamos um novo serviço db usando a imagem oficial do PostgreSQL. As variáveis de ambiente definem as credenciais e o nome do banco de dados. Um volume db_data é usado para persistir os dados do banco de dados, garantindo que eles não sejam perdidos quando o container for reiniciado ou recriado. Lembre-se de substituir mypassword e outros detalhes por suas próprias credenciais seguras.

Erros Comuns e Como Evitá-los

  • Falta de Memória (OOM Killer): O erro mais comum é o sistema host ficar sem memória, o que leva o kernel a matar processos (incluindo seus containers). Garanta que seu VPS tenha RAM suficiente para todos os containers e o sistema operacional. Para produção, 4GB de RAM é o piso mínimo absoluto.
  • Permissões de Arquivo: Ao usar volumes, permissões incorretas entre o host e o container podem causar falhas. Certifique-se de que os usuários e grupos dos processos nos containers tenham acesso aos diretórios montados.
  • Portas Conflitantes: Tentar mapear uma porta no host que já está em uso por outro serviço (ou outro container) resultará em erro. Verifique as portas em uso com sudo netstat -tulnp.
  • Imagens Desatualizadas: Usar imagens antigas pode expor sua aplicação a vulnerabilidades de segurança. Mantenha suas imagens atualizadas com docker-compose pull e docker-compose up -d --force-recreate.
  • Persistência de Dados: Não utilizar volumes para dados de bancos de dados ou arquivos importantes resultará na perda de dados caso o container seja removido. Sempre use volumes para dados persistentes.

Perguntas Relacionadas

O Docker pode rodar em qualquer VPS?

Sim, o Docker pode rodar em qualquer VPS que utilize um sistema operacional Linux compatível, como Ubuntu, Debian, CentOS, etc. A principal consideração são os requisitos de recursos do seu VPS.

Quanto de RAM o Docker realmente precisa?

O Docker Engine em si consome pouca RAM quando ocioso. No entanto, os containers e as aplicações rodando dentro deles consumirão RAM. Para aplicações de produção, um mínimo de 4GB de RAM é recomendado para o VPS inteiro, com 8GB ou mais sendo ideal para cargas de trabalho mais pesadas.

Qual a diferença entre Docker e Máquinas Virtuais?

Máquinas Virtuais (VMs) virtualizam o hardware, rodando um sistema operacional completo em cada uma. Containers virtualizam o sistema operacional, compartilhando o kernel do host. Isso torna os containers mais leves, rápidos para iniciar e com menor consumo de recursos.

É seguro rodar Docker em produção?

Sim, rodar Docker em produção é seguro quando configurado corretamente. As melhores práticas incluem usar imagens oficiais e atualizadas, configurar redes isoladas, gerenciar permissões de forma adequada e manter o host e os containers atualizados com patches de segurança.

Comparativo: Docker Engine vs. Docker Compose

Enquanto o Docker Engine gerencia containers individuais, o Docker Compose simplifica o gerenciamento de aplicações multi-container. Ambos são essenciais, mas servem a propósitos distintos no fluxo de trabalho de DevOps.

Característica Docker Engine Docker Compose
Escopo Gerencia containers, imagens, redes e volumes individuais. Define e executa aplicações multi-container a partir de um arquivo YAML.
Uso Principal Executar comandos isolados, construir imagens, gerenciar ciclo de vida de containers. Orquestração simplificada de aplicações com múltiplos serviços (web, banco de dados, cache, etc.).
Configuração Comandos CLI diretos (docker run, docker build). Arquivo docker-compose.yml descreve a aplicação inteira.
Complexidade Menor para um único container. Maior para configurar múltiplos serviços, mas simplifica o deploy geral.
Ideal para Tarefas pontuais, testes rápidos, single-container applications. Desenvolvimento local, ambientes de staging/produção com vários serviços interconectados.

Otimizando o Deploy em seu VPS com Docker

A otimização do deploy com Docker em um VPS envolve uma combinação de configuração correta do servidor, uso eficiente de recursos e boas práticas de gerenciamento de containers. Ao seguir os passos deste guia, você já estará no caminho certo. Considere também a configuração de um proxy reverso, como Nginx ou Traefik, para gerenciar o tráfego de múltiplos containers de forma eficiente e segura. Se você ainda não tem familiaridade com a configuração de um proxy reverso, recomendamos a leitura do nosso artigo sobre como implantar Docker em VPS Linux: Tutorial Prático e Requisitos, que aborda esses detalhes.

Lembre-se que a escolha do VPS correto é fundamental. Um servidor subdimensionado pode levar a problemas de performance e instabilidade. Por isso, é essencial escolher um plano que atenda aos requisitos de produção, mesmo que pareçam um pouco acima do mínimo.

Conclusão e Próximos Passos

Dominar o Docker em um VPS Linux abre um leque de possibilidades para automatizar e otimizar seus deploys. A capacidade de empacotar e executar aplicações em containers de forma isolada e portátil é um divisor de águas no mundo do desenvolvimento e da infraestrutura. Ao seguir este tutorial, você aprendeu a instalar o Docker, gerenciar containers e executar aplicações com Docker Compose.

Para dar o próximo passo e colocar suas aplicações em produção de maneira confiável e performática, recomendamos o uso de um servidor robusto. A Host You Secure oferece planos de VPS otimizados para este fim.

Este tutorial foi validado por nós em uma VPS Brasil Básico, que oferece 4GB de RAM e 4 vCPUs por apenas R$ 99/mês, sendo a solução ideal para rodar seus containers Docker com Docker Compose e garantir a estabilidade necessária para seus projetos.

Leia também: Veja mais tutoriais de N8N

Perguntas Frequentes

Para rodar Docker em produção com aplicações estáveis, um VPS com no mínimo 4GB de RAM e 2 vCPUs é recomendado. Para cargas de trabalho mais intensas ou múltiplos containers, 8GB de RAM e 4 vCPUs são ideais. Armazenamento em SSD é crucial para performance, com pelo menos 50GB sendo um bom ponto de partida. A quantidade exata dependerá das aplicações que você pretende executar.

Para adicionar um novo serviço ao seu arquivo <code>docker-compose.yml</code>, você precisa definir uma nova entrada sob a seção <code>services</code>. Especifique a imagem a ser usada (ex: <code>image: redis:latest</code>), configure as portas, volumes, variáveis de ambiente e outras diretivas conforme necessário. Após salvar o arquivo, execute <code>sudo docker-compose up -d</code> para que o novo serviço seja criado e iniciado.

Sim, você pode executar comandos Docker sem o prefixo <code>sudo</code> adicionando seu usuário ao grupo <code>docker</code>. Utilize o comando <code>sudo usermod -aG docker $USER</code> e, em seguida, faça logout e login novamente no seu servidor SSH para que as alterações entrem em vigor. Lembre-se que dar acesso ao grupo Docker é equivalente a ter permissões de root no sistema.

Uma imagem Docker é um template leve e executável que contém instruções para criar um container. Ela é imutável. Um container é uma instância em execução de uma imagem. Você pode criar vários containers a partir de uma única imagem, cada um rodando de forma isolada.

Para visualizar os logs de um container em execução, utilize o comando <code>sudo docker logs [ID_DO_CONTAINER]</code>. Substitua <code>[ID_DO_CONTAINER]</code> pelo ID do container cujos logs você deseja ver. Você também pode usar a flag <code>-f</code> para seguir os logs em tempo real: <code>sudo docker logs -f [ID_DO_CONTAINER]</code>.

Se você remover um container (<code>docker rm</code>) que utiliza um volume para persistir dados, os dados dentro desse volume não serão apagados automaticamente. O volume é um objeto separado que pode ser reutilizado por outros containers ou removido manualmente (<code>docker volume rm [NOME_DO_VOLUME]</code>) quando não for mais necessário. Essa separação garante a durabilidade dos seus dados.

Volumes são o método preferido para persistir dados gerados e usados por containers Docker. Eles permitem que os dados sobrevivam ao ciclo de vida do container (criação, parada, remoção). Isso é essencial para bancos de dados, arquivos de configuração, ou qualquer dado que precise ser mantido entre reinicializações ou atualizações de containers, garantindo a integridade e disponibilidade dos seus dados.

Sim, essa é uma das grandes vantagens do Docker. Utilizando o Docker Compose, você pode definir múltiplos serviços (como um servidor web, um banco de dados, uma fila de mensagens, um cache, etc.) em um único arquivo <code>docker-compose.yml</code> e executá-los juntos. O Docker gerencia as redes e o isolamento entre eles, permitindo que coexistam no mesmo VPS de forma eficiente.

Comentários (0)

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