Docker数据卷 Volume 挂载,容器路径与linux主机路径的一致性映射,mysql 实战

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

本文参考:你必须知道的Docker数据卷(Volume)  【作者是阿里云最有价值MVP,第一次见到这个称呼~_~】

1.引言

docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的时候,docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层。这时如果修改正在运行的容器中已有的文件,那么这个文件将会从只读层复制到读写层。该文件的只读版本还在,只是被上面读写层的该文件的副本隐藏。当删除docker,或者重新启动时,之前的更改将会消失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。

在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:说白了就是当我们删除容器时,为了保留容器运行期间产生的数据,通过数据卷volume技术,实现容器内部与linux主机上文件目录共享的技术。

2.数据卷

2.1、创建数据卷,新建的数据卷默认会放在linux主机的位置为: /var/lib/docker/volumes 目录中

docer volume create 数据卷名称

2.2、 查看数据卷

docker volume ls // 查看所有容器卷
docker volume inspect 数据卷名称  //查看数据卷详情

 

 

  2.3、删除数据卷

# docker stop edc-nginx // 暂停容器实例
# docker rm edc-nginx // 移除容器实例
# docker volume rm edc-nginx-vol // 删除自定义数据卷

创建使用指定卷的容器,也称之为挂载数据卷

docker run -it --name=centos01 -v myvol01:/home/centosvol01 centos /bin/bash

其中myvol01 为我们创建的数据卷 /home/centosvol01 为容器内路径 

如果不使用默认的数据卷存放路径,我们可以显式的指定一个本机路径,如下:

docker run -it --name=centos01 -v /home/share/centosvol01:/home/centosvol01 --name=centos002 centos /bin/bash

其中 /home/share/centosvol01 为本地路径  /home/centosvol01 为容器内路径

 2.4、查看容器是否数据卷挂载是否成功

docker inspect 容器ID

 

 此时,我们不管是在主机路径内新建一个文件,还是在容器内路径新建一个文件,都会展示到两个目录中。也可以理解为:这两个路径进行了双向绑定,或者一致性映射。

通过MYSQL进行实战

1、拉取Mysql镜像

docker pull mysql:5.7

2、设置MySql容器路径挂载、端口映射、登录密码 可参考官方文档:https://hub.docker.com/_/mysql

docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/comf.d -v /home/mysql/data:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

-d 后台运行

-p 端口映射

-v 数据卷挂载  两个-v 挂载两个目录

-e 环境配置,这里配置的是密码

--name 给容器起个名字

3、通过Navicat连接数据库,下载Navicat 地址:https://www.navicat.com/en/products

2022-12-09 更新

具名挂载

所谓具名挂载,就是挂载时,指定数据卷名称

1、新建MYsql 存储data的数据卷

docker volume create mysqlDatavolume

2、新建Mysql存储配置文件的数据卷

docker volume create mysqlConfvolume

3、具名挂载

docker run -d --name mysql01 -p 3316:3306 -v mysqlDatavolume:/var/lib/mysql -v mysqlConfvolume:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql

其他:

删除数据卷

docker volume rm mysqlVolume

查看数据卷

docker inspect mysqlVolume

 

 数据卷存放路径都在 /var/lib/docker/volumes 目录下

 

 

@天才卧龙的波尔克

 

 

posted @ 2022-04-07 15:24  天才卧龙  阅读(1835)  评论(0编辑  收藏  举报