上一章在学习中有2个疑问:

  1. 怎样保存我们在容器里的改动?
  2. 假设apt-get假设不能安装时,怎样在Docker中安装软件?

关于run创建的容器问题

对于第一个问题。原来每次运行(当非root用户时,须要在命令前加sudo)

sudo docker run -i -t docker/whalesay /bin/bash

都会创建一个新的容器,这一点应该是明白的。

可是退出时,创建的容器并没有被删除,还是存在与系统中的。通过,

sudo docker ps -a

能够查看。



列表中。第一列CONTAINER ID 就是镜像的ID,上表中第一个也就是id为7409de9e92f0就是我上一篇中创建的安装了vim的容器。

IMAGE就是创建该容器使用的镜像。

COMMAND 是镜像最后运行的动作。

CREATED 是创建时间。

STATUS是容器当前状态。

PORTS

NAMES是为容器取得唯一的名称。

这个那么默认是docker在运行run创建容器是命名的。假设我们想指定名称须要使用name选项,

sudo docker run -i -t --name test docker/whalesay /bin/bash

这样创建的容器名称就是test。



就像上面的id为cc8a23b1d624的容器。

当我们再次创建名称为test容器时就会出异常。



这也说明。docker容器的名称要是唯一的。

可是上面的提示信息提示在创建名称为test的容器时,与id为“cc8a23b1d624a63ec2147b7f1a6f965852df4a20e3ca1f50bbb08d3dabaccf0b”容器冲突。

这个id却不是ps -a列出来的test的id的cc8a23b1d624。

那么这个长id是哪里来的。

这就涉及到docker run命令创建的容器在本地怎样保存了。

默认docker创建的容器都保存早文件夹:

/var/lib/docker/

查看这个文件夹须要权限,所以我们可能须要切换到root用户下。



这里就能够看到上面的id”cc8a23b1d624a63ec2147b7f1a6f965852df4a20e3ca1f50bbb08d3dabaccf0b”了。这也是docker创建容器保存的地方。

进去看下。相应的文件夹下保存在该容器的描写叙述文件。



通过,

sudo docker inspect ID

能够查看容器配置具体信息,



此时,会返回一个json格式的信息。

简说Docker工作模式

为什么会产生这些文件,这就要涉及到docker的工作模式。

Docker在创建容器时。Docker这时会载入我们指定的仅仅读镜像。并在其上加入一个读写层(即将镜像文件夹复制一份到/var/lib/docker/aufs/mnt以ID为文件夹下,这个id就是我们上面看到的长id。这时假设我们使用chroot进入此文件夹,会发现其文件夹结构与容器里面的文件夹一样)。

假设运行中的容器改动现有的一个已经存在的文件,那该文件将会从读写层以下的仅仅读层拷贝到读写层,该文件的仅仅读版本号仍然存在,仅仅是已经被读写层中的该文件的副本所隐藏。当删除docker容器。并通过该镜像又一次启动时,之前的更改将会丢失。

这也就是为什么,当我们已run再次启动容器时,之前的改动都没了的原因。

进入之前创建的容器

既然我们创建的容器被已可写的方式保存了下来,我们应该是能够再次进入的。

上面我们已经知道怎样列出创建过得容器。就像我们上一篇安装了vim的容器id–7409de9e92f0。

容器的id知道了,如今该想办法再次进入这个容器了。之前我们已经退出了容器。要想再次进入首先就要再次启动它。

sudo docker start ID/NAME

后面指定id-7409de9e92f0,或者name-pensive_darwin。



能够看到。id为7409de9e92f0的容器状态变成启动了“Up 3 seconds”。

然后我们就能够进入该的容器了,

sudo docker attach ID/NAME



这里能够看到,我们进入了id为7409de9e92f0的容器,相同。通过dpkg命令能够看到,我们上次安装的vim也是存在的。

这次就先到这里,尽管没有全然解决之前的两个问题。可是对Docker的理解有深入了一点,相信问题总会解决的。

