民工心事 发表于 2024-7-10 22:54:36

Linux 情况下Docker将镜像打包导出到本地,上传至内网服务器(八)

背景

docker将镜像导出到本地,上传至内网服务器上
背景:在企业中往往出现了内网不能和外网相通,不能使用docker pull命令来拉取镜像,这个时间我们就可以考虑在有所需镜像的服务器上导出镜像,再将其上传到内网服务器上。
有两种方法,一种是通过容器,一种是通过镜像,其实本质是一样的,容器的实质就是镜像
参考文章一
本文重要报告的是第二种通过镜像的方式进行导出和上传
   docker save用于导出镜像到文件,包罗镜像元数据和汗青信息;(个人推荐这种)
docker export用于将当前容器状态导出至文件,雷同快照,以是不包罗元数据及汗青信息,体积更小,此外从容器快照导入时也可以重新指定标签和元数据信息;
1. docker容器打包成镜像和压缩

(1)起首查看镜像所在的容器,获取到容器id

docker ps
-a
https://img-blog.csdnimg.cn/bf024e59cc5f4f378d14b8fff6f896ad.png
(2)将容器生存成镜像

sudo docker commit -a 'yjw' e007d8b7e1b7 my_projectv2:v2
   sudo:以管理员权限运行命令,通常用于在 Linux 系统中运行需要管理员权限的命令。
docker:Docker 命令行工具。
commit:提交 Docker 镜像的命令。
-a:指定镜像的作者,这里是作者的名字: yjw。
e007d8b7e1b7:docker的容器id。
my_projectv2:v2:要新创建的镜像的名称和版本号,这里是新建一个名为 my_projectv2:v2的镜像,版本号为 v2。
因此,这条命令将创建一个新的 Docker 镜像,名为 my_projectv2:v2,并将它提交到 Docker 堆栈中。
https://img-blog.csdnimg.cn/ca7473176d034340ab701f14bdd5e895.png
(3)将镜像打包

docker save -o my_projectv2.tar my_projectv2
https://img-blog.csdnimg.cn/9c0e4d274c0544409dfd42487acc0457.png
   docker:Docker 命令行工具。
save:将 Docker 镜像生存为文件的命令。
~
-o : 参数表示指定输出文件的路径和名称,这个路径是相对于当前工作目录的路径。如果当前工作目录是 /etc/docker,那么 my_projectv2.tar 文件会被生存到 /etc/docker/my_projectv2.tar , 如上图所示。
~
my_projectv2:v2 :要生存的 Docker 镜像的名称和版本号,这里是一个名为 my_projectv2的镜像,版本号为 v2。
(留意:我没加版本号也执行了,是因为我镜像名称是唯一的,不存在雷同的版本号,因此命令没有加:v2不会出错)
因此,这条命令将把名为 my_projectv2、版本号为 v2 的 Docker 镜像生存为一个名为 my_projectv2.tar 的文件。
(4)将镜像包压缩

sudo tar -zcvf my_projectv2.tar.gz my_projectv2.tar
https://img-blog.csdnimg.cn/00f2d51f61d74329b61b07d78cb8fbde.png
https://img-blog.csdnimg.cn/2b23379439934c959b9278bfcfd6d206.png
还有一种容器的打包和压缩一步到位的方法:
docker save my_projectv2:v2 | gzip > my_projectv2.tar.gz
2. docker镜像压缩包解压及镜像载入 (移动到自己想要运行的服务器)

(1)压缩包解压

通过finalshell大概其它方式,把前面步调压缩的镜像压缩包给上传到内网服务器指令目录
(留意:我这里只是模仿步调。有什么出入请指正)
tar -zxvf mask_detection_v5.tar.gz

得到.tar格式的镜像包
https://img-blog.csdnimg.cn/4a982580b444484da39dfe1921d2636b.png
(2)镜像载入

sudo docker load -i my_projectv2.tar
https://img-blog.csdnimg.cn/a76ef10f257544be95cc8bc3b826858a.png
载入后利用 (比如想要修改加载的镜像,可以参阅反面的一、二、…五等步调)
sudo docker images


查看已存在的镜像。
(3)启动镜像-运行项目

docker run -d -it -p 8888:8888 --restart always --name my_dockerv2 my_projectv2:v2

或者 (-p 8888:8888 端口号的前后书写顺序没有关系,但是建议使用第一个 )
docker run -d -it --restart always --name my_dockerv2 -p 8888:8888 my_projectv2:v2
https://img-blog.csdnimg.cn/f0e5c8b4f5f74540a12fff0e9a21c34e.png
(4)启动镜像-项目乐成

https://img-blog.csdnimg.cn/6a15d5fce52f441eab1dd343cde52842.png
(5)docker制止容器(制止项目)

① 先查看所有正在运行中的容器

docker ps
https://img-blog.csdnimg.cn/8b8e5059f072462889034e623161501a.png
② docker stop 容器id 制止容器

docker stop 2baed9f6f723
https://img-blog.csdnimg.cn/19be066b79c04baeb6416909b2b35111.png
PS:某些情况下需要强制关闭,可以使用 docker kill 容器ID
(6)再次启动容器

docker start my_dockerv2
留意:执行启动命令后,后台运行项目情况需要花时间,因此使用IP地点访问时需要花时间等待才气够访问乐成
https://img-blog.csdnimg.cn/28e024a2c65e40a5a21ff5fd24003e20.png
PS:因为docker run 属于创建新容器并运行,我只是启动已有的容器,故不使用docker run xxx。
而 docker start 命令用于启动一个已经存在的容器
参考文章二
———————————————————————————————————————————————————
一、加载镜像(已有)

在镜像目录下打开linux终端,输入如下命令:
sudo docker load -i 镜像文件名.tar
二、运行镜像(已有)

镜像加载好之后,使用如下命令查看对应的镜像id:
sudo docker images


然后根据镜像id将镜像运行在容器中:
docker run -it 要运行的镜像id /bin/bash
三、对已有镜像进行修改

容器运行起来之后,就可以对镜像进行相应的修改了。
查看已安装的包:
pip list
安装新的包:
pip install 包名
卸载已安装的包:
pip uninstall 包名
修改完毕后,使用如下命令退出容器:
exit
四、将容器打包成新的镜像

起首查看镜像所在的容器,获取到容器id:
docker ps
-a
然后将容器生存为新的镜像:
docker commit 容器id 要保存的镜像名称
五、将新的镜像生存为tar包

起首获取到新的镜像id:
docker images
然后将新镜像生存为tar包:
docker save 新镜像id -o 要保存的tar包名称.tar
生存为tar包之后,就可以加载使用了。
———————————————————————————————————————————————————
参考文章三

上一篇:
Linux 情况下Docker摆设项目(七)
下一篇:
end
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Linux 情况下Docker将镜像打包导出到本地,上传至内网服务器(八)