容器数据卷
容器中的数据,一旦删除容器,数据就会丢失。将容器中数据同步到容器外本地的技术——数据卷。目录的挂载,将我们容器内的目录,映射挂载到Linux上面。容器的持久化和同步操作!容器间也是可以数据共享的!
数据卷的使用
- 使用命令挂载 -v
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口 containerID
测试
docker run -it -v /home/test:/home centos /bin/bash
启动容器后,发现/home
目录下出现了一个test
,再通过inspect
查看容器信息
docker inspect containerID
# -v 绑定的形式 挂载好了
"Mounts": [
{
"Type": "bind",
"Source": "/home/test",
"Destination": "/home",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
挂在完成后,对容器内文件的操作,会同步到容器外挂在目录。即使关闭容器,对容器外目录文件进行操作,启动容器后,依然会完成同步。
具名和匿名挂载
# 匿名挂载
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 查看所有的volume的情况
➜ ~ docker volume ls
DRIVER VOLUME NAME
local 33ae588fae6d34f511a769948f0d3d123c9d45c442ac7728cb85599c2657e50d
# 这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路径!
# 具名挂载
➜ ~ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
➜ ~ docker volume ls
DRIVER VOLUME NAME
local juming-nginx
# 通过 -v 卷名:容器内路径
# 查看一下这个卷
- 三种挂载方式
# 三种挂载: 匿名挂载、具名挂载、指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载 docker volume ls 是查看不到的
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/volume_nameXXX/_data
下
如果指定了目录,docker volume ls
是查看不到的,因为这个命令list
的是上面目录下的内容
通过使用具名挂载,可以方便地找到卷,大多使用具名挂载
# 通过 -v 容器内路径: ro rw 改变读写权限
ro #readonly 只读
rw #readwrite 可读可写
docker run -d -P --name nginx05 -v juming:/etc/nginx:ro nginx
docker run -d -P --name nginx05 -v juming:/etc/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
数据卷容器
多个容器之间的数据同步,使用数据卷容器
docker run --volumes-from container1 container2
- run了一个container2,它的数据与container1挂载同步
- 这种容器与容器的挂载,类似副本机制,使数据的同步在容器间传播
- 删除容器,不影响其他容器中的数据,除非删除所有容器
- 数据卷容器的生命周期一直持续到没有容器使用为止。
- 但是一旦持久化到了本地,这个时候,本地的数据是不会删除的!