tutorial - docker windows




Como copiar imagens do Docker de um host para outro sem usar um repositório (10)

Como faço para transferir uma imagem do Docker de uma máquina para outra sem usar um repositório, não importa privado ou público?

Eu estou acostumado a jogar e criar minha própria imagem no VirtualBox, e quando terminar, tento implantar em outras máquinas para ter uso real.

Como é baseado em imagem própria (como Red Hat Linux), não pode ser recriado a partir de um Dockerfile.

Existem comandos simples que posso usar? Ou outra solução?

Parece que salvar / exportar pode atingir um propósito semelhante, consulte Qual é a diferença entre salvar e exportar no Docker? e eu prefiro o comando save no meu caso.


É assim que você pode mover as imagens do Docker entre dois registros / repositórios remotos. Ele funciona com o Docker versão 1.10.2, compilação c3959b1.

docker pull source-registry.com/myProject/myImageName:1.0.0
docker tag source-registry.com/myProject/myImageName:1.0.0 target-remote-registry.com/myProject/myImageName:1.0.0
docker push target-remote-registry.com/myProject/myImageName:1.0.0

É um método útil se você quiser migrar suas imagens para um serviço AWS ECS / ECR.


Ao usar o docker-machine, você pode fazer o docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load docker $(docker-machine config <mach1>) save <image> | docker $(docker-machine config <mach2>) load para copiar imagens entre as máquinas mach1 e mach2 .

E, claro, você também pode colocar o pv no meio para obter um indicador de progresso:

docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load docker $(docker-machine config <mach1>) save <image> | pv | docker $(docker-machine config <mach2>) load .

Você também pode omitir uma das sub-shells de docker-machine config do docker-machine config , para usar o docker-host padrão atual.

docker save <image> | docker $(docker-machine config <mach>) load docker save <image> | docker $(docker-machine config <mach>) load para copiar a imagem do docker-host atual para mach

ou

docker $(docker-machine config <mach>) save <image> | docker load docker $(docker-machine config <mach>) save <image> | docker load para copiar do mach para o docker-host atual.


Eu quero mover todas as imagens com tags.

```
OUT=$(docker images --format '{{.Repository}}:{{.Tag}}')
OUTPUT=($OUT)
docker save $(echo "${OUTPUT[*]}") -o /dir/images.tar
``` 

Explicação:

Primeiro OUT obtém todas as tags, mas separadas por novas linhas. Segundo OUTPUT obtém todas as tags em uma matriz. O terceiro $(echo "${OUTPUT[*]}") coloca todas as tags para um único comando docker save para que todas as imagens estejam em um único tar.

Além disso, isso pode ser compactado usando o gzip. No alvo, execute:

tar xvf images.tar.gz -O | docker load

Opção -O para tar coloca conteúdo em stdin que pode ser capturado pela docker load .


Eu suponho que você precisa salvar o couchdb-cartridge que tem um id de imagem de 7ebc8510bc2c:

[email protected]:~$ docker images
REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
couchdb-cartridge                      latest              7ebc8510bc2c        17 hours ago        1.102 GB
192.168.57.30:5042/couchdb-cartridge   latest              7ebc8510bc2c        17 hours ago        1.102 GB
ubuntu                                 14.04               53bf7a53e890        3 days ago          221.3 MB

Salve a imagem archiveName em um arquivo tar. Vou usar o /media/sf_docker_vm/ para salvar a imagem.

[email protected]:~$ docker save imageID > /media/sf_docker_vm/archiveName.tar

Copie o arquivo archiveName.tar para sua nova instância do Docker usando qualquer método que funcione em seu ambiente, por exemplo, FTP , SCP , etc.

Execute o comando docker load em sua nova instância do Docker e especifique o local do arquivo tar da imagem.

[email protected]:~$ docker load < /media/sf_docker_vm/archiveName.tar

Por fim, execute o comando docker images para verificar se a imagem está disponível agora.

