Skip to main content

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 remoto
  • servidor: 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 .tar apó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