背景说明
容器运行时应该尽量保持容器存储层不发生写操作,针对数据库等需要动态保存数据的应用,其数据文件应该保存在volume[卷]中,核心功能为挂载宿主机的一个目录[文件]至容器目录[文件]
解决方案
数据卷
默认挂载
语法说明:docker run -v 容器目录[文件]
[root@vm1 ~]# docker run -d -v /data nginx
WARNING: IPv4 forwarding is disabled. Networking will not work.
7694c46791434d0ef15af963350c0228eea3530fb44b5973daf49613af98382f
[root@vm1 ~]# docker exec -it nginx /bin/bash
Error: No such container: nginx
[root@vm1 ~]# docker exec -it 7694c /bin/bash
root@7694c4679143:/# cd /data/
root@7694c4679143:/data# exit
exit
[root@vm1 ~]# docker inspect -f {{.Config.Volumes}} 7694
map[/data:{}]
[root@vm1 ~]# docker inspect -f {{.Mounts}} 7694
[{volume f38be46104c808d7ce7acf64e6fcca4e5125f7a8d58c84c7c9e433bc0b097700 /var/lib/docker/volumes/f38be46104c808d7ce7acf64e6fcca4e5125f7a8d58c84c7c9e433bc0b097700/_data /data local true }]
[root@vm1 ~]#
指定挂载
语法说明:docker run -v 宿主机目录[文件]:容器目录[文件]
[root@vm1 ~]# docker run -d -v /home/:/data nginx
WARNING: IPv4 forwarding is disabled. Networking will not work.
4e6de892d4a1579d19cd2c5b7c24046d3372cfb0ff90c410e72173b9901bd3d0
[root@vm1 ~]# docker exec -it 4e6de /bin/bash
root@4e6de892d4a1:/# ls /data
mingxun
root@4e6de892d4a1:/#
容器目录必须是绝对路径 宿主机目录如果不存在则会自动生成
匿名卷
Dockerfile中的VOLUME指令只是起到了声明了容器中的目录作为匿名卷,但是并没有将匿名卷绑定到宿主机指定目录的功能。
假设在Dockerfile中指定了VOLUME
FROM centos
VOLUEM /data/logs
当docker run没有指定-v绑定匿名卷/data/logs时,docker就会在/var/lib/docker/volumes这个目录下创建一个目录来绑定匿名卷,可以通过docker inspect命令进行查看
数据卷容器
—volumes-from