原则使用Docker的原则是所有容器化的应用都应该是无状态的,即容器内部只运行业务逻辑,所有的配置文件、日志文件和持久化的所有数据都应该挂载到宿主机文件系统,不应该存放在容器内部,以免容器误删除或自身问题导致数据丢失。MySQL容器化方法MySQL是一个有状态的应用程序。如果它是容器化的,它的状态需要被提取到宿主机上,它的配置文件、日志文件和持久化数据应该被挂载到宿主机上。容器中的每个路径都由dockerpull命令拉取。在MySQL官方镜像中,有几个重要的路径:配置文件镜像中MySQL的配置文件路径为/etc/mysql,其中包含my.cnf配置和一个conf.d文件夹,my.cnf文件包含一些basesettings,我们的自定义配置应该写在conf.d文件夹下的配置文件中,覆盖basesetting。conf.d文件夹下默认有两个配置文件:docker.cnf和mysql.cnf。后文将配置路径挂载到宿主机后,需要将这两个自定义配置文件复制到宿主机中。配置路径。持久化数据MySQL在镜像中的持久化数据存储在/var/lib/mysql下。命令$dockerrun\--namedb\-eMYSQL_ROOT_PASSWORD=secret\-v/path/to/confdir:/etc/mysql/conf.d\-v/path/to/datadir:/var/lib/mysql\-dmysql:tag参数说明--name容器名-e为新容器设置环境变量,容器中的MySQL会用这个初始化root用户密码-v两个-v参数分别设置自定义配置文件目录和持久化数据容器中MySQL的目录挂载到宿主机,冒号前是宿主机目录,容器目录后-d后台启动容器的提示我们可以在宿主机上创建一个专门的目录来存放容器状态数据,层级结构为:docker-container-data|-container1|||-conf|||-logs(其下可细分路径)|||-data|-container2|-container3|...灾难措施好处挂载状态数据到宿主机是,如果容器有问题,可以启动一个新的容器,挂载容器状态路径到主机上的原始状态路径以恢复生产。可以直接将新启动的MySQL容器的配置和持久化数据挂载到之前容器的宿主机路径,新容器可以无缝恢复数据(配置、用户、库、表、记录都恢复)。注意事项不要将两个正在运行的容器的状态路径挂载到同一个主机路径。如果两个容器同时在同一个主机路径下写入状态,容器应用程序在读取状态时将无法识别状态,从而导致崩溃。如果新启动的容器要挂载之前容器的主机数据路径,-eMYSQL_ROOT_PASSWORD=foo命令参数设置的root用户密码环境变量将被忽略,因为挂载的数据路径已经包含MySQL用户信息表,root用户的密码之前已经设置好了。
