Estou brincando com o Docker por alguns dias e já fiz algumas imagens (o que foi muito divertido!). Agora eu quero continuar meu trabalho e cheguei aos comandos save
e export
, mas não os entendo completamente.
Qual é a diferença entre save
e export
no Docker?
Respostas:
A resposta curta é:
save
irá buscar uma imagem: para uma VM ou servidor físico, essa seria a imagem ou disco .ISO da instalação. O sistema operacional base.Ele compacta as camadas e os metadados de toda a cadeia necessária para criar a imagem. Você pode carregar essa cadeia de imagens "salvas" em outra instância do docker e criar contêineres a partir dessas imagens.
export
buscará o contêiner inteiro: como um instantâneo de uma VM comum. Salva o sistema operacional, é claro, mas também qualquer alteração feita, qualquer arquivo de dados gravado durante a vida útil do contêiner. Este é mais como um backup tradicional.Ele fornecerá um arquivo .tar simples que contém o sistema de arquivos do seu contêiner.
Editar: como minha explicação ainda pode gerar confusão, acho importante entender que um desses comandos funciona com contêineres, enquanto o outro funciona com imagens.
Uma imagem deve ser considerada como 'inoperante' ou imutável, iniciar 0 ou 1000 contêineres a partir dela não alterará um único byte. Foi por isso que fiz uma comparação com uma ISO de instalação do sistema anteriormente. Talvez seja ainda mais perto de um CD ao vivo.
Um contêiner "inicializa" a imagem e adiciona uma camada adicional sobre ela. Essa camada armazena qualquer alteração no contêiner (arquivos criados / alterados / removidos ...).
fonte
docker commit
). Eu posso entãosave
a imagem. Ou eu possoexport
o recipiente diretamente. E os dois lados (save
a imagem eexport
o contêiner) terão o mesmo resultado?export
arquivo lhe dará um arquivo .tar simples contendo seu sistema de arquivos do contêiner.save
empacotará as camadas e os metadados de toda a cadeia necessária para criar a imagem. Você pode carregar esta "saved
" cadeia de imagens em outra instância do docker e criar contêineres a partir dessas imagens.export
função.export
todos os metadados serão perdidos, portanto, caso você tente executar o contêiner com essa imagem, você mencionará o CMD e outros metdados.save
funcionou bem para mim, mas de exportação foi dorExistem duas principais diferenças entre
save
eexport
comandos.save
O comando salva a imagem inteira com histórico e metadados, masexport
exporta apenas a estrutura de arquivos (sem histórico e metadados). Portanto, o arquivo tar exportado será menor que o arquivo salvo.Quando você usa o sistema de arquivos exportado para a criação de uma nova imagem, então esta nova imagem não conterá qualquer
USER
,EXPOSE
,RUN
etc. comandos do seu Dockerfile. Somente a estrutura do arquivo será transferida. Portanto, quando você estiver usando as palavras-chave mencionadas no Dockerfile, não poderá usar o comando export para transferir imagens para outra máquina - sempre use o comando save.fonte
A imagem exportada não terá nenhuma informação de camada ou histórico salva, portanto será menor e você não poderá reverter.
A imagem salva terá informações de camada e histórico, muito maiores.
Se você der isso a um cliente, o Q é: você deseja manter essas camadas ou não?
fonte
Tecnicamente, salvar / carregar funciona com repositórios que podem ser uma ou mais imagens, também conhecidas como camadas. Uma imagem é uma única camada dentro de um repositório. Finalmente, um contêiner é uma imagem instanciada (em execução ou não).
fonte
Docker save Produz um repositório de arquivos tar que contém todas as camadas pai e todas as tags + versões ou repositório especificado: tag, para cada argumento fornecido a partir da imagem .
Exportação do Docker Produz o arquivo especificado (pode ser tar ou tgz) com conteúdo plano, sem o conteúdo dos volumes especificados do Container .
o docker save precisa usar na imagem do docker, enquanto a exportação do docker precisa usar no contêiner (assim como a imagem em execução)
Salvar uso
uso de exportação
fonte
export
:container (filesystem)
->image tar
.import
:exported image tar
->image
. Apenas uma camada.save
:image
->image tar
.load
:saved image tar
->image
. Todas as camadas serão recuperadas.De Docker em ação, segunda edição, pág.
fonte