Envio Manual de Imagem Docker via SSH | Artigo | Docker
- Envio Manual de Imagem Docker via SSH | Artigo | Docker
Visão Geral
O envio manual de imagens Docker consiste em:
- Construir a imagem localmente
- Exportar a imagem para um arquivo (
.tar) - Transferir via SSH (ex:
scp) - Importar a imagem no servidor
- Utilizar a imagem no
docker-compose
Essa abordagem trata a imagem como um artefato binário, sem uso de registry.
Fluxo Completo
[ Build local ]
↓
[ docker save ]
↓
[ SCP/SSH ]
↓
[ docker load ]
↓
[ docker-compose up ]
1. Build da Imagem
docker build -t minha-app:latest .
- Define o nome da imagem (
minha-app) - Usa a tag
latest(pode versionar, ex:1.0.0)
2. Exportar a Imagem
docker save minha-app:latest -o minha-app.tar
Com compressão (recomendado)
docker save minha-app:latest | gzip > minha-app.tar.gz
- Reduz tamanho para transferência
- Ideal para redes mais lentas
3. Enviar via SSH (SCP)
scp minha-app.tar.gz user@servidor:/tmp/
Parâmetros
user: usuário remotoservidor: IP ou domínio/tmp/: diretório de destino
4. Importar no Servidor
Conecte no servidor:
ssh user@servidor
Se estiver compactado
gunzip -c /tmp/minha-app.tar.gz | docker load
Se não estiver compactado
docker load -i /tmp/minha-app.tar
5. Verificar Imagem
docker images
Saída esperada:
REPOSITORY TAG IMAGE ID
minha-app latest abc123
6. Uso com Docker Compose
services:
app:
image: minha-app:latest
ports:
- "8080:80"
Subir aplicação:
docker compose up -d
Versionamento de Imagens
Evite usar apenas latest.
docker build -t minha-app:1.0.0 .
docker save minha-app:1.0.0 -o minha-app.tar
No compose:
image: minha-app:1.0.0
Boas Práticas
- Use compressão (
gzip) para reduzir tempo de envio - Utilize versionamento de tags
- Limpe arquivos
.tarapós importação - Evite sobrescrever imagens em produção sem controle
- Automatize via script sempre que possível
Script de Automação (Opcional)
#!/bin/bash
IMAGE_NAME="minha-app:1.0.0"
FILE_NAME="minha-app.tar.gz"
REMOTE="user@servidor"
docker build -t $IMAGE_NAME .
docker save $IMAGE_NAME | gzip > $FILE_NAME
scp $FILE_NAME $REMOTE:/tmp/
ssh $REMOTE "gunzip -c /tmp/$FILE_NAME | docker load"
Limpeza no Servidor
rm /tmp/minha-app.tar.gz
Opcionalmente:
docker image prune -f
Limitações da Abordagem
- Processo manual
- Sem controle central de versões
- Não escalável para múltiplos servidores
- Sem integração nativa com CI/CD
- Risco de inconsistência entre ambientes