docker卷
docker中的卷是一种机制,用于将主机文件系统中的目录或文件与容器中的目录或文件进行映射,使其可以在容器中访问和共享。卷可以在容器启动时创建,并且可以在容器停止后保留其状态,这使得卷非常适合用于持久化数据和共享数据。
使用卷的好处包括:
- 数据持久化:卷可以将数据存储在主机文件系统中,以便在容器重新启动时保留数据。
- 数据共享:卷可以在多个容器之间共享数据。
- 数据备份和恢复:可以将卷备份到主机文件系统中,以便在需要时恢复数据。
- 数据安全:卷可以将敏感数据存储在主机文件系统中,以便在容器被删除时保留数据。
- 数据迁移:可以将卷从一个容器迁移到另一个容器中。
挂载方式
这张图片展示了Docker中三种不同类型的挂载方式,分别是:
volume:将一个docker卷挂载到容器中,卷可以在容器之间共享和重用。这种挂载方式可以在容器内部创建、更新和删除文件,同时也可以在容器之间共享数据。
bind mounts:将主机文件系统中的文件或目录挂载到容器中。这种挂载方式可以让容器直接访问主机上的文件,可以用于共享配置文件、日志文件等。
tmpfs Mounts:将一个tmpfs挂载到容器中,tmpfs是一个基于内存的文件系统,可以在容器内部创建、更新和删除文件,但是容器停止后,数据将被清除。这种挂载方式可以用于存储临时数据,比如缓存文件等。
命令使用
docker volume命令用于管理Docker的数据卷。数据卷是一种特殊的目录,可以在容器之间共享和重用。以下是一些常见的docker volume命令:
docker volume create
:创建一个新的数据卷。docker volume ls
:列出所有可用的数据卷。docker volume inspect
:查看一个数据卷的详细信息。docker volume rm
:删除一个数据卷。docker volume prune
:删除所有未使用的数据卷。
例如,创建一个新的数据卷可以使用以下命令:
docker volume create mydata
列出所有可用的数据卷可以使用以下命令:
docker volume ls
查看一个数据卷的详细信息可以使用以下命令:
docker volume inspect mydata
删除一个数据卷可以使用以下命令:
docker volume rm mydata
删除所有未使用的数据卷可以使用以下命令:
docker volume prune
将数据卷挂载到容器中:
docker run -v <volume-name>:<container-path> <image-name>
##例如
docker run -v mydata:/data myimage
其中,<volume-name>
是数据卷的名称,<container-path>
是容器中挂载数据卷的路径,<image-name>
是镜像名称。
将数据卷从容器中移除:
docker container rm -v <container-name>
举例
- 启动一个nginx容器,指定宿主机下的文件夹
/web
挂载到容器内存放网页首页的位置
[root@xia ~]# mkdir /web
[root@xia ~]# cd /web
[root@xia web]# vim index.html
[root@xia web]# docker run -d -p 8801:80 --name web-nginx -v /web:/usr/share/nginx/html nginx
4be88206ae0f285d2cb41094feac3a4c99600026f5fa6aff4189588759cac75d
- 启动一个nginx容器,使用卷来进行挂载,用
-v
方式
[root@xia /web]# docker volume create nginx-web
[root@xia /web]# nginx-web
[root@xia /web]# cd /var/lib/docker/volumes/nginx-web/_data
[root@xia _data]# vim index.html
[root@xia _data]# docker run -d -p 8802:80 --name web-nginx2 -v nginx-web:/usr/share/nginx/html nginx
6ffc2ebddeb089c89bb20f5f849c42c1b4f7c17a428518b08a6d41cfdf9a0d51
- 查看nginx-web卷的详细信息
[root@xia _data]# docker volume inspect nginx-web
[
{
"CreatedAt": "2023-04-08T14:58:04+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx-web/_data",
"Name": "nginx-web",
"Options": null,
"Scope": "local"
}
]
- 启动一个nginx容器,使用卷来进行挂载,用
--mount
方式
[root@xia _data]# docker volume create nginx-web-mount
nginx-web-mount
[root@xia _data]# cd /var/lib/docker/volumes/nginx-web-mount/_data/
[root@xia _data]# vim index.html
[root@xia _data]# docker run -d -p 8803:80 --name web-nginx3 --mount src=nginx-web-mount,target=/usr/share/nginx/html nginx
abbc8a6dac6920d8191e68c01e7b5757c790c366132cfd0f17332a83b488a10b
- 多容器共享卷
[root@xia _data]# docker volume create share
share
[root@xia _data]# cd /var/lib/docker/volumes/share/_data/
[root@xia _data]# vim index.html
[root@xia _data]# docker run -d -p 7701:80 --name web-nginx-share1 -v share:/usr/share/nginx/html nginx
18ade341c1867f3cb49ab2729d05740a6dd35fc6f87414d0da46d12d5339d780
[root@xia _data]# docker run -d -p 7702:80 --name web-nginx-share2 -v share:/usr/share/nginx/html nginx
ed63bd511972b6ad12daf05ea7d2b167bfd5c6117c8590259b2ef01e531f329d
多宿主机之间的数据共享
安装nfs服务器
- 一台虚拟机做nfs服务器,安装软件包
yum -y install rpcbind nfs-utils
- 启动服务,设置开机启动
#启动服务
systemctl start rpcbind
systemctl start nfs
#开机启动
systemctl enable rpcbind
systemctl enable nfs
- 新建共享目录
[root@nfs data]# mkdir /data/share -p
[root@nfs data]# cd /data/share/
[root@nfs share]# vim index.html
- 修改配置文件
[root@nfs share]# vim /etc/exports
# 共享目录 能够访问的网段 其它选项
/data/share/ 192.168.40.0/24(rw,no_root_squash,no_all_squash,sync)
- 让配置文件生效
[root@nfs share]# exportfs -av
exporting 192.168.40.0/24:/data/share
客户端安装
- 客户端安装nfs
yum -y install rpcbind nfs-utils
- 新建挂载目录,并且挂载nfs的/data/share到/web目录
[root@xia web]# mkdir /web
[root@xia web]# mount 192.168.40.138:/data/share /web
- 查看是否挂载成功
[root@xia web]# df -Th |grep nfs
192.168.40.138:/data/share nfs4 17G 1.6G 16G 10% /web
使用卷共享nfs对应的目录
使用docker volume创建nfs持久卷及挂载目录
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=<NFS服务器地址>,nolock,soft,rw,sync \
--opt device=:<共享目录全路径> \
<卷名>
- 创建一个卷使用nfs共享的目录
[root@xia web]# docker volume create --driver local --opt type=nfs --opt o=addr=192.168.40.138,nolock,soft,rw,sync --opt device=:/data/share nginx-web-share
nginx-web-share
- 使用创建好的
nginx-web-share
卷
[root@xia web]# docker run -d -p 8804:80 --name nginx-web-share-1 -v nginx-web-share:/usr/share/nginx/html nginx
f542d142d4e6a10a2a5cbbf79c854d9d831fb779e46ca9a0bdf4906efb615c78
- 查看卷的信息
[root@xia web]# docker volume inspect nginx-web-share
[
{
"CreatedAt": "2023-04-25T21:21:15+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginx-web-share/_data",
"Name": "nginx-web-share",
"Options": {
"device": ":/data/share",
"o": "addr=192.168.40.138,nolock,soft,rw,sync",
"type": "nfs"
},
"Scope": "local"
}
]
- 查看是否共享成功