Popular blog tags

Docker – COPY Instruction

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

 

导出镜像

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

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

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 --input  /images/ubuntu_14.04.tar
 

 

#通过符号的方式来导入

 

docker load < /images/ubuntu_14.04.tar
 

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

docker images -a

 

二、使用 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
1
三、使用 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/
1
3. 在目标服务器上导入 tar 文件
在目标服务器上使用 docker import 命令从 tar 文件中导入镜像。

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

docker import /home/user/my_container.tar my_new_image:latest
1
四、总结

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 文件中导入为镜像。这种方法适用于需要在容器运行时进行导出和导入的情况。

 

主要用来制作基础镜像,比如我们从一个 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://blog.csdn.net/yimenglin/article/details/106017991

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