本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
今天编译一天代码,不想写代码;玩玩Docker放松一下。今天学学Docker比较重要的数据卷挂载。这个玩意很重要;怎么重要只有自己去体会到底有多么重要的。先来了解下基础内容吧。
## Docker Volume
Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上(即镜像栈顶部)添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失(因为重新创建了容器)。在Docker中,只读层及在顶部的读写层的组合被称为UnionFile System(联合文件系统) 。 -Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用mount挂载一个文件系统。- 为了能够保存(
持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。
Docker Volume数据卷可以实现:
- 比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步;
- 有些文件不需要在
docker commit打包进镜像文件; - 数据卷可以在容器间共享和重用数据;
- 数据卷可以在宿主和容器间共享数据;
- 数据卷数据改变是直接修改的;
- 数据卷是持续性的,直到没有容器使用它们。即便是初始的数据卷容器或中间层的数据卷容器删除了,只要还有其他的容器使用数据卷,那么里面的数据都不会丢失;
Docker数据的持久化:
数据持久化说白了就是把Docker里的数据拷贝到宿主机上;宿主机上的数据变化Docker里数据也会发生变化;反之也是同样的。
实战操作吧
获取mysql镜像 `docker pull mysql:5.7`
运行容器,需要做数据挂载
安装启动 `mysql`,需要配置密码的,这是要注意点!
参考官网 `docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag`
我们使用挂载启动
-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`
好了;这就是挂载;就这么简单。我这边 Mac挂载目录文件还有点问题;我要去解决下;不多说了拜拜;晚安😴下期间!!!