Docker数据卷目录挂载

目录

1.什么是数据卷

2.使用数据卷

方式一:指定目录挂载 

方式二:匿名挂载

方式三:具名挂载

方式四:dockerfile实现目录挂载 

注意

方式五:容器之间目录挂载 



1.什么是数据卷

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

容器的持久化和同步操作!容器间也是可以数据共享的!

2.使用数据卷

验证

docker inspect 容器id或容器名

Docker数据卷目录挂载_第1张图片

方式一:指定目录挂载 

-v 主机目录:容器内目录

docker run -it -v 主机目录1:容器内目录1 -v 主机目录2:容器内目录2

示例

-d 后台运行 
-p 端口映射 
-v 卷挂载 
-e 环境配置 
-- name 容器名字 
命令:
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

方式二:匿名挂载

1.挂在不指定宿主机目录,也不使用卷名。
    -v 容器内路径
    docker run -d -P --name nginx01 -v /etc/nginx nginx

2.查看所有的volume的情况
     docker volume ls
命令结果:    
DRIVER              VOLUME NAME
local               33ae588fae6d34f511a769948f0d3d123c9d45c442ac7728cb85599c2657e50d
local            
3. 这里发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路劲!
4.匿名挂载宿主机目录:/var/lib/docker/volumes/卷名或id/_data下

方式三:具名挂载

# 1.具名挂载
-v 自定义卷名:容器内路径
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
命令结果:                  
DRIVER              VOLUME NAME
local               juming-nginx

# 通过 -v 卷名:容器内路径
# 查看一下这个卷

# 2.具名挂载宿主机目录:/var/lib/docker/volumes/卷名或id/_data下

Docker数据卷目录挂载_第2张图片

方式四:dockerfile实现目录挂载 

Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!
# 1.创建一个dockerfile文件,名字可以随便 建议Dockerfile
# 2.文件中的内容 指令(大写) 参数

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash

#这里的每个命令,就是镜像的一层!
注意这里的是匿名挂载
创建并启动dockerfile  

Docker数据卷目录挂载_第3张图片

启动镜像

 Docker数据卷目录挂载_第4张图片

注意

1.所有的docker容器内的卷,没有指定目录挂在的情况下都是在宿主机目录:
/var/lib/docker/volumes/卷名或id/_data下

2.如果是目录挂载,docker volume ls 是查看不到的 

3.# 通过 -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就说明这个路径只能通过宿主机来操作,容器内部是无法操作!

方式五:容器之间目录挂载 

容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。

但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的! 

#1.命令
--volumes-from 容器名或id

#2.实例
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01  mysql:5.7
# 这个时候,可以实现两个容器数据同步!

#3.实例
docker run -it --name dc01 zzyy/centos
docker run -it --name dc02 --volumes-from dc01 zzyy/centos
docker run -it --name dc03 --volumes-from dc01 zzyy/centos

你可能感兴趣的:(运维,docker,容器,运维)