容器卷按照业务类型可以分为两大类:
无状态(数据不需要持久化)
有状态(数据持久化)
创建卷(以local模式卷为例)
方式一直接创建卷:
[root@localhost ~]# docker volume create myvolume
myvolume
方式二创建容器时候创建卷:
[root@localhost ~]# docker run -d --name=nginx-volume -v /usr/share/nginx/html nginx
查看卷
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local cd7dacfec3b701f4601de4eb29c7992197252d29d7ce14e50cc5401a81d3215a 创建容器的时候直接创建的卷
local myvolume
查看卷详细信息
[root@localhost ~]# docker volume inspect myvolume
[
{
"CreatedAt": "2020-10-12T10:26:46+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
"Name": "myvolume",
"Options": {},
"Scope": "local"
}
]
挂载数据卷
[root@localhost ~]# docker run -d --name=nginx --mount source=myvolume,target=/usr/share/nginx/html nginx
登录容器器并写入数据
[root@localhost ~]# docker exec -it nginx bash
root@fb2aff3e3d8a:/# echo "11111111" > /usr/share/nginx/html/index.html
删除容器
[root@localhost ~]# docker rm -f nginx
nginx
重新创建nginx容器挂载之前的卷
[root@localhost ~]# docker run -d --name=nginx --mount source=myvolume,target=/usr/share/nginx/html nginx
cecca423928317bd2614f4d9c6ff12dd8de603b29dae30fad20e4bac53abe913
[root@localhost ~]# docker exec -it nginx bash
查看数据依然存在
root@cecca4239283:/# cat /usr/share/nginx/html/index.html
11111111
删除数据卷(必须删除掉使用的容器)
[root@localhost ~]# docker volume rm myvolume
myvolume
容器之间数据共享
容器1
[root@localhost ~]# docker run --mount source=log-vol,target=/tmp/log --name=log-producer -it busybox
/ # cat <<EOF >/tmp/log/mylog.log
> Hello, My log.
> EOF
/ # cat /tmp/log/mylog.log
Hello, My log.
容器2
[root@localhost ~]# docker run -it --name consumer --volumes-from log-producer busybox
/ # cat /tmp/log/mylog.log
Hello, My log.
Docker 容器的文件系统不是一个真正的文件系统,而是通过联合文件系统实现的一个伪文件系统,而 Docker 卷则是直接利用主机的某个文件或者目录,它可以绕过联合文件系统,直接挂载主机上的文件或目录到容器中。
原文:https://www.cnblogs.com/menkeyi/p/13806876.html