容器 & Pod中挂载NFS卷

容器里挂载nfs

运行中的容器

docker ps | grep cmdb
docker inspect 17ecedc669e6 | grep -i merged
cd /var/lib/docker/overlay2/649696272be1e9073ed8afd085c77b31e3423e93ead825f172f476be46eab8da/merged
mkdir nfs1
mount -t nfs x.x.x.5:/backup/nfs nfs1
docker exec -it 17ecedc669e6 bash
ls /nfs1

运行时挂载

docker run --mount type=volume,source=/path/to/shared/directory,target=/mnt/nfs,volume-driver=local,volume-opt=type=nfs,volume-opt=device=IP_ADDRESS:/path/to/shared/directory,readonly mycontainer

Pod中挂载

apiVersion: v1
kind: Pod
metadata:
  name: nfs-pod
spec:
  containers:
    - name: app-container
      image: your-image
      volumeMounts:
        - mountPath: /path/to/mount
          name: nfs-volume
  volumes:
    - name: nfs-volume
      nfs:
        server: nfs-server-ip
        path: /path/on/nfs/server

GraphDriver

GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49-init/diff:/var/lib/docker/overlay2/2fb3706abf15c0aef48416ff665012d38d6c7692a16245ac570d14d1df3a8c9e/diff:/var/lib/docker/overlay2/18f09190247c06ef5cb98494b5919f94cedd3a38a1a822dcbe319447a456825f/diff:/var/lib/docker/overlay2/e11e2abdfe4bd69b64f42b9f127be980e3cd1491ef70ea8e3bb9420b4a8ffeef/diff",
                "MergedDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49/merged",
                "UpperDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49/diff",
                "WorkDir": "/var/lib/docker/overlay2/b47eed97a959e733f2f5583d689a884d4d8c73f510872b0b1ba429140b8a8d49/work"
            },
            "Name": "overlay2"

这段代码是关于Docker的GraphDriver配置的一个示例。GraphDriver用于管理Docker容器的存储和文件系统。

  • "Data"字段包含了四个子字段:

    • “LowerDir”:底层目录,其中包含镜像层的只读内容。
    • “MergedDir”:合并目录,包含镜像层和容器层的合并结果。
    • “UpperDir”:上层目录,包含容器的可写内容。
    • “WorkDir”:工作目录,用于临时文件操作。
  • “Name"字段指定了使用的驱动类型,这里是"overlay2”。Overlay2是一种Docker存储驱动,它可以在Linux系统上提供高性能和较低的存储开销。

此示例中的路径都是针对Docker存储在主机上的默认位置。这些路径用于管理容器的文件系统,并确保容器的更改被正确记录和存储。

联合文件系统(Union File System)

Docker使用联合文件系统(Union File System)来实现容器的镜像层和容器层的分离。这种文件系统由四个主要的目录组成:

  1. LowerDir(底层目录):它包含了镜像层的只读内容。镜像层包含了操作系统和基础应用程序等,可以被多个容器共享。当多个容器运行同一个镜像时,它们会共享相同的底层目录。

  2. MergedDir(合并目录):它是底层目录和上层目录的合并结果。在此目录中,底层目录和上层目录的文件和目录会被合并,形成一个单一的视图。这样,容器可以看到底层目录和上层目录中的所有文件和目录。

  3. UpperDir(上层目录):它包含了容器的可写内容。当容器中对文件进行写操作时,这些修改会保存在上层目录中。这使得在容器重启后,之前的修改仍然存在。上层目录与每个容器实例相关联,因此不同容器之间的上层目录是独立的。

  4. WorkDir(工作目录):它用于临时文件操作。容器在执行过程中可能需要创建临时文件,这些文件通常位于工作目录中。该目录的内容在容器运行期间是可写的,但不会被保存。

这种联合文件系统的设计允许容器共享底层镜像,并提供了一种轻量级、高效的方式来管理容器的可写内容。它允许容器之间共享文件,节省存储空间,并提供了一致性和隔离性。每个容器都可以有自己的上层目录,使得每个容器都能保持自己的状态和修改。

Mount Namespace

Mount Namespace(挂载命名空间)是Linux内核中的一种隔离机制,它允许进程在一个独立的挂载环境中运行,提供了对文件系统挂载点的独立视图。这个概念最早由Linux容器技术提出,并成为Linux命名空间的一部分。

在传统的Linux系统中,所有进程都共享同一个挂载命名空间。这意味着,一个进程对文件系统的操作会影响到其他进程的访问,甚至可能导致系统不稳定。而Mount Namespace的引入解决了这个问题,使得每个进程都拥有自己独立的挂载命名空间。

Mount Namespace的创建和管理通过clone()系统调用实现。当一个进程调用clone()创建新进程时,可以指定CLONE_NEWNS标志来创建一个新的Mount Namespace。这个新的Namespace将继承父进程的已有挂载点信息,但可以在新的Namespace中进行修改和添加。

通过Mount Namespace,进程可以在不影响其他进程的情况下,对文件系统进行如下操作:

  • 挂载和卸载文件系统:进程可以以私有或共享方式挂载文件系统到指定的目录,而不会影响其他命名空间中的挂载点。
  • 查看挂载信息:进程可以获得当前命名空间中的挂载点信息,包括已挂载文件系统的类型、源路径和目标路径等。
  • 修改挂载选项:进程可以修改已有挂载点的挂载选项,比如设定只读权限或重新挂载以更新选项。

Mount Namespace的应用场景主要是容器化技术(如Docker、LXC等)和虚拟化技术,它为每个容器或虚拟机提供了隔离的文件系统环境。这种隔离性使得每个进程都能够在自己的挂载命名空间中安全地操作文件系统,同时增加了系统的灵活性和可靠性。
mount namespace

lsns -t mnt
ll / proc/xxx / ns
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值