Popular blog tags

Docker – Docker export、import and commit、save、load

Published

In Docker, there are two ways to copy a file, namely, ADD and COPY.In this article, we will primarily focus on the COPY instruction of Docker.

In this article, we will discuss how to use the COPY Instruction to copy files and directories inside a Docker Container. To do so follow the below steps:

将docker pull 的镜像拷贝到其他电脑

 

要将一台电脑上的镜像复制到另一台电脑上使用,有两种方式

1. 使用 docker save 和 docker load 命令

2. 使用 Docker Registry

 

除了可以借助仓库外,可以直接将镜像保存成一个文件,再拷贝到另一台电脑上导入使用。

 

1. 使用 docker save 和 docker load 命令

列出本地所有的镜像

docker images
REPOSITORY                                 TAG       IMAGE ID       CREATED        SIZE
m.daocloud.io/docker.io/nodered/node-red   latest    55fc57012066   7 days ago     823MB
ghcr.io/esphome/esphome                    latest    b8209dc73177   2 months ago   733MB
ghcr.io/home-assistant/home-assistant      stable    031d355a2e52   4 months ago   2.43GB

 

docker images
REPOSITORY                TAG       IMAGE ID       CREATED        SIZE
rhasspy/wyoming-whisper   latest    7163929fa497   2 weeks ago    558MB
nodered/node-red          latest    489a122103aa   6 weeks ago    576MB
rhasspy/wyoming-piper     latest    9e90dce8ae81   8 months ago   180MB
rhasspy/rhasspy           latest    80cde42c6126   3 years ago    1.82GB

 

导出镜像

源服务器:将镜像保存为 tar 文件

docker save -o  filename.tar  #ID or #Name
docker save -o /path/to/image.tar image_name:tag

 

docker save ubuntu:14.04 > /images/ubuntu_14.04.tar
docker save -o /home/user/my_image.tar my_image:latest

wyoming-piper 

docker save -o ./wyoming-piper.tar 9e90dce8ae81

docker save -o ./wyoming-whisper.tar 7163929fa497

 

 

 docker save -o ./node-red.tar  489a122103aa

docker save 支持可以同时将多个镜像打包到一个文件中

docker save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)

 

使用 scp 或其他文件传输工具将保存的 tar 文件传输到目标服务器。

# scp /path/to/image.tar username@remote-server:/path/on/remote/server/

scp /home/user/my_image.tar user@remote-server:/home/user/

 

导入镜像(两种方式)

目标服务器上加载 tar 文件
在目标服务器上使用 docker load 命令加载传输过来的 tar 文件。


#导入镜像文件

docker load [options]

示例
docker load -i nginx.tar
或
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

 

docker load --input  /images/ubuntu_14.04.tar
 

 

#通过符号的方式来导入

 

docker load < /images/ubuntu_14.04.tar

docker load -i  ./wyoming-piper.tar
docker load -i  ./wyoming-whisper.tar

output

Loaded image ID: sha256:e64a72efd1ff3b13e07d9c117e38b65a5e0ad134906bbefc4c324397ed7306e9


 

(5)查看镜像是否导入成功
执行命令:docker images

docker images -a

ghcr.io/esphome/esphome                    latest    b8209dc73177   3 months ago   733MB
ghcr.io/home-assistant/home-assistant      stable    031d355a2e52   5 months ago   2.43GB
<none>                                     <none>    e64a72efd1ff   8 months ago   388MB

 

2、使用 Docker Registry


如果你有一个 Docker Registry,可以将镜像推送到 Registry,然后在另一台服务器上拉取镜像。这种方法适用于有内部或外部 Docker Registry 的情况下。

1. 将镜像推送到 Docker Registry
在源服务器上,将镜像推送到 Docker Registry。首先需要给镜像打标签,使其指向 Registry。

docker tag image_name:tag registry_url/image_name:tag
1
然后,推送镜像到 Docker Registry。

docker push registry_url/image_name:tag
1
示例:

docker tag my_image:latest myregistry.com/my_image:latest
docker push myregistry.com/my_image:latest
1
2
2. 在目标服务器上拉取镜像
在目标服务器上,从 Docker Registry 拉取镜像。

docker pull registry_url/image_name:tag
1
示例:

docker pull myregistry.com/my_image:latest

3、使用 docker export 和 docker import 命令


docker export 和 docker import 命令用于将运行中的容器导出为 tar 文件,并从 tar 文件中导入为镜像。这种方法适用于需要在容器运行时进行导出和导入的情况。

1. 导出运行中的容器
在源服务器上,使用 docker export 命令导出运行中的容器。

docker export container_id -o /path/to/container.tar
1
示例:

docker export my_container -o /home/user/my_container.tar
1
2. 传输 tar 文件到目标服务器
使用 scp 或其他文件传输工具将导出的 tar 文件传输到目标服务器。

scp /path/to/container.tar username@remote-server:/path/on/remote/server/
1
示例:

scp /home/user/my_container.tar user@remote-server:/home/user/

