docker容器保存及镜像迁移

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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可以为镜像指定新名称。

相关文章
|
8天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
35 2
|
6天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
7天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
8天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
8天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
8天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
10天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
10天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
18天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
14天前
|
关系型数据库 MySQL API