Como usar o comando docker image save para exportar imagens

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker save para exportar imagens Docker em arquivos de arquivo tar. Esta é uma habilidade crucial para fazer backup de imagens, transferi-las entre sistemas sem um registro (registry), ou agrupar múltiplas imagens para distribuição.

Você explorará como salvar uma única imagem, salvar múltiplas imagens em um único arquivo, salvar uma variante de plataforma específica de uma imagem e comprimir o arquivo de imagem salvo usando gzip. Ao final deste laboratório, você estará proficiente no uso de docker save para várias tarefas de gerenciamento de imagens.

Salvar uma única imagem em um arquivo tar

Nesta etapa, você aprenderá como salvar uma única imagem Docker em um arquivo de arquivo tar. Isso é útil para fazer backup de imagens ou transferi-las para outro sistema sem uma conexão direta com o registro (registry) Docker.

Primeiro, vamos puxar uma imagem Docker simples que usaremos para este exemplo. Usaremos a imagem hello-world, que é pequena e adequada para esta demonstração.

docker pull hello-world

Você deve ver uma saída indicando que a imagem está sendo puxada e baixada.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Agora que temos a imagem hello-world localmente, podemos salvá-la em um arquivo tar usando o comando docker save. A sintaxe básica é docker save -o <output_file.tar> <image_name>.

Vamos salvar a imagem hello-world em um arquivo chamado hello-world.tar no seu diretório atual (~/project).

docker save -o hello-world.tar hello-world

Após executar este comando, um arquivo chamado hello-world.tar será criado no seu diretório ~/project. Este arquivo contém a imagem Docker hello-world.

Você pode verificar se o arquivo foi criado e verificar seu tamanho usando o comando ls -lh.

ls -lh hello-world.tar

Você deve ver uma saída semelhante a esta, mostrando o tamanho do arquivo:

-rw-r--r-- 1 labex labex ... hello-world.tar

Este arquivo tar pode agora ser transferido para outra máquina e carregado usando o comando docker load.

Salvar múltiplas imagens em um arquivo tar

Na etapa anterior, você aprendeu como salvar uma única imagem Docker. Nesta etapa, você aprenderá como salvar múltiplas imagens Docker em um único arquivo de arquivo tar. Isso é conveniente quando você precisa agrupar várias imagens para distribuição ou backup.

Primeiro, vamos puxar outra imagem Docker para ter mais de uma imagem para salvar. Vamos puxar a imagem alpine, que é uma distribuição Linux leve.

docker pull alpine

Você deve ver uma saída indicando que a imagem alpine está sendo puxada e baixada.

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Agora você tem as imagens hello-world e alpine localmente. Você pode verificar isso listando suas imagens locais:

docker images

A saída deve mostrar tanto hello-world quanto alpine na lista.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    ...            ...            ...
alpine        latest    ...            ...            ...

Para salvar múltiplas imagens em um único arquivo tar, você simplesmente lista os nomes das imagens após o nome do arquivo de saída no comando docker save. A sintaxe é docker save -o <output_file.tar> <image1_name> <image2_name> ....

Vamos salvar as imagens hello-world e alpine em um arquivo chamado images.tar no seu diretório ~/project.

docker save -o images.tar hello-world alpine

Após executar este comando, um arquivo chamado images.tar será criado no seu diretório ~/project. Este arquivo contém as imagens Docker hello-world e alpine.

Você pode verificar se o arquivo foi criado e verificar seu tamanho usando o comando ls -lh. O tamanho será maior que o arquivo hello-world.tar da etapa anterior porque ele contém duas imagens.

ls -lh images.tar

Você deve ver uma saída semelhante a esta:

-rw-r--r-- 1 labex labex ... images.tar

Para confirmar que ambas as imagens estão incluídas no arquivo, você pode listar o conteúdo do arquivo tar usando o comando tar -tf.

tar -tf images.tar

A saída deve mostrar arquivos relacionados a ambas as imagens, incluindo seus manifestos e dados de camada. Você deve ver entradas como hello-world/ e alpine/.

...
hello-world/
hello-world/manifest.json
...
alpine/
alpine/manifest.json
...

Este único arquivo tar pode agora ser usado para carregar ambas as imagens em outro sistema usando docker load.

Salvar uma variante de plataforma específica de uma imagem

Nesta etapa, você aprenderá como salvar uma variante de plataforma específica de uma imagem Docker. Imagens Docker podem ser construídas para diferentes arquiteturas (como amd64, arm64, etc.). Às vezes, você pode precisar salvar uma imagem especificamente construída para uma plataforma específica.