3. 在目标服务器上导入 tar 文件
在目标服务器上使用 docker import 命令从 tar 文件中导入镜像。

docker import xxx.tar newname:tag

docker import /path/on/remote/server/container.tar new_image_name:tag



示例:

docker import wyoming-whisper.tar wyoming-whisper

 

docker images
REPOSITORY                TAG       IMAGE ID       CREATED         SIZE
wyoming-whisper           latest    3d49bb47733b   8 seconds ago   178MB
ghcr.io/esphome/esphome   latest    13cc1ca1d6e6   8 days ago      643MB
ghcr.io/esphome/esphome   stable    13cc1ca1d6e6   8 days ago      643MB

4.docker commit

 

docker commit [容器名称|ID] 生成新的镜像名字

容器备份迁移案例

提交容器生成新的镜像

使用此方法,数据卷不会被迁移,但它会保留在容器内创建的应用程序的数据

docker commit 9f708f0c6077 movedwhisper

 

 docker images
REPOSITORY                     TAG       IMAGE ID       CREATED         SIZE
movedwhisper                   latest    9455da0dfada   9 seconds ago   564MB

将镜像保存成一个tar压缩包

docker save movedwhisper > movedwhisper.tar

 ls -l
total 742496
-rw-r--r-- 1 root root 575980544 Jan 25 13:12 movedwhisper.tar
drwx------ 4 root root      4096 Jan  4 02:28 snap
-rw-r--r-- 1 root root 184322048 Jan 25 12:14 wyoming-whisper.tar

将tar压缩包复制到另一台主机

 

scp movedwhisper.tar [email protected]:/root/test

 

在另一台主机上加载镜像的tar压缩包

docker load -i movedwhisper.tar

6a4fdc7ff1bf: Loading layer [==================================================>]  84.21MB/84.21MB
5f70bf18a086: Loading layer [==================================================>]  1.024kB/1.024kB
64cc77dff041: Loading layer [==================================================>]  489.2MB/489.2MB
0db3851544e3: Loading layer [==================================================>]  2.048kB/2.048kB
c899438e7546: Loading layer [==================================================>]  2.491MB/2.491MB
Loaded image: movedwhisper:latest

 

root@debian:~# docker images
REPOSITORY                TAG       IMAGE ID       CREATED             SIZE
movedwhisper              latest    9455da0dfada   49 minutes ago      564MB
wyoming-whisper           latest    3d49bb47733b   About an hour ago   178MB
ghcr.io/esphome/esphome   latest    13cc1ca1d6e6   8 days ago          643MB
ghcr.io/esphome/esphome   stable    13cc1ca1d6e6   8 days ago          643MB

 

docker run -it -p 10300:10300 -v /path/to/local/data:/data 9455da0dfada      --model medium-int8 --language en 


四、总结

docker save 的应用场景

docker save 和 docker load 是 Docker 提供的两个命令,用于将镜像保存为 tar 文件和从 tar 文件中加载镜像。


如果我们的应用是使用 docker-compose.yml 编排的多个镜像组合,但我们要部署的客户服务器并不能连外网。这时就可以使用 docker save 将用到的镜像打个包,然后拷贝到客户服务器上使用 docker load 载入。

是否可以同时将多个镜像打包到一个文件中
docker export 不支持
docker save 支持

是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)


docker load 不能对载入的镜像重命名

 

Docker Registry,可以将镜像推送到 Registry,然后在另一台服务器上拉取镜像。这种方法适用于有内部或外部 Docker Registry 的情况下。

 

docker export 和 docker import 命令的应用场景

docker export 和 docker import 命令用于将运行中的容器导出为 tar 文件,并从 tar 文件中导入为镜像。这种方法适用于需要在容器运行时进行导出和导入的情况。

docker export的包会比save的包要小,原因是save的是一个分层的文件系统,export导出的只是一个linux系统的文件目录。

主要用来制作基础镜像,比如我们从一个 ubuntu 镜像启动一个容器,然后安装一些软件和进行一些设置后,使用 docker export 保存为一个基础镜像。然后,把这个镜像分发给其他人使用,比如作为基础的开发环境。

docker import 可以为镜像指定新名称

是否可以同时将多个镜像打包到一个文件中
docker export 不支持
docker save 支持

是否包含镜像历史
export 导出(import 导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史记录和元数据信息(即仅保存容器当时的快照状态),所以无法进行回滚操作。
而 save 保存(load 加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)

通过本文介绍的方法,你可以选择适合自己需求的方式将 Docker 镜像移动或复制到另一台服务器。无论是使用 docker save 和 docker load,Docker Registry,还是 docker export 和 docker import,都能帮助你实现镜像的迁移和管理

                        
原文链接:

https://cloud.tencent.com/developer/article/2027894

https://blog.csdn.net/yimenglin/article/details/106017991

https://blog.csdn.net/qq_41973632/article/details/140093227

Docker容器迁移到其他服务器的5种方法

https://blog.csdn.net/u014389734/article/details/115265963