如何使用 Docker Compose v3 直接挂载 NFS 共享/卷到容器中?
Docker 是一个广泛用于开发和管理容器化应用程序的工具。它使程序员能够将他们的应用程序及其依赖项组合到小型、可移植的容器中,这些容器易于在任何平台上设置和使用。使用 Docker Compose v3 直接在容器内挂载网络文件系统 (NFS) 共享或卷是 Docker 的一项实用功能。
在本文中,我们将探讨如何使用 Docker Compose v3 直接在容器中挂载 NFS 共享或卷。
使用 Docker Compose v3 直接挂载容器中 NFS 共享/卷的方法
以下是一些我们需要理解和学习才能使用 Docker Compose v3 直接挂载容器中 NFS 共享/卷的重要术语和事实:
目标路径 − “target” 键用于指定应在容器内挂载 NFS 共享或卷的位置。可以使用容器内任何您希望挂载卷的目录路径作为此路径。
卷类型 − 使用 “type” 键指示正在挂载的卷类型。对于 NFS 共享或卷,应将类型设置为“volume”。
源路径 − 使用 “source” 键指定主机上 NFS 共享或卷的路径。此处可以使用指向主机系统上 NFS 共享或磁盘的任何目录路径。
卷选项 − “volume” 键可用于指定其他卷选项。其中一个选项是 “nocopy”;可以将其设置为 true 以阻止将卷的内容复制到容器中。这有助于优化最终映像的大小并减少层数。
我们现在将通过一个示例更好地理解和演示这一点。
示例
步骤 1 − 为您的项目创建一个新目录并导航到该目录:
$ mkdir directoryname $ cd directoryname
步骤 2 − 在此新目录中创建一个名为 docker-compose.yml 的文件,内容如下:
version: "3" services: web-server: image: nginx:latest ports: - 80:80 volumes: - type: volume source: nfs-volume target: /nfs volume: nocopy: true volumes: nfs-volume: driver_opts: type: "nfs" o: "addr=10.40.0.199,nolock,soft,rw" device: ":/var/data"
这指示在文件中使用的 Docker Compose 版本,为服务命名,指定合适的镜像来定义它,在服务下添加一个 volumes 键,并指定卷的类型、源路径和目标路径。此外,它还将 volume 键下的 nocopy 选项设置为 true,以阻止将卷的内容复制到容器中。
步骤 3 − 在同一目录中创建一个 Dockerfile,内容如下:
FROM nginx:latest COPY . /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
在此示例中,我们使用 `nginx:latest` 镜像将主机系统上 `/mnt/nfs/share` 中存储的 NFS 共享或卷挂载到容器内的 `/app`。为了防止将卷的内容复制到容器中,将 `nocopy` 选项指定为 `true`。
步骤 4 − 使用 `docker-compose up` 命令启动带有已挂载卷的容器:
docker-compose up
输出
`docker-compose up` 命令的输出应类似于此:
[+] Running 2/2 - Network examp_default Created 0.9s - Container examp-web-1 Created 0.1s Attaching to examp-web-1 examp-web-1 | * Serving Flask app 'app' examp-web-1 | * Debug mode: on examp-web-1 | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. examp-web-1 | * Running on all addresses (0.0.0.0) examp-web-1 | * Running on http://127.0.0.1:5000 examp-web-1 | * Running on http://172.19.0.2:5000 examp-web-1 | Press CTRL+C to quit examp-web-1 | * Restarting with stat examp-web-1 | * Debugger is active! examp-web-1 | * Debugger PIN: 630-981-535 examp-web-1 | 172.19.0.1 - - [09/Jan/2023 16:46:53] "GET / HTTP/1.1" 200 - examp-web-1 | 172.19.0.1 - - [09/Jan/2023 16:46:53] "GET /favicon.ico HTTP/1.1" 404 - Gracefully stopping... (press Ctrl+C again to force) [+] Running 1/1 - Container examp-web-1 Stopped 2.0s canceled PS C:\DikshaDen\docker-apps\examp> cd .. PS C:\DikshaDen\docker-apps> docker-compose up no configuration file provided: not found PS C:\DikshaDen\docker-apps> docker-compose up no configuration file provided: not found PS C:\DikshaDen\docker-apps> docker-compose up --build no configuration file provided: not found PS C:\DikshaDen\docker-apps> docker-compose up --build no configuration file provided: not found PS C:\DikshaDen\docker-apps> docker-compose build no configuration file provided: not found PS C:\DikshaDen\docker-apps> cd mount-nfs PS C:\DikshaDen\docker-apps\mount-nfs> docker-compose up --build [+] Running 7/7 - web-server Pulled 40.6s - 3f4ca61aafcd Pull complete 18.0s - 50c68654b16f Pull complete 19.3s - 3ed295c083ec Pull complete 19.4s - 40b838968eea Pull complete 19.6s - 88d3ab68332d Pull complete 19.7s - 5f63362a3fa3 Pull complete 19.8s time="2023-01-09T22:48:42+05:30" level=warning msg="Found orphan containers ([mount-nfs-web-1]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up."
此输出演示了主机系统的 `/mnt/nfs/share` NFS 共享或卷已使用 `nginx:latest` 镜像挂载到容器的 `/app`。为了防止将卷的内容复制到容器中,`nocopy` 选项设置为 `true`。
结论
在本文中,我们探讨了如何使用 Docker Compose v3 直接在 Docker 容器中挂载网络文件系统 (NFS) 共享或卷。我们讨论了相关的各种术语和事实,例如卷类型、源路径、目标路径和卷选项。我们还提供了一个示例代码和输出,以显示该过程的工作方式。您可以按照本文中的说明,成功地使用 Docker Compose v3 在 Docker 容器中挂载 NFS 共享或卷。这将使您能够访问外部 NFS 服务器上的存储数据或在容器之间传输文件。