一、问题

你使用MySQL镜像对外提供数据库服务,但是容器是一个无状态服务,当容器“rm”掉数据就会丢失。为了对数据库进行持久化,你需要备份该数据库。

二、解决方案

数据备份需要高可靠,可以使用几种方式结合起来。适合于容器的主要有两种方式:

  1. 在一个以后台运行的容器中执行一条SQL语句进行备份

在上一个例子中我们启动了一个MySQL容器叫mysqlwp,我们可以直接使用命令的方式导出数据库到宿主机如下

  1. $ docker exec mysqlwp mysqldump --all-databases \
  2. --password=wordpressdocker \
  3. > wordpress.backup
  1. 将Docker宿主机上的卷挂载到MySQL容器中,实现容器和宿主机之前的文件共享
    1. $ docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker
    2. -e MYSQL_DATABASE=wordpress
    3. -e MYSQL_USER=wordpress
    4. -e MYSQL_PASSWORD=wordpresspwd
    5. -v /home/304/WorkSpace/docker/mysql:/var/lib/mysql
    6. -d mysql
    7. $ cd mysql/
    8. $ ls
    9. auto.cnf ca-key.pem #ib_16384_0.dblwr ib_logfile0 mysql public_key.pem undo_001
    10. binlog.000001 ca.pem #ib_16384_1.dblwr ib_logfile1 mysql.ibd server-cert.pem undo_002
    11. binlog.000002 client-cert.pem ib_buffer_pool ibtmp1 performance_schema server-key.pem wordpress
    12. binlog.index client-key.pem ibdata1 #innodb_temp private_key.pem sys
    上面命令中 -v /home/304/WorkSpace/docker/mysql:/var/lib/mysql 这一行进行了宿主机和容器中卷的绑定。当完成WordPress设定以后,在宿主机就可以看到文件变动。

三、讨论

这个例子使用的是Mysql数据库,也适用于Postgres和其他数据库