Docker数据持久化
前言
当我们使用Docker
创建一个mysql
的container
, 数据是存储在container
内的.
如果有一天不小心执行了docker rm $(docker ps -aq)
删除所有container
. 那么mysql
里的数据也会被删掉, 这是不安全的.
我们需要将数据持久化, 存储在container
外部. 即使删除container
也不会删除原有的数据.
Data Volume 数据持久化
Volume
可以将数据持久化到宿主机的某个目录下.
我们在官方的mysql
的Dockerfile
里可以看到指定了VOLUME
.
1 | VOLUME /var/lib/mysql |
说明这个mysql
的数据存在宿主机的这个文件夹下, 但是, 不是直接存在宿主机的这个文件夹下, 里面还有多层目录.
先看看下面的例子
1 | # 1. 运行一个mysql, -v 等价于 VOLUME 关键字, -e 指定环境变量 |
删除Mysql
容器后, volume
不会一起被删除, 这样的话, 数据就不会丢失了.
那如果我想重新连接这个volume
怎么办呢? 还是用-v
参数指定.
1 | docker run -d -v my-volume:/var/lib/mysql --name my-mysql-new -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql |
Bing Mounting 绑定挂载
如果我想自定义volume
在宿主机的存储路径, 要怎么配置呢?
Bing Mounting
可以将container
里的目录和宿主机的目录做映射.
比如nginx
, 想要改里面的html
, 每次都要docker exec -it my-nginx /bin/bash
进去容器内部改.
并且, container
删掉后, 里面的html
也不见了.
使用Bing Mounting
解决这个问题.
1 | # 1. 创建一个自己的 index.html |
这样, 在外部访问nginx
时, 就可以看到被替换的html
.