Volume 提供独立于容器之外的持久化存储
1.1 在容器中的任何改动是不会被保存的,Volume 提供容器的持久化存储。 1.2 可以提供容器之间数据共享。
第一种运行方式
vagrant@ubuntu-xenial:/data/www/d2$ docker run -d --name nginx-1.0 -v /usr/share/nginx nginx #以守护进程的方式启动一个name为nginx-1.0 指定nginx的解析路径
5efac15b31ba860101d49f5864c8c998347aa8ea7a748ba9b3d02d9777519c3a
vagrant@ubuntu-xenial:/data/www/d2$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5efac15b31ba nginx "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 80/tcp nginx-1.0
44eac38c0fe2 dockerfiel/nginx "/usr/sbin/nginx -g …" 17 minutes ago Up 17 minutes 0.0.0.0:80->80/tcp romantic_ishizaka
vagrant@ubuntu-xenial:/data/www/d2$ docker inspect nginx-1.0 # 查看nginx-1.0 的元信息
[
{
"Mounts": [
{
"Type": "volume",
"Name": "1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b",
"Source": "/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data",
"Destination": "/usr/share/nginx",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
}
]Source:"/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data" #宿主机的这个物理路径 Destination:"/usr/share/nginx" #挂载到nginx-1.0的解析路径 下面我们修改一下宿主机的这个物理路径下的文件,然后去进入到nginx-1.0的解析目录看看修改的内容是否一样
vagrant@ubuntu-xenial:/data/www/d2$ sudo chmod -R 775 /var/lib/docker/volumes/
vagrant@ubuntu-xenial:/data/www/d2$ cd /var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data/html/
vagrant@ubuntu-xenial:/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data/html$ ls
50x.html index.html
vagrant@ubuntu-xenial:/var/lib/docker/volumes/1c923bce076155554f06705fbfaeaca0c3d6cad3c8211602138cf48c77b13e8b/_data/html$ sudo vi index.html
清空内容 使用vi命令gg以及dG清空内容 写入
docker
docker
docker进入容器
vagrant@ubuntu-xenial:/data/www/d2$ docker exec -it nginx-1.0 /bin/bash # docker exec -it 容器名称 /bin/bash
root@5efac15b31ba:/# cat /usr/share/nginx/html/index.html # 容器内部
docker
docker
docker显然验证了。
其他运行方式
docker run -d -v $PWD/html:/usr/share/nginx/html nginx-1.0
解释一下:$PWD 就是当前目录
vagrant@ubuntu-xenial:/data/www/d2$ echo $PWD
/data/www/d2
vagrant@ubuntu-xenial:/data/www/d2$创建一个仅仅有数据的容器并把这个数据容器挂载到其他容器里面去
vagrant@ubuntu-xenial:/data/www$ sudo mkdir -m 755 data && cd data
vagrant@ubuntu-xenial:/data/www/data$ docker create -v $PWD/data:/var/mydata --name data_container ubuntu #data_container 挂载到ubuntu
2f6145f1627a6fa33e2f588c804228515d19cdba87e20ff3b926adcb9b7c8aa7
vagrant@ubuntu-xenial:/data/www/data$ docker run -it --volumes-from data_container ubuntu /bin/bash
root@b08eb5b02ce0:/# mount
/dev/sda1 on /var/mydata type ext4 (rw,relatime,data=ordered) #挂载显示
root@b08eb5b02ce0:/var/mydata# touch index.txt
root@b08eb5b02ce0:/var/mydata# ls
index.txt
root@b08eb5b02ce0:/var/mydata#
root@b08eb5b02ce0:/var/mydata# exit
exit
vagrant@ubuntu-xenial:/data/www/data$ ls
data
vagrant@ubuntu-xenial:/data/www/data$ cd data/
vagrant@ubuntu-xenial:/data/www/data/data$ ls
index.txt仅有数据的容器可以被多个容器挂载,这样就达到了容器间的数据互通