Por padrão, docker pull e docker save operam na variante da imagem que corresponde à arquitetura do seu sistema atual. No entanto, você pode especificar uma plataforma diferente usando a flag --platform.

Vamos puxar uma imagem que possui variantes para diferentes plataformas. A imagem alpine é um bom exemplo. Vamos puxar explicitamente a variante arm64 da imagem alpine, mesmo que sua VM LabEx provavelmente seja amd64.

docker pull --platform arm64 alpine

Você deve ver uma saída indicando que a variante arm64 da imagem alpine está sendo puxada.

arm64: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Agora, vamos salvar esta variante arm64 específica da imagem alpine em um arquivo tar. Usaremos a flag --platform novamente com o comando docker save.

Vamos salvar a variante arm64 de alpine em um arquivo chamado alpine_arm64.tar no seu diretório ~/project.

docker save --platform arm64 -o alpine_arm64.tar alpine

Após executar este comando, um arquivo chamado alpine_arm64.tar será criado no seu diretório ~/project. Este arquivo contém a variante arm64 da imagem Docker alpine.

Você pode verificar se o arquivo foi criado usando o comando ls -lh.

ls -lh alpine_arm64.tar

Você deve ver uma saída semelhante a esta:

-rw-r--r-- 1 labex labex ... alpine_arm64.tar

Para confirmar que a imagem salva é de fato a variante arm64, você pode inspecionar o conteúdo do arquivo tar. Embora verificar diretamente a arquitetura a partir do conteúdo do tar seja complexo, o fato de você ter usado --platform arm64 durante a operação de salvamento garante que a imagem salva seja para essa plataforma.

Isso demonstra como salvar explicitamente uma imagem para uma plataforma diferente da arquitetura do seu host.

Salvar uma imagem e compactá-la usando gzip

Nesta etapa final, você aprenderá como salvar uma imagem Docker em um arquivo tar e comprimi-la usando gzip simultaneamente. Esta é uma prática comum para reduzir o tamanho do arquivo da imagem salva, tornando-a mais fácil de armazenar e transferir.

O próprio comando docker save não possui uma flag de compressão integrada. No entanto, você pode obter a compressão canalizando a saída de docker save para um utilitário de compressão como gzip.

Vamos salvar a imagem alpine (que você deve ter puxado em uma etapa anterior) e comprimi-la usando gzip. A saída será redirecionada para um arquivo com a extensão .tar.gz.

A sintaxe envolve o encadeamento da saída: docker save <image_name> | gzip > <output_file.tar.gz>.

Vamos salvar a imagem alpine em um arquivo tar gzipped chamado alpine.tar.gz no seu diretório ~/project.

docker save alpine | gzip > alpine.tar.gz

Este comando salva a imagem alpine na saída padrão, canaliza essa saída para o comando gzip para compressão e, em seguida, redireciona a saída comprimida para o arquivo alpine.tar.gz.

Após executar este comando, um arquivo chamado alpine.tar.gz será criado no seu diretório ~/project.

Você pode verificar se o arquivo foi criado e verificar seu tamanho usando o comando ls -lh. Compare seu tamanho com o tamanho da imagem alpine descomprimida (que faz parte de images.tar ou seria se você a salvasse individualmente) para ver o efeito da compressão.

ls -lh alpine.tar.gz

Você deve ver uma saída semelhante a esta:

-rw-r--r-- 1 labex labex ... alpine.tar.gz

Para confirmar que o arquivo é um arquivo tar gzipped, você pode usar o comando file.

file alpine.tar.gz

A saída deve indicar que é um arquivo de dados compactado gzip.

alpine.tar.gz: gzip compressed data, ...

Você também pode listar o conteúdo do arquivo compactado usando tar -tfz. A flag z diz ao tar para descomprimir o arquivo usando gzip antes de listar o conteúdo.

tar -tfz alpine.tar.gz

Você deve ver o conteúdo da imagem alpine dentro do arquivo, semelhante a quando você listou o conteúdo de images.tar.

...
alpine/
alpine/manifest.json
...

Este método é eficiente para salvar e comprimir imagens em um único comando.

Resumo

Neste laboratório, você aprendeu como usar o comando docker save para exportar imagens Docker para arquivos tar. Você salvou com sucesso uma única imagem (hello-world) em um arquivo tar, demonstrando o uso básico do comando.

Além disso, você explorou a possibilidade de salvar várias imagens em um único arquivo, o que é útil para agrupar imagens. Você também aprendeu como salvar uma variante de plataforma específica de uma imagem e como comprimir o arquivo tar de saída usando gzip para reduzir o tamanho. Essas etapas cobriram as capacidades fundamentais do docker save para backup e transferência de imagens.