使用数据卷
方式一:直接命令挂载 -v
# docker run -it -v 主机目录:容器内目录
docker run -it -v /home/test:/home centos /bin/bash
docker inspect 容器id #查看容器信息
修该容器内的目录,主机对应的目录也会修改,相反修改主机的挂载目录文件,容器内也是会修改。即使容器没有启动也是如此。这样方便启动容器,把配置文件挂载在外面,进行修改。不用再进容器里面修改配置文件。
实战:挂载MYSQL
docker run -d -p 3310:3306 -v /home/mysql01/conf:/etc/mysql/conf.d -v /home/mysql01/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Xl5680429 --name mysql01 mysql:8.0;
#说明
-d 后台运行
-p 映射端口(主机端口:容器端口)
-v 数据卷挂载文件:第一个是挂载配置文件,第二个是挂载数据文件
-e 环境配置,配置密码
--name 容器名字
具名和匿名挂载
#匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx;
#具名挂载 docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx;
#这里只指定容器内的路径,没指定容器外的路径,可以通过 docker inspect查看。
# 查看所有卷“volume”的情况
docker volume ls;
#匿名挂载结果
DRIVER VOLUME NAME
local fd931a191fcd9b0ced88f8d11595847b18764c5d6af21ac71bd7159d49638206
#匿名挂载结果
DRIVER VOLUME NAME
local juming-nginx
#查看对应的路径
docker volume inspect juming-nginx
所有的docker容器内的卷,没有指定目录的情况下都是在“/var/lib/docker/volumes/卷名”
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /主机路径:容器内路径 #指定路径挂载
拓展
#通过 -v 容器内路径,ro rw 改变读写权限
ro readonly 只读
rw readwrite 可读可写
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx;
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx;
#一定设定了权限 ro 说明这个路径只能通过主机来操作,容器内部无法操作!
数据卷容器
docker run -it --name docker02 --volumes-from docker01 centos:1.0
#使用--volumes-from 来共享一个文件。docker02共享docker01的文件,如果建立docker03也是一样,就是docker01删除后还是依旧可以访问,属于拷贝共享,在任何一个容器内增删改文件,其他容器都会同意操作。
多个MySQL同步数据
docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=Xl5680429 --name mysql02 --volumes-from mysql01 mysql:8.0
结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一但你持久化到了本地,这个时候,本地的数据是不会删除的!