docker数据卷挂载和宿主机文件/目录挂载

一、数据卷

数据卷(volume):为了解决容器和数据的耦合问题。
我们要查看和访问容器的数据,得进入到容器内部去查看。这样子就会带来几个问题:
(1)容器内的数据不便于修改
(2)数据不可复用(所有修改只针对于一个容器)
(3)升级维护困难(容器一删除,数据也会跟着删除)

数据卷是一个虚拟目录,指向宿主机的目录,实现容器目录和宿主机目录的挂载或者说是映射;
容器目录数据会同步到宿主机中,通过修改宿主机中的容器数据也可以对容器内的目录数据进行同步修改。数据卷的位置:/var/lib/docker/volumes

二、数据卷的常用命令

docker colume [COMMAND]
create :创建一个volume
inspect:显示一个或多个volume的信息
ls:列出所有的volume
prune:删除未使用的volume
rm:删除指定的一个或多个volume

三、数据卷挂载和宿主机文件/目录挂载

1. 创建一个nginx容器挂载到数据卷

nginx容器html存取的目录:/usr/share/nginx/html(可以上dockerHub查看运行指令和文件存储位置)
数据卷在挂载的时候,如果数据卷不存在会自动创建,存在则挂载
docker数据卷挂载和宿主机文件/目录挂载_第1张图片

像有些镜像在创建容器的时候会自动进行数据卷挂载,可以使用docker inspect 容器名 查看Mounts ,看是否有挂载数据卷

例如我这里创建了一个mq容器,自动挂载了数据卷(lib下的docker快捷方式会跳转到 /www/server/docker/volumes,本质是在/www/server/docker/volumes)
docker数据卷挂载和宿主机文件/目录挂载_第2张图片

2.宿主机文件/目录挂载

(1)使用mysql举例,再宿主机tmp目录下创建mysql的配置文件目录和数据文件目录

docker数据卷挂载和宿主机文件/目录挂载_第3张图片
(2)将自己的配置文件上传到宿主机的配置文件目录之下
docker数据卷挂载和宿主机文件/目录挂载_第4张图片
(3)在docker hub上查看mysql容器的创建指令
docker数据卷挂载和宿主机文件/目录挂载_第5张图片
(4)在docker hub找到mysql容器默认的配置文件目录位置

/etc/mysql/conf.d 和 /etc/mysql/mysql.conf.d文件会合并到/etc/mysql/my.cnf文件中。
/etc/mysql/my.cnf文件也有一些mysql容器默认的配置,所以我们不要将/etc/mysql/my.cnf文件与宿主机的mysql配置文件挂载,避免被覆盖掉;
可以将宿主机的配置文件和 /etc/mysql/mysql.conf.d进行挂载,这个时候mysql保留原有默认的配置并使用我们的mysql配置信息。

docker数据卷挂载和宿主机文件/目录挂载_第6张图片

(5)在docker hub找到mysql的数据文件目录
docker数据卷挂载和宿主机文件/目录挂载_第7张图片
(6) 下面创建容器并实现目录挂载

docker run --name mysql-volume  \
-e MYSQL_ROOT_PASSWORD=123  \
-p 33066:3306  \
-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf  \
-v /tmp/mysql/data:/var/lib/mysql \
-d mysql:5.7.25

可以事先上传mysql镜像文件到宿主机,再使用docker加载mysql的tar文件,或者在创建容器的时候再自己生成; -e MYSQL_ROOT_PASSWORD:初始化root用户密码
docker数据卷挂载和宿主机文件/目录挂载_第8张图片

(7) 文件成功挂载,容器的数据复制到宿主机中
docker数据卷挂载和宿主机文件/目录挂载_第9张图片
(8)使用docker inspect mysql-volume 查看容器挂载后目录位置 和容器的数据存储位置
docker数据卷挂载和宿主机文件/目录挂载_第10张图片
(9)查看容器的数据目录位置
docker数据卷挂载和宿主机文件/目录挂载_第11张图片
(10)查看挂载容器数据后的目录位置
docker数据卷挂载和宿主机文件/目录挂载_第12张图片

3. 数据卷和宿主机目录/文件挂载的区别

容器和宿主机文件挂载方式:
-v volume:容器内目录
-v 宿主机文件:容器内目录
-v 宿主机目录:容器内目录

(1)数据卷挂载耦合度低,由docker来管理目录
(2)目录挂载耦合度高,需要我们自己管理目录,目录容易查找

你可能感兴趣的:(docker)