如何使用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服务器上的存储数据或在容器间传输文件。