Docker教程:Docker镜像导出及迁移

http://blog.csdn.net/pipisorry/article/details/51330126

Docker目录分析

安装docker时,默认的安装位置是/var/lib/docker。

$sudo ls /var/lib/docker/

aufs  containers  graph  init  linkgraph.db  repositories-aufstmp  trust  volumes

repositories-aufs:记录了镜像名称以及对应的Id的json文件

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 image存储在哪里,以什么形式存储]

皮皮blog

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镜像迁移

下面的$DOCKER_DIR代表/data/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

[修改Docker镜像的存储位置 ]

from: http://blog.csdn.net/pipisorry/article/details/51330126

ref:

时间: 2024-11-03 05:34:27

Docker教程:Docker镜像导出及迁移的相关文章

docker教程——docker镜像打包上传

在开始使用URLOS进行docker应用开发之前,我们先来了解一下docker镜像的打包方法.首先,安装URLOS,安装完成之后,docker也随之安装到了主机里.执行以下命令安装URLOS: curl -SO https://www.urlos.com/install && chmod 544 install && ./install 简单制作一个属于自己的nginx镜像 基本流程:1.从docker云端拉取一个ubuntu-16.04的镜像:2.更新这个镜像,并安装ng

Docker教程系列八:Docker备份与迁移(完)

1容器保存为镜像 我们可以通过以下命令将容器保存为镜像 docker commit nginx mynginx nginx是容器名称 mynginx是新的镜像名称 此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器 2镜像备份 docker  save -o mynginx.tar mynginx -o 输出到的文件 执行后,运行ls命令即可看到打成的tar包 3镜像恢复与迁移 首先我们先删除掉mynginx镜像 然后执行此命令进行恢复 docker load -i myng

Docker 学习之镜像导入导出及推送阿里云服务器(三)

在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像文件导入导出 1.1 查看当前已有的镜像文件 docker images 1.2 随意运行一个容器 docker run -d -p 8080:8080 --name tomcat tomcat 1.3 通过容器来的到一个新的镜像 # 根据正在运行的容器创建一个新的镜像docker commit t

Docker教程系列二:Docker镜像操作

1什么是Docker镜像 Docker镜像是由文件系统叠加而成(是一种文件的存储形式).最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统.Docker用户几乎永远不会和引导系统有什么交互.实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用.Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像. 2列出镜像 列出docker下的所有镜像:docker images l  REPOSI

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,

Docker安装及镜像管理

1.docker简介 容器虚拟化,比传统虚拟化轻量 2013年出现,发展非常迅猛 Redhat在6.5版本开始支持docker 使用GO语言开发,基于apache2.0协议 开源软件,项目代码在github维护 2.容器虚拟化和传统虚拟化比较 3.Docker的优势 启动非常快,秒级实现 资源利用率很高,一台机器可以跑上千个docker容器 更快的交付和部署,一次创建和配置后,可以在任意 地方运行 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率 易迁移,平台依赖性不强

docker一: 镜像与容器管理

Docker的优势: 1.启动非常快,秒级实现. 2.资源利用率高,在机器中以进程的方式存在,一台机器可以跑上百个docker容器. 3.创建和配置后可以在任意地方运行docker,只需将其上传到docker仓库,用到时拉下来就可以 4.易迁移,平台依赖性不强. Docker的主要概念: 1.镜像:只读模板,类似于安装系统用到的iso文件,对于镜像我们可以自定义,比如在一台机器上安装好lnmp环境,然后打包成为一个镜像,那么后期只需要从仓库中把这个镜像拉下来就可以直接使用lnmp环境了,非常方便

Docker架构、镜像及容器的基本操作

Docker架构.镜像及容器的基本操作 前言引导 Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机,诞生于2013年.Docker的设计宗旨:Build.Ship and Run Any.Anywhere,即通过对应用组件的封装.发布.部署.运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的. Docker概述 如上图所示,Docker的logo设计为蓝色鲸鱼,拖着许多集装箱.其中鲸鱼可以看作为宿主机,而集装箱可以理解为相互隔离的容器,每个集装

Docker安装与镜像管理(一)

一.安装docker yum install epel-resase yum install docker-io  (RHEL6) yum install docker (RHEL7) 系统: [[email protected] ~]# uname -a Linux kvm.huangming.org 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [[email