自己学Docker:4.開始了解Docker的工作模式的更多相关文章

  1. 简单四步開始树莓派上的Docker之旅

    大概这篇博文发表之后,应该算是我个人的第一篇翻译作品了,翻译的可能不是非常到位,望各位看官大刀砍过来. 原文链接:http://resin.io/blog/docker-on-raspberry-pi ...

  2. 送给刚刚開始学cocos2d-x引擎 移植Android的同学

    刚刚開始学cocos2-x,不过依照教程把已经安了一般Android的开发环境的eclipse又一次升级到安装好cdt和ndk就花了我几十小时,差点都要放弃了. 參考博客 http://blog.cs ...

  3. 从零開始学android<数据存储(1)SharedPreferences属性文件.三十五.>

    在android中有五种保存数据的方法.各自是: Shared Preferences Store private primitive data in key-value pairs. 相应属性的键值 ...

  4. 从零開始学Swift之Hello World进化版

    上节课,也就是昨晚啦,我们学习到从零開始学Swift之Hello World.那一节仅仅有一句代码,大家会认为不够过瘾. 那么这节课,就给大家来多点瘾货吧! 先上图! //var 代表变量的类型, s ...

  5. 关东升的《从零開始学Swift》即将出版

    大家好: 苹果2015WWDC大会公布了Swift2.0,它较之前的版本号Swift1.x有非常大的变化.所以我即将出版<从零開始学Swift><从零開始学Swift>将在&l ...

  6. 【高德地图API】从零開始学高德JS API(五)路线规划——驾车|公交|步行

    先来看两个问题:路线规划与导航有什么差别?步行导航与驾车导航有什么差别? 回答: 1.路线规划,指的是为用户提供3条路线推荐.[高德]在提供路线规划的时候,会提供用户自己定义路线规划功能,这是别家没有 ...

  7. 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹

    <PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...

  8. 第13章、布局Layouts之RelativeLayout相对布局(从零開始学Android)

    RelativeLayout相对布局 RelativeLayout是一种相对布局,控件的位置是依照相对位置来计算的,后一个控件在什么位置依赖于前一个控件的基本位置,是布局最经常使用,也是最灵活的一种布 ...

  9. 从零開始学android&lt;SeekBar滑动组件.二十二.&gt;

    拖动条能够由用户自己进行手工的调节,比如:当用户须要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构例如以下所看到的: java.lang.Object    ↳ an ...

随机推荐

  1. F - Oil Deposits 【地图型BFS+联通性】

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

  2. React中super(props)和super()以及不写super()的区别

    一.constructor()和super()的基本含义 constructor() -- 构造方法 这是ES6对类的默认方法,通过new命令生成对象实例自动调用的方法.并且,该方法是类中必须要有的, ...

  3. 【莫队算法】URAL - 2080 - Wallet

    http://www.cnblogs.com/icode-girl/p/5783983.html 要注意卡片没有都被使用的情况. #include<cstdio> #include< ...

  4. 【博弈论】【SG函数】【枚举】bzoj1874 [BeiJing2009 WinterCamp]取石子游戏

    枚举第一步可能达到的状态,判断是否是必败态即可. #include<cstdio> #include<set> #include<cstring> using na ...

  5. awk-使用

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 命令格式: awk [-F field-separator] 'pat ...

  6. 多IDC GSLB的部署 - ADC技术博客 - 51CTO技术博客

    多IDC GSLB的部署 - ADC技术博客 - 51CTO技术博客 A10

  7. Mysql 的表级锁和行级锁

    表级锁 MySQL表级锁分为读锁和写锁. 读锁 用法:LOCK TABLE table_name [ AS alias_name ] READ 释放锁使用UNLOCK tables.可以为表使用别名, ...

  8. iOS :学习新技术途径和sizeClasses屏幕适配

    1.了解有什么新技术 1> 苹果API文档 - General - Guides - iOSx API Diffs 2> 观看WWDC会议视频 2.如何使用新技术 1> 自己根据AP ...

  9. DICOM中几个判断图像方向的tag

    在DICOM标准里,有三个TAG与成像的方向相关. 参考来源:Kitware关于DICOM方向的说明 http://public.kitware.com/IGSTKWIKI/index.php/DIC ...

  10. 使用spice连接kvm guest主机

    spice技术已经出来很久了,其是优于VNC的一种远程桌面协议,之所以这里记录下,是由于某些加密视频文件(如以vpy结尾的超时代视频加密),会识别主机的特征吗,一旦主机重启后这些视频又没法查看了,所以 ...