宿主机进程挂载到容器内_关于Docker的挂载

底层原理不懂就上手,上手出了问题就懵逼,最近在对接阿里云时遇到Docker存储驱动的神坑,爬了几天爬不出来,最后发现是节点中Docker存储驱动的问题,由此引发此次学习,避免类似问题再次懵逼。

文章目录

1. Volumes(最推荐的挂载方式)

2. Bind mounts

3. tmpfs mounts

4. named pipes

5.关于语法

5.1 -v/--volume

5.2 --mount

关于镜像images,核心首先必须明确一点,镜像都是只读的,如果需要进行写操作,必须在该镜像上创建一个新的镜像层(我们所有的写操作其实都是在一个可写的镜像层上操作的)。同时镜像也是共享的,那些依赖于同一个 image 的多个容器,并不会将单独复制需要的镜像到自己的容器中进行启动,那样会浪费巨大的空间,实际节点上只会有一个镜像,多个容器是共享这一个镜像的。存储驱动可以将容器中的数据进行持久化同时避免性能问题。存储驱动允许我们在容器的可写层创建数据,这些数据在容器销毁后也就没有了,且这些文件的读写速度都比本地文件系统的性能低。

默认情况下,容器内所有创建的文件都存储在一个可写层,所以这些文件仅仅存活于容器运行时,一旦容器被销毁这些文件也会被销毁。容器的可写层和宿主机器紧密耦合,很难将可写层的文件或数据迁移到非宿主机器外的地方。要将数据写入容器的可写层必须要有一个存储驱动(storage driver)来管理文件系统,存储驱动程序使用Linux内核提供的联合文件系统,这种方式与使用直接写入主机文件系统的数据卷相比降低了性能。Docker提供几种种持久化容器中数据或文件的方式:

volumes:Volumes是持久化Docker中数据最好的方式,存在于宿主机器文件系统的一部分(Linux中位于/var/lib/docker/volumes/目录下的xx.db文件),由Docker自己管理,非Docker进程去修改这部分的文件;

bind mounts:这种方式可以将容器中的数据持久化到宿主机器的任何位置(文件或目录),任何进程都可以进行修改

tmpfs mount:Linux 上专用,tmpfs挂载仅存储在主机系统的内存中,永远不会写入主机系统的文件系统;

named pipe:windowns 上专用,同上;

关于上述的几种方式的区别,官网形象的图文解释:

1. Volumes(最推荐的挂载方式)

Volumes(数据卷) 由 Docker 自行创建和管理,可以使用docker volume create显式的创建一个Volume,当然如果不人为创建,Doc

你可能感兴趣的:(宿主机进程挂载到容器内)