[email protected]:~$ docker images
REPOSITORY                             TAG        IMAGE ID         CREATED             VIRTUAL SIZE
couchdb-cartridge                      latest     7ebc8510bc2c     17 hours ago        1.102 GB
192.168.57.30:5042/couchdb-cartridge   latest     bc8510bc2c       17 hours ago        1.102 GB
ubuntu                                 14.04      4d2eab1c0b9a     3 days ago          221.3 MB

Por favor, encontre este post detalhado .


Para transferir imagens da sua instalação local do Docker para uma VM minikube:

docker save <image> | (eval $(minikube docker-env) && docker load)

Para uma exportação achatada do sistema de arquivos de um contêiner, use;

docker export CONTAINER_ID > my_container.tar

Use cat my_container.tar | docker import - cat my_container.tar | docker import - para importar a imagem mencionada.


Todas as outras respostas são muito úteis. Acabei de passar pelo mesmo problema e descobrir uma maneira fácil com a docker machine scp .

Desde o Docker Machine v0.3.0, o scp foi introduzido para copiar arquivos de uma máquina Docker para outra. Isso é muito conveniente se você quiser copiar um arquivo do seu computador local para uma máquina remota do Docker, como o AWS EC2 ou o Digital Ocean, porque o Docker Machine está cuidando das credenciais do SSH para você.

  1. Salve suas imagens usando o docker save como:

    docker save -o docker-images.tar app-web
    
  2. Copie imagens usando o docker-machine scp

    docker-machine scp ./docker-images.tar remote-machine:/home/ubuntu
    

Suponha que sua máquina remota do Docker seja uma máquina remote-machine e o diretório que você deseja que o arquivo tar seja /home/ubuntu .

  1. Carregar a imagem do Docker

    docker-machine ssh remote-machine sudo docker load -i docker-images.tar
    

Transferindo uma imagem do Docker via SSH, bzipando o conteúdo em tempo real:

docker save <image> | bzip2 | \
     ssh [email protected] 'bunzip2 | docker load'

Também é uma boa idéia colocar o pv no meio do tubo para ver como a transferência está indo:

docker save <image> | bzip2 | pv | \
     ssh [email protected] 'bunzip2 | docker load'

(Mais informações sobre pv : home page , man page ).


Você precisará salvar a imagem do Docker como um arquivo tar:

docker save -o <path for generated tar file> <image name>

Em seguida, copie sua imagem para um novo sistema com ferramentas regulares de transferência de arquivos, como cp ou scp . Depois disso, você terá que carregar a imagem no Docker:

docker load -i <path to image tar file>

PS: Você pode precisar sudo todos os comandos.

EDIT: você deve adicionar nome do arquivo (não apenas diretório) com -o, por exemplo:

docker save -o c:/myfile.tar centos:16

docker-push-ssh é um utilitário de linha de comando apenas para esse cenário.

Ele configura um registro privado temporário do Docker no servidor, estabelece um túnel SSH a partir de seu host local, envia sua imagem e depois limpa a si própria.

O benefício dessa abordagem sobre o docker save (no momento em que escrevo a maioria das respostas está usando esse método) é que apenas as novas camadas são enviadas ao servidor, resultando em um upload MUITO mais rápido.

Muitas vezes, usando um registro intermediário como dockerhub é indesejável e complicado.

https://github.com/coherenceapi/docker-push-ssh

Instalar:

pip install docker-push-ssh

Exemplo:

docker-push-ssh -i ~/my_ssh_key [email protected] my-docker-image

A maior advertência é que você precisa adicionar manualmente seu localhost à configuração insecure_registries do Docker. Execute a ferramenta uma vez e isso lhe dará um erro informativo:

Error Pushing Image: Ensure localhost:5000 is added to your insecure registries.
More Details (OS X): https://.com/questions/32808215/where-to-set-the-insecure-registry-flag-on-mac-os

Onde devo definir o sinalizador '--insecure-registry' no Mac OS?





docker