如何使用Docker Compose v3在容器中直接装载NFS共享/卷

如何使用Docker Compose v3在容器中直接装载NFS共享/卷

Docker是一个广泛使用的开发和管理容器化应用程序的工具。它使程序员能够将他们的应用程序与他们的依赖性结合在一起,形成小型、可移植的容器,在任何平台上都能简单地设置和使用。使用Docker Compose v3在容器内直接安装网络文件系统(NFS)共享或卷是Docker的一项实用功能。

在这篇文章中,我们将探讨如何使用Docker Compose v3来直接挂载容器中的NFS共享或卷。

使用Docker Compose v3在容器中直接装载NFS共享/卷的方法

以下是我们需要了解和学习的一些重要术语和事实,以便使用Docker Compose v3在容器中直接挂载NFS共享/卷。

  • 目标路径 – 目标键用于指定NFS共享或卷在容器内的安装位置。你希望卷被挂载到的容器内的任何目录路径都可以被用作目标。

  • 卷的类型 – 要指示被挂载的卷的类型,请使用类型键。对于NFS共享或卷,类型应该被设置为 “卷”。

  • 源路径 – 使用源键指定主机上的NFS共享或卷的路径。这里可以使用主机系统上任何通向NFS共享或磁盘的目录路径。

  • 卷选择 – 卷键可以用来指定额外的卷选项。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的版本,给服务起一个名字,用一个合适的镜像来定义它,在服务下添加一个卷键,还指定了卷的类型、源路径和目标路径。此外,它还将卷键下的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:fresh镜像挂载到容器的/app。为了阻止卷的内容被复制到容器中,nocopy选项被设置为true。

结论

在这篇文章中,我们探讨了如何使用Docker Compose v3在Docker容器中直接装载网络文件系统(NFS)共享或卷。我们讨论了所涉及的各种术语和事实,如卷类型、源路径、目标路径和卷选项。我们还提供了一个示例代码和输出,以显示该过程是如何工作的。按照本文的说明,你可以使用Docker Compose v3在Docker容器中成功挂载NFS共享或卷。这将使你能够访问外部NFS服务器上的存储数据或在容器间传输文件。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程