我们知道,docker可以将应用和环境打包成一个镜像!
如果所有的数据都存储在容器中,如果把容器删除,那么数据也会被删。
我们希望,容器中写入数据的路径可以和本地产生映射,也就是说,每往容器写入数据,都会自动同步在本地,相当于本地有一份副本!
这就用到了卷技术,目录的挂在,将我们容器内的目录,挂载到Linux上面!
总结:容器的持久化和同步操作,容器间也是可以数据共享的!
命令
-v 本地文件路径:容器文件路径
例子
启动centos容器
容器内的/home1路径和本地的/root/ldj路径会同步
容器/home文件更新,会即使同步到本地的/root/ldj,反之也是如此
docker run -it -v /root/ldj:/home centos
查看是否映射成功
如果将容器停掉,本地修改文件,容器启动后,也是会同步
下载mysql镜像并启动容器
docker run -d -p 3310:3306 --name mysql001 -v /home/mysql/conf.d:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
测试连接成功
本地已经映射成功
新建数据库ldj_db,本地已经同步
如果将mysql容器删除,本地数据卷不会丢失,这就实现了容器数据持久化功能
-v 容器内路径
查看所有的volume的情况
这种匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径
我们通过inspect命令查看到 匿名挂载路径具体在哪个卷,还有卷在本地的存储位置(默认在/var/lib/docker/volumes/卷名称/_data)
具名挂载
-v 卷名称:/容器内路径
docker run -d -P --name nginx02 -v juanming-nginx:/etc/nginx nginx
[root@l4 ~]# docker inspect d2f678800619 | grep Mounts -A 10
"Mounts": [
{
"Type": "volume",
"Name": "juanming-nginx",
"Source": "/var/lib/docker/volumes/juanming-nginx/_data",
"Destination": "/etc/nginx",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
[root@l4 ~]# docker volume ls
DRIVER VOLUME NAME
local 0f05f649255468953b678b6be3df033900e2909b161a6a87bce7d68f1d1438ce
local 04d239765aa5cb027d245938208e663175e8ad8a13bed0938c1fb4f2763de357
local 5cef8192d4ccae924d338552246f24c08d2bb683d232f4559ba71f142717a897
local 20b1635f15ec08063d57980deeb127569a81c8abdea59e412dfd2f37e6060e00
local 68c19385712a781ff41a7fe279e7ad69548ab21c77154d4ed156ba9293d506e5
local 69fc157e856adcb0898a8642701d2c336ebe081679f9b00ef13bdd8f74ee6a3a
local 455cf6525acd1b8bc2dafea021bd98a9add08efa4b31f338bd4b51012555c0b0
local 821da2a90c4945246d3a9c9144a92fa6ac5c9b8306fc91d69f1863f5c73df8ba
local a5fc6d7a4b3061616e185bb811689229da4e97d6d2d09fd8f559021a75754e35
local e46bcf20b5b74dae859437505b4ac23748b32d922f5e635c18941ca5bbf64aae
local eb1b95902b4c0869134f245926cd1311767e4f63e7667ae0e3b81e51debb884d
local fbbc87f4640ba1e7a40514c7fdaa792fea7fc2d9418ab13cce513c722e4be28e
local juanming-nginx
[root@l4 ~]#



