原则
Docker 的使用原则是所有容器化的应用程序都应该是无状态的 ,即容器内部只跑业务逻辑,容器应用的所有配置文件、日志文件和持久化数据 都应该挂载到宿主机文件系统,不应该存储在容器内部,以免容器被误删或自身出现问题导致数据丢失。
MySQL 容器化方式
MySQL 属于有状态应用,若将其容器化需将其状态抽离到宿主机,其配置文件、日志文件和持久化数据都应该挂载到宿主机。
容器内各路径
通过docker pull 命令拉取下来的官方 MySQL 镜像内,有几个重要路径:
命令
$ docker run --name db -e MYSQL_ROOT_PASSword=secret -v /path/to/confdir:/etc/mysql/conf.d -v /path/to/datadir:/var/lib/mysql -d mysql:tag
参数解释
小技巧
我们可以在宿主机专门建立一个目录用来存放容器状态数据,层级结构为:
docker-container-data | - container1 | | | - conf | | | - logs (其下又可以细分路径) | | | - data | - container2 | - container3 | ...
灾难措施
将状态数据挂载宿主机的好处就是如果容器发生问题,可以启动一个新容器并将容器状态路径挂载到宿主机上的原状态路径,从而恢复生产。
可以直接将新启动的 MySQL 容器的配置和持久化数据挂载到之前容器的宿主路径,新容器便可以无缝恢复数据(配置、用户、库、表、记录均恢复)。
注意事项