容器一般是用来封装打包软件,源码等环境配置的,而且重启一个容器很简单,所以容器经常被删除,因此不会轻易将数据或文件放在容器中,这时我们会在宿主机的某个地方或空间挂在到容器指定的位置,这就是容器的数据卷。
数据卷的作用:
1:持久化容器运行过程中产生的数据文件
2:实现多个容器间的文件共享。
正常情况下,删除容器,容器中所有的文件也会被删除。
创建一个数据卷 :docker volume create
查看数据卷列表 :docker volume ls
删除一个数据卷 :docker volume rm
查看一个数据卷的属性 : docker volume inspect
[root@docker01 ~]# docker volume create fxw
fxw
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local fxw
[root@docker01 ~]# docker volume inspect fxw
[
{
"CreatedAt": "2019-07-24T14:08:11+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/fxw/_data",
"Name": "fxw",
"Options": {},
"Scope": "local"
}
]
[root@docker01 _data]#
启动容器并将数据卷fxw挂载到nginx容器中:
-v fxw:/usr/share/nginx/html ,指定数据卷名称:容器指定目录
[root@docker01 _data]# docker run -d -p 80:80 -v fxw:/usr/share/nginx/html nginx:latest
1097890e5c43d57ffe2cd3c67ab05172151ffaba1dbd5680b0be703aa4d4b1cf
[root@docker01 _data]# docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1097890e5c43 nginx:latest "nginx -g 'daemon of…" 10 seconds ago Up 9 seconds 0.0.0.0:80->80/t
[root@docker01 _data]# docker volume inspect fxw
[
{
"CreatedAt": "2019-07-24T14:12:35+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/fxw/_data",
"Name": "fxw",
"Options": {},
"Scope": "local"
}
]
通过查看数据卷fxw,可以发现数据卷fxw在宿主机上的真实地址为:/var/lib/docker/volumes/fxw/_data,相当于将改地址挂载到容器nginx的/usr/share/nginx/html目录,这是我们去改变/var/lib/docker/volumes/fxw/_data中的内容,先删除旧的文件,然后放入编写好的网页index.html,然后访问10.0.0.11:
old page
new page
因此nginx的数据放在宿主机的数据卷fxw上,这样既保证了数据的安全,又给开发人员提供了方便,同时当你部署分布式集群时,又能起到文件共享的作用,一举多得。
如果是集群共享,我们就不用每次都指定数据卷的路径,这里还有一个命令:
--volumes-from containerName 表示与容器containerName保持一致的数据卷,也是fxw数据卷(这里指定81端口映射到容器80端口)
[root@docker01 _data]# docker run -d -p 81:80 --volumes-from elegant_ardinghelli nginx:latest
2860f3a057d861105ab996732029f22af392e0a04d841fc41726f6893f1f4a78
[root@docker01 _data]#
上面已经对数据进行了持久化,此时删掉容器,数据依然在宿主机。
[root@docker01 _data]# docker rm -f `docker ps -a -q`
2860f3a057d8
1097890e5c43
e4e1264fa87c
c1288955af2a
[root@docker01 _data]# docker volume inspect fxw
[
{
"CreatedAt": "2019-07-24T14:12:35+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/fxw/_data",
"Name": "fxw",
"Options": {},
"Scope": "local"
}
]
[root@docker01 _data]# ll /var/lib/docker/volumes/fxw/_data/
total 4
-rw-r--r-- 1 root root 3094 Jul 23 16:41 index.html
[root@docker01 _data]#
除了采用数据卷的方式挂载之外,还可以直接挂载宿主机目录(90端口):
[root@docker01 abc]# docker run -d -p 90:80 -v /opt/abc/:/usr/share/nginx/html nginx:latest
52bfde2cbef6171594e7f8b7dc2ac859b22b4a8e3a13a380c7b1ffedab35fddc
[root@docker01 abc]# ll
total 4
-rw-r--r-- 1 root root 3094 Jul 23 16:41 index.html
[root@docker01 abc]#