docker容器保存及镜像迁移

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: docker当前运行的容器进行保存为镜像,并且进行镜像迁移到其他服务器执行

先commit容器为镜像——>save镜像为tar——>docker load
docker commit c253d23725e8 centoszf:7
docker save centoszf:7 > /opt/centoszf.tar
docker export <container_id>这个命令操作的是容器,把这个容器导出为一个.tar文件
docker import <image_file.tar>命令导入该.tar文件,为一个镜像
docker load 只能操作docker save得到的.tar包,不能操作docker import得到的.tar包
1.查找正在运行的容器id
root@dev-ops:~# docker ps -a

2.导出容器
docker export 70c74ebbfac4 >ubuntu_sshd.tar
查看大小:
du -sh ubuntu_sshd.tar
353M ubuntu_sshd.tar
3.导入容器到其他服务器
然后把这个ubuntu_sshd.tar  传到别的服务器上
cat ubuntu_sshd.tar | sudo docker import - niubi:latest 
root@31-53:~# cat ubuntu_sshd.tar | sudo docker import - niubi:latest
8f2baf1b1cf479e366524007faad6d2e2671fc693716043a4812556bc8ac9204
root@31-53:~#
docker export  是当前的状态(容器),
docker save    是针对(镜像)images。
主要的区别是 save是可以回滚以前的配置。 export 只是当前的。
3.镜像如何生成
docker commit 命令可以把一个正在运行的容器变成一个新的镜像

像Docker官方的hello world例子一样,拉取一个叫busybox的镜像

sudo docker pull busybox

# 查看本地已经有哪些镜像
# 我们可以看到busybox
sudo docker images

# 现在让我们来修改下busybox镜像的容器
# 这次,我们创建一个文件夹
sudo docker run busybox mkdir /home/test

# 让我们再看看我们有哪些镜像了。
# 注意每条命令执行后容器都会停止
# 可以看到有一个busybox容器
sudo docker ps -a

# 现在,可以提交修改了。
# 提交后会看到一个新的镜像busybox-1
#  <CONTAINER ID> 是刚刚修改容器后得到的ID
sudo docker commit <CONTAINER ID> busybox-1

# 再看看我们有哪些镜像。
# 我们现在同时有busybox和busybox-1镜像了。
sudo docker images

# 我们执行以下命令,看看这两个镜像有什么不同
sudo docker run busybox [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'
sudo docker run busybox-1 [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'

现在,我们有两个不同的镜像了(busybox和busybox-1),还有一个通过修改busybox容器得来的容器(多了一个/home/test文件夹)。下面来看看,是如何持久化这些修改的
5.导出(Export)
Export命令用于持久化容器(不是镜像)。所以,我们就需要通过以下方法得到容器ID:

Export命令用于持久化容器(不是镜像)。所以,我们就需要通过以下方法得到容器ID:

sudo docker ps -a

接着执行导出:

sudo docker export > /home/export.tar
6.保存(Save)

Save命令用于持久化镜像(不是容器)。所以,我们就需要通过以下方法得到镜像名称:

sudo docker images

接着执行保存:

sudo docker save busybox-1 > /home/save.tar

docker   load  -i  /home/save.tar
最后的结果是一个2.8MB大小的Tar文件(比使用export命令稍微大些)
把所有的容器和镜像都删除:  

# 查看所有的容器
sudo docker ps -a

# 删除它们
sudo docker rm <CONTAINER ID>

# 查看所有的镜像
sudo docker images

# 删除它们
sudo docker rmi busybox-1
sudo docker rmi busybox

6.导入Import

导入export.tar文件

cat /home/export.tar | sudo docker import - busybox-1-export:latest

# 查看镜像
sudo docker images

# 检查是否导入成功,就是启动一个新容器,检查里面是否存在/home/test目录(是存在的)
sudo docker run busybox-1-export [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found

使用类似的步骤导入镜像:
  docker load < /home/save.tar

导入save.tar文件

docker load < /home/save.tar

# 查看镜像
sudo docker images

# 检查是否导入成功,就是启动一个新容器,检查里面是否存在/home/test目录(是存在的)
sudo docker run busybox-1 [ -d /home/test ] && echo 'Directory found' || echo 'Directory not found'

7 save和export区别
*注:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
docker save保存的是镜像(image),docker export保存的是容器(container);
docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

相关文章
|
16天前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
166 5
|
17天前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
105 6
kde
|
21天前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
209 4
|
2月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
558 110
|
3月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
329 57
|
24天前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
2月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
192 16