如何创建和使用Docker中的NFS存储卷

举报
架构师聊技术 发表于 2022/12/15 17:55:39 2022/12/15
【摘要】 Docker 卷是为Docker 容器设置持久存储的首选机制。卷是安装在容器内的主机文件系统上的现有目录。它们可以从容器和主机系统访问。Docker 还允许用户挂载通过 NFS 远程文件共享系统共享的目录。为此目的创建的卷使用 Docker 自己的 NFS 驱动程序,无需在主机系统上挂载 NFS 目录。

Docker 卷是为Docker 容器设置持久存储的首选机制。卷是安装在容器内的主机文件系统上的现有目录。它们可以从容器和主机系统访问。Docker 还允许用户挂载通过 NFS 远程文件共享系统共享的目录。为此目的创建的卷使用 Docker 自己的 NFS 驱动程序,无需在主机系统上挂载 NFS 目录。

先决条件

  • 在远程机器上安装和配置 NFS 服务器。
  • Docker 安装在本地机器上。
  • 具有 root/sudo 权限的用户帐户。

主要分享低代码、微服务、容器化、SAAS‬、系统架构方面的的‬内容‬‬,希望‬大家‬点赞‬,评论,关注‬。


创建 NFS Docker 卷

创建和管理 Docker 卷的最简单方法是使用docker volume命令及其子命令。

创建 NFS Docker 卷的语法包括两个选项。

  1. --driver选项定义了local卷驱动程序,它接受类似于mount Linux 中的命令的选项。
  2. --opt多次调用该选项以提供有关卷的更多详细信息。

详细信息包括:

  • 卷类型。
  • 写模式。
  • 远程 NFS 服务器的 IP 或 Web 地址。
  • 服务器上共享目录的路径。
docker volume create --driver local \
  --opt type=nfs \
  --opt o=addr=[ip-address],rw \
  --opt device=:[path-to-directory] \
  [volume-name]

下面的示例说明了如何创建一个名为nfs-volume. 该卷包含/mnt/nfsdir位于服务器上的目录,具有rw(读/写)权限。服务器的 IP 地址是10.240.12.70

成功执行的命令输出卷的名称。


注意:在创建 NFS 卷之前,请确保 Docker 主机系统的IP 地址列在/etc/exports服务器上的文件中。

列出可用的 Docker 卷。

docker volume ls

输出列出了您创建的卷。


使用子命令检查卷inspect

docker volume inspect [volume-name]

输出显示卷配置。


在容器中挂载 NFS

要将 NFS 卷挂载到容器中,请nfs-common在主机系统上安装软件包。

首先更新存储库。

sudo apt update

使用 APT 安装nfs-common软件包。

sudo apt install nfs-common

确认您要安装软件包并等待安装完成。


注意:如果使用 YUM 或 RPM 进行包管理,则 DNS 客户端包称为nfs-utils.

使用docker run 命令启动容器。在该部分中指定 NFS 卷和安装点--mount

docker run -d -it \
  --name [container-name] \
  --mount source=[volume-name],target=[mount-point]\
  [image-name]

下面的示例将 NFS 卷挂载nfs-volume到容器中的/mnt目录。


使用命令确认卷已成功挂载docker inspect

docker inspect [container-name]

Mounts输出部分包含安装到容器中的卷。


使用以下命令进入容器环境 bash shell docker exec

docker exec -it [container-name] /bin/bash


列出目录的内容/mnt

ls /mnt

输出显示托管在/mnt/nfsdir服务器目录中的文件。


如果您在 Docker 容器中创建文件,也可以在服务器上的原始目录中访问该文件。要进行测试,请使用touch 命令在/mnt目录中创建一个空文件。

touch /mnt/docker1.txt

在服务器上,导航到您共享的目录并列出其内容。出现在 Docker 容器中创建的文件。


使用 Docker Compose 挂载 NFS 卷

如果您使用Docker Compose来管理您的容器,请通过在 YML 文件中定义来挂载 NFS 卷。

创建 YML 文件。

nano docker-compose.yml

volumes在该部分中定义 NFS 卷。

version: "3.2"

services:
  [service-name]:
    image: [docker-image]
    ports:
      - "[port]:[port]"

    volumes:
      - type: volume
        source: [volume-name]
        target: /nfs
        volume:
          nocopy: true
volumes:
  [volume-name]:
    driver_opts:
      type: "nfs"
      o: "addr=[ip-address],nolock,soft,rw"
      device: ":[path-to-directory]"

注意nolocksoft选项确保 Docker 在与 NFS 服务器的连接丢失时不会冻结。

使用命令创建并启动容器docker-compose up

结论

本文解释了如何创建和挂载包含通过 NFS 共享的目录的 Docker 卷。本文中介绍的方法涉及使用命令行或 Docker Compose 安装卷。

主要分享低代码、微服务、容器化、SAAS‬、系统架构方面的的‬内容‬‬,希望‬大家‬点赞‬,评论,关注‬。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。