• 自己学Docker:4.開始了解Docker的工作模式


    上一章在学习中有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的理解有深入了一点,相信问题总会解决的。

  • 相关阅读:
    Geohash
    Go加密解密之RSA[转]
    在MACOS上实现交叉编译
    [转]MySQL与MongoDB的操作对比
    CentOS 6 使用 yum 安装MongoDB及服务器端配置
    Ubuntu下PHP的扩展
    golang 图片处理,剪切,base64数据转换,文件存储
    性能测试应用领域
    性能测试用例、策略和方法
    性能测试类型
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7260616.html
Copyright © 2020-2023  润新知