> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://ajuda.streethosting.com.br/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Como instalar Docker no VPS com Docker Composer

# Como instalar Docker no VPS e subir seu primeiro app com Docker Compose

Docker mudou a forma como aplicações são distribuídas e operadas. Se você tem um VPS e quer padronizar seus deploys, este guia mostra como instalar, configurar e rodar seu primeiro projeto com Docker Compose.

## Pré-requisitos

* VPS com Ubuntu 24.04 LTS (ou 22.04).
* Acesso SSH com usuário sudo.
* Portas 80 e 443 liberadas no firewall.

## Passo 1: instalar Docker via repositório oficial

Nunca instale Docker do repositório padrão do Ubuntu (costuma estar desatualizado). Use o repositório oficial:

```bash
sudo apt update
sudo apt install ca-certificates curl -y
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

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

## Passo 2: verificar instalação

```bash
docker --version
docker compose version
sudo docker run hello-world
```

Se "Hello from Docker!" aparecer, a instalação está correta.

## Passo 3: permitir Docker sem sudo

```bash
sudo usermod -aG docker $USER
```

Faça logout e login novamente para que a mudança tenha efeito. Depois, teste:

```bash
docker ps
```

## Passo 4: primeiro projeto com Docker Compose

Crie uma pasta para o projeto:

```bash
mkdir -p ~/meu-projeto && cd ~/meu-projeto
```

Crie o arquivo `docker-compose.yml`:

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

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: meuapp
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: senha_segura_aqui
    volumes:
      - pgdata:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  pgdata:
```

Crie o conteúdo de teste:

```bash
mkdir html
echo "<h1>Funcionando no Docker!</h1>" > html/index.html
```

Suba os serviços:

```bash
docker compose up -d
```

Acesse `http://SEU_IP` no navegador. Se a mensagem aparecer, está tudo rodando.

## Boas práticas para Docker em VPS

### Sempre use `restart: unless-stopped`
Garante que os containers reiniciem automaticamente após reboot do servidor.

### Persista dados com volumes
Nunca armazene dados importantes dentro do container — use volumes Docker ou bind mounts.

### Não rode containers como root
Use a diretiva `user` no Compose ou crie usuários dentro da imagem.

### Versione o Compose no Git
O `docker-compose.yml` é sua infraestrutura como código. Versioná-lo no Git garante rastreabilidade e rollback.

### Use variáveis de ambiente protegidas
Nunca coloque senhas diretamente no Compose. Use arquivo `.env`:

```bash
# .env
POSTGRES_PASSWORD=senha_segura_aqui
```

E no Compose:
```yaml
environment:
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
```

## Comandos essenciais

| Comando | O que faz |
| ---- |
| `docker compose up -d` | Sobe serviços em background |
| `docker compose down` | Para e remove containers |
| `docker compose logs -f` | Acompanha logs em tempo real |
| `docker compose ps` | Lista containers ativos |
| `docker compose pull` | Baixa imagens atualizadas |
| `docker compose restart` | Reinicia serviços |

## Perguntas frequentes (FAQ)

### Docker Compose substitui Kubernetes?
Para VPS únicos e projetos de pequeno a médio porte, Docker Compose resolve perfeitamente. Kubernetes faz sentido para orquestração de múltiplos servidores e alta disponibilidade.

### Docker consome muitos recursos?
O overhead do Docker é mínimo — muito menor que VMs. Um container Nginx consome cerca de 5 MB de RAM.

### Como atualizar uma aplicação com Docker?
Atualize a imagem no Compose (`docker compose pull`), depois reinicie: `docker compose up -d`. O container antigo é substituído automaticamente.

## Próximos passos

* Configure o servidor do zero em [Como configurar VPS Ubuntu 24.04](/pt/article/como-configurar-vps-ubuntu-2404)
* Faça deploy de aplicação real em [Deploy Node.js em VPS](/pt/article/deploy-nodejs-em-vps)
* Publique APIs containerizadas em [Hospedar API com Docker](/pt/article/hospedar-api-com-docker-no-vps)
