一、问题
你使用MySQL镜像对外提供数据库服务,但是容器是一个无状态服务,当容器“rm”掉数据就会丢失。为了对数据库进行持久化,你需要备份该数据库。
二、解决方案
数据备份需要高可靠,可以使用几种方式结合起来。适合于容器的主要有两种方式:
- 在一个以后台运行的容器中执行一条SQL语句进行备份
在上一个例子中我们启动了一个MySQL容器叫mysqlwp,我们可以直接使用命令的方式导出数据库到宿主机如下
$ docker exec mysqlwp mysqldump --all-databases \--password=wordpressdocker \> wordpress.backup
- 将Docker宿主机上的卷挂载到MySQL容器中,实现容器和宿主机之前的文件共享
上面命令中 -v /home/304/WorkSpace/docker/mysql:/var/lib/mysql 这一行进行了宿主机和容器中卷的绑定。当完成WordPress设定以后,在宿主机就可以看到文件变动。$ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker-e MYSQL_DATABASE=wordpress-e MYSQL_USER=wordpress-e MYSQL_PASSWORD=wordpresspwd-v /home/304/WorkSpace/docker/mysql:/var/lib/mysql-d mysql$ cd mysql/$ lsauto.cnf ca-key.pem #ib_16384_0.dblwr ib_logfile0 mysql public_key.pem undo_001binlog.000001 ca.pem #ib_16384_1.dblwr ib_logfile1 mysql.ibd server-cert.pem undo_002binlog.000002 client-cert.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem wordpressbinlog.index client-key.pem ibdata1 #innodb_temp private_key.pem sys
三、讨论
这个例子使用的是Mysql数据库,也适用于Postgres和其他数据库
