Docker教程:Docker镜像导出及迁移
http://blog.csdn.net/pipisorry/article/details/51330126
Docker目录分析
aufs containers graph init linkgraph.db repositories-aufstmp trust volumes
graph:保存的是下载镜像的元数据,包括json和layersize,其中json文件记录了相应的image id、依赖关系、创建时间和配置信息等。layersize为对应层的大小。进入graph文件会发现下面包含着多个文件夹,进入其中一个文件夹
root:/var/lib/docker/graph#cd 09694f91574ea3fca8558306c55abbbd47e01b8cb9ae782c66b9682a95c7f71e/
root:/var/lib/docker/graph/09694f91574ea3fca8558306c55abbbd47e01b8cb9ae782c66b9682a95c7f71e#ls
json layersize
可以看到json和layersize文件。
json文件内容中layersize可能显示为0,这一层为0,不表示镜像大小就是0。Graph存储镜像时,是分层存储的,graph目录下多出的文件夹其实都对应一个layer。这些layer都与我们的镜像名命名的layer有关联,关系就记录在json文件中。 从这个json文件中,可以看到起父镜像或者上一层镜像就是……,graph目录下也存储着这一层的信息,再往下看,可以看到层次关系。在graph这个目录里并没有找到我们想找到的镜像内容存放地。graph目录下只是一些镜像相关的信息数据。image应该包含一个类似linux的文件系统才对。
containers:这个下面记录的是容器相关的信息,每运行一个容器,就在这个目录下面生成一个容器Id对应的子目录。
init:保存的是docker init相关的信息。
tmp:是一个空目录,具体起什么作用还不清楚。
volumes:与docker的数据券相关。
aufs目录:mnt是aufs的挂载目录,diff是实际数据来源,也就是我们image实际存储的地方,包括只读层和可读写层,所有这些层最终都一起挂载到mmt所在的目录。layers下为每层依赖有关的描述文件。
在diff、mnt、layers下面有6个文件或子目录,但是从graph目录下看我们的image应该是4层,为什么会多出来2个呢。仔细观察多出来的来个文件或者子目录,会发现其名称和容器Id一致,且有一个包含init。其实,在容器启动之前,mnt和layers都是空目录,diff下面也只有graph目录下我们看到的镜像层对应的4个目录。在Docker利用image启动一个容器时,会在aufs下新建容器id对应的文件和子目录,同时在镜像的可读层执行新建一个可读写的layer。至于id-init文件或者子目录记录的都是与容器内环境相关的信息,与镜像无关。
既然我们现在已经知道了镜像实际是存储在diff目录下的,那么我们就看看diff目录下各个子目录中的内容。依照镜像的层次关系查看。最终我们看到linux一样的文件系统。已表示image确实是存储在diff目录下的。
综上,docker image最终是存储在在/var/lib/docker/aufs/diff中的,同时在graph中有有关进行的记录。在容器启动时,diff下的可读层image和新增的可读写层“容器Id”都将挂载到mmt目录下以容器id命名的子目录下。
Docker镜像导入导出
导出容器docker export
导出容器快照到本地文件
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7691a814370e ubuntu:14.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test
$ sudo docker export 7691a814370e > ubuntu.tar
导入容器快照docker import
从容器快照文件中再导入为镜像
$ cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB
通过指定 URL 或者某个目录来导入
$sudo docker import http://example.com/exampleimage.tgz example/imagerepo
Note: 用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
皮皮blog
Docker镜像迁移
Note: 如果迁移到windows下的磁盘如/media/pika/files/mine/env/docker会出现问题:
sudo service docker restart
stop: Unknown job: docker
start: Unknown job: docker
[Starting Docker as Daemon on Ubuntu]
在#下可以运行,但是docker run还是运行不了,会出问题!
解决:重装docker
[docker的概念及安装:Docker卸载和重装]
[ubuntu14.04 docker容器无法通过service管理,求解]
所以一般没必要的话就不要到处乱迁移了!
Docker的镜像以及一些数据都是在/var/lib/docker目录下,它占用的是Linux的系统分区,也就是下面的/dev/sda2,当有多个镜像时,空间可能不足,我们可以把docker的数据挂载到数据盘,如$DOCKER_DIR目录下。
$df -lhT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 3.9G 4.0K 3.9G 1% /dev
tmpfs tmpfs 781M 1.3M 780M 1% /run
/dev/sda2 ext4 148G 14G 127G 10% /
none tmpfs 4.0K 0 4.0K 0% /sys/fs/cgroup
none tmpfs 5.0M 0 5.0M 0% /run/lock
none tmpfs 3.9G 36M 3.8G 1% /run/shm
none tmpfs 100M 72K 100M 1% /run/user
/dev/sda6 fuseblk 110G 99G 11G 91% /media/pika/files
/dev/sda5 fuseblk 98G 78G 20G 80% /media/pika/softwares
1 停止docker #service docker stop
2 在数据分区中建立要挂载的目录 #mkdir -p $DOCKER_DIR
3 使用rsync工具同步 rsync -aXS /var/lib/docker/. $DOCKER_DIR,这可能需要花费的较长的时间,取决于/var/lib/docker的大小
4 修改fstab文件中把下面一行添加到fstab里,将新位置挂载到 /var/lib/docker
#vim /etc/fstab
...
$DOCKER_DIR /var/lib/docker none bind 0 0
5 重新挂载:mount –a
6 使用下面的命令检查一下
#df -h /var/lib/docker/
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 110G 100G 9.9G 92% /var/lib/docker
7 进入Container查看我们的空间
bash-4.1# df -lhT
8 宿主机中的分区大小信息:
root:/home/pika#df -lhT
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 3.9G 4.0K 3.9G 1% /dev
tmpfs tmpfs 781M 1.3M 780M 1% /run
/dev/sda2 ext4 148G 14G 127G 10% /
none tmpfs 4.0K 0 4.0K 0% /sys/fs/cgroup
none tmpfs 5.0M 0 5.0M 0% /run/lock
none tmpfs 3.9G 51M 3.8G 2% /run/shm
none tmpfs 100M 44K 100M 1% /run/user
/dev/sda6 fuseblk 110G 100G 9.9G 92% /media/pika/files
/dev/sda5 fuseblk 98G 78G 20G 80% /media/pika/softwares
from: http://blog.csdn.net/pipisorry/article/details/51330126
ref:
Docker教程:Docker镜像导出及迁移的更多相关文章
- docker教程——docker镜像打包上传
在开始使用URLOS进行docker应用开发之前,我们先来了解一下docker镜像的打包方法.首先,安装URLOS,安装完成之后,docker也随之安装到了主机里.执行以下命令安装URLOS: cur ...
- Docker教程:镜像构建和自动镜像构建dockerfile
http://blog.csdn.net/pipisorry/article/details/50805379 Docker透过Dockerfile来记录建立Container映象文件的每一个步骤,可 ...
- Docker系列-(2) 镜像制作与发布
上篇文章引入了Docker的基本原理和操作,本节文章主要介绍如何制作Docker镜像和发布. 镜像文件结构 Docker镜像的本质是一系列文件的集合,这些文件依次叠加,形成了最后的镜像文件,类似于下图 ...
- docker镜像导入导出备份迁移
导出: docker save -o centos.tar centos:latest #将centos:latest镜像导出为centos.tar文件 导入: docker load -i cent ...
- docker容器和镜像的导入和导出
镜像的保存 [root@wxtest1607 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat8 3.0 90457edaf6 ...
- Docker 学习之镜像导入导出及推送阿里云服务器(三)
在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像 ...
- Docker教程:docker的概念及安装
http://blog.csdn.net/pipisorry/article/details/50754385 Why docker 对于运维来说,Docker提供了一种可移植的标准化部署过程,使得规 ...
- docker 8 docker的镜像命令
先回顾一下容器.存储.镜像三者之间的关系. 我们知道docker的logo是一条大鲸鱼背上驮着集装箱.那我们对应到docker如下: 1)蓝色的大海里面------->宿主机系统比如我笔记本wi ...
- Docker容器与镜像管理
目录 容器管理 运行容器 容器的启停操作 容器导入导出 容器生命周期管理 容器资源限制 内存限制 CPU限制 io 限制 镜像管理 镜像命名规范 镜像基本操作 容器管理 运行容器 1.运行一个容器示例 ...
随机推荐
- win10下python环境变量设置
我用的是python_2.7.3.msi,从官网下载之后,一路按照默认进行安装. 安装之后配置环境变量的步骤如下: 1,点“我的电脑”,右键选“属性” 2,选择“高级系统设置”--->选“环境变 ...
- cocos2d-x-3.0beta2创建项目遇到“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9: ordinal not in range(128)”的问题
在Windows平台下 用cocos2d-x-3.0beta2版本下的create_project.py工具创建项目 但是遇到如下问题:UnicodeDecodeError: 'ascii' code ...
- windows平台下cocos2d-x-3.0beta2创建新项目
我目前使用的版本是cocos2d-x-3.0beta2 前提: 已安装了python2.7.3 已安装了VS2012 打开我的cocos2d-x-3.0beta2所在文件夹F:\Framework\c ...
- 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件
Unity开发中,常常会用到一些第三方组件.本文以实例介绍如何在热更新脚本中使用这些第三方组件. 首先说明几个基本步骤: 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更. 我们在脚本 ...
- C++标准库之stack
C++库以提供"模板"为主.所谓模板,是指不必预先制定类型的函数或类.我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来 ...
- WebService接口与HTTP接口的联系
1 WebService有很多协议,为什么HTTP比较流行? WebService是个很重型的规范,它的应用协议是SOAP(简单对象访问协议),它所依赖的下层通信方式不单单是HTTP,也有SOAP o ...
- combobox数据绑定
jquery easyui datagrid 可编辑行 combobox数据绑定问题 将带有参数的url地址赋值给变量,然后将变量赋值给url <script type="text/j ...
- Openlayers3学习心得(初识)
最近刚辞了原来的那家公司,准备新找一份工作.其中有个公司要求会Openlayers3.一看到这个要求,就知道公司业务涉及地图图表比较多. Openlayers本身是一个基于GIS地图相关的功能丰富的J ...
- Go 语言数组
Go 语言提供了数组类型的数据结构. 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 相对于去声明number0, number ...
- Go 语言条件语句
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句. 下图展示了程序语言中条件语句的结构: Go 语言提供 ...