Docker em VPS: Instale e Execute Containers Facilmente

Docker em VPS: Instale e Execute Containers Facilmente — ilustração sobre tecnologia
Docker: Otimizando a infraestrutura de servidores com a tecnologia de containers.

Resposta Rápida / TL;DR

Instalar Docker em um VPS Linux envolve baixar o script de instalação oficial ou usar um gerenciador de pacotes como o apt. Uma vez instalado, você pode criar e gerenciar containers para hospedar suas aplicações, otimizando o deploy e o uso de recursos.

Pontos principais

  • O Docker permite rodar aplicações em containers isolados e portáteis, otimizando o deploy em VPS.
  • Para produção, um VPS com no mínimo 4GB de RAM e 2 vCPUs é recomendado para rodar Docker.
  • A instalação no Ubuntu é simplificada com o script oficial: curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh.
  • Docker Compose simplifica o gerenciamento de aplicações multi-container através de arquivos YAML.
Índice do artigo

    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.

    FAQ: perguntas frequentes

    Quais são os requisitos de hardware para rodar Docker em produção?

    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.

    Como faço para adicionar um novo serviço ao meu arquivo Docker Compose?

    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.

    Posso usar o Docker sem o sudo?

    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.

    Qual a diferença entre uma imagem e um container Docker?

    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.

    Como faço para acessar os logs de um container Docker?

    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>.

    O que acontece se eu remover um container que tem dados persistidos em um volume?

    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.

    Qual a importância de usar volumes para persistir 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.

    É possível rodar múltiplos serviços (ex: web app + banco de dados) em um mesmo VPS com Docker?

    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 (9)

    Thiago Vieira - E-commerce Brasil

    As dicas de rede bridge interna e volumes persistentes deixaram nosso ambiente de produção muito mais seguro e organizado.

    Carolina Carvalho

    Tutorial muito limpo e direto. Subi toda a stack com Traefik e Let's Encrypt em menos de meia hora seguindo o guia.

    Felipe Oliveira

    Excelente explicação sobre multi-stage builds. Reduzi o tamanho da imagem da minha aplicação de 1.2GB para apenas 85MB! Em qual parte do artigo você recomenda focar para quem está começando em produção?

    Rodrigo Vieira - SRE Squad

    Estava tendo problemas com logs enchendo o disco no servidor. A configuração de log rotation com json-file resolveu de vez.

    Mariana Oliveira

    O Docker Compose com healthchecks configurados salvou meus deploys. O container agora só recebe tráfego quando está 100% pronto.

    Fernando Rodrigues

    Excelente conteúdo! Aprendi conceitos que não encontrava em outros lugares em português.

    Maria Rodrigues - Dev Team

    Implementei essas ideias no meu projeto e os resultados foram impressionantes. Obrigado pelo conhecimento compartilhado!

    João Gomes - Consultoria TI

    Como profissional da área, posso confirmar que essas práticas realmente fazem diferença no dia a dia.

    Maria Gomes

    Artigo muito bem escrito e explicativo! Já compartilhei com toda a equipe da empresa.

    ← Voltar para o blog