加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮安站长网 (https://www.0517zz.cn/)- 运营、云管理、经验、智能边缘、云硬盘!
当前位置: 首页 > 创业 > 正文

白宫即将出台人工智能新规

发布时间:2021-02-06 16:16:02 所属栏目:创业 来源:互联网
导读:因此,我们只需要在容器进程创建出来并且容器的 rootfs 准备好之后,但是在 chroot 之前,把 volume 指定的宿主机目录挂载到指定的容器目录在宿主机上对应的目录即可(因为这时候容器进程可以一直看到宿主机上的整个文件系统,同时由于执行这个挂载操作的时候

因此,我们只需要在“容器进程“创建出来并且容器的 rootfs 准备好之后,但是在 chroot 之前,把 volume 指定的宿主机目录挂载到指定的容器目录在宿主机上对应的目录即可(因为这时候容器进程可以一直看到宿主机上的整个文件系统,同时由于执行这个挂载操作的时候,容器已经创建出来了,那么此时 mount namespace 相当于已经开启了,所以挂载事件只在容器里可见)。

这边的容器进程是 Docker 创建的一个容器初始化进程(dockerinit),而不是应用进程(ENTRYPOINT+CMD)。dockerinit 负责完成根目录的准备、挂载设备和目录、配置 hostname 等一系列需要在容器内进行的初始化操作。最后通过 execv() 系统调用,让进程取代自己,成为容器里 PID=1 的进程。”由于 volume 挂载到指定的容器目录在宿主机上对应的目录位于可读写层,那么在 docker commit 的时候会被提交嘛?不会。这个主要是因为 docker commit 发生在宿主机空间,而这个 mount 发生在容器里面,并且这个 mount 由于 mount namespace 的隔离,不会影响到宿主机,也就是说宿主机上并没有这个挂载。因此,在提交的时候只会提交一个空的目录,因为 /test 是实实在在被新建在可读写层了的(这个新建可不受 mount namespace 的影响,因为 mount namespace 只影响 mount 相关的)。

下面我们来实验一下,首先启动一个容器并且让这个容器使用一个 volume,挂载在容器里的 /test 目录上。之后在容器的 /test 目录中创建一个新的文件为 test.txt。
 

深入深入

上面对卷的阐述更多是更多是从持久化的角度出发,而卷的另一大作用就是“打通”容器文件系统和主机文件系统,使得容器里在指定目录下创建的文件可以被宿主机访问到,也可以使得宿主机上指定目录下的文件可以被容器里的进程访问到。那么,这个是如何做到的呢?

这里主要用到了 Linux 的绑定挂载(bind mount)机制。它的主要作用就是将一个目录或者文件挂载到一个指定的目录上。并且,之后你在挂载点上进行的任何操作,都只发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响。绑定挂载实际上是一个 inode 替换的过程。比如,执行 mount --bind /home /test 会将 /home 以 bind 的方式挂载到 /test 上。而这一操作其实就相当于将 /test 重定向到了 /home 的 inode 上。因此,当我们修改 /test 目录的时候,实际上修改的是 /home 目录的 inode。
 

默认情况下,Docker 创建新卷时采用内置的 local 驱动,采用这个驱动也就说明创建的卷只能被容器所在的 Docker 主机所使用(上述所使用的就是 local 驱动)。

除了 local 驱动之外,你还可以使用 -d 参数指定不同的驱动。第三方驱动也可以通过插件方式接入,这些驱动提供了高级存储特性,并为 Docker 集成了外部存储系统。卷插件涵盖了块存储、文件存储、对象存储等。

  • 块存储:相对性能更高,适用于对小块数据的随机访问负载。比如 Amazon EBS 或者 OpenStack 块存储服务。
  • 文件存储:包括 NFS 和 SMB 协议的系统,在高性能场景下表现优异。比如 NetApp FAS、Azure 文件存储。
  • 对象存储:适用于较大且长期存储的、很少变更的二进制数据存储。通常对象存储是根据内容寻址,并且性能较低。比如 Amazon S3。

Docker 支持持久化和非持久化两种方式的存储。

  • 非持久化化存储自动创建,从属于容器,生命周期与容器相同,即删除容器也会删除全部非持久化数据。
  • 如果想把容器中的数据保留下来,也就是持久化,那么需要将数据存储到卷上。卷与容器是解耦的,从而可以独立地创建并管理卷,并且卷也不与任意容器声明周期绑定,即用户删除一个关联了卷的容器,但是卷并不会被删除。

非持久化存储

每个容器都会被自动分配本地存储。默认情况下,容器全部文件和目录都是用该存储的。非持久存储属于容器的一部分,并且与容器的生命周期一样---容器创建时会创建非持久化存储,同时该存储也会随着容器的删除而删除。

在 Linux 系统中,该存储目录在 /var/lib/docker/ 下,是容器的一部分。这个 storage-driver 是指要使用的存储驱动。假如要想在生产环境中使用 Linux 运行 Docker,需要确认当前的存储驱动是否符合当前 Linux 版本:

  • RedHat Enterprise Linux:Docker 17.06 或者更高的版本中使用 Overlay2 驱动。
  • Ubuntu:使用 Overlay2 或者 AUFS 驱动。如果正在使用 Linux 4.x 或者更高版本的内核,建议使用 Overlay2。

    (编辑:淮安站长网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读