这是voidAlex原创的第十五篇博文。

数据卷和数据卷容器

数据卷

Docker下数据卷是一个可供容器直接使用的特殊目录,有如下特性:

  • 数据卷可以在一个或多个容器见共享和重用
  • 对数据卷的修改会立即生效
  • 对数据卷的操作不影响镜像
  • 数据卷的生命周期独立于容器

数据卷容器

数据卷容器也是一个正常的容器,专门提供数据卷供其他容器挂载的。

创建数据卷容器

创建一个名为sqldata的数据卷容器:

1
docker run -d -v /data/mysql:/var/lib/mysql --name sqldata training/postgres

这个命令会创建一个名为sqldata的数据卷容器,并且将容器中的/var/lib/mysql目录映射到宿主机的/data/mysql下。

创建mysql容器并挂载数据卷容器

首先拉去mysql的镜像:

1
docker pull mysql

创建mysql容器,并挂载数据卷sqldata

1
docker run -d --name myMysql --volumes-from sqldata -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql

这个命令会创建一个MySQL容器,为root用户设置密码为123456,并且挂载sqldata数据卷。

进入到myMysql容器中,并且登录到mysql服务器:

1
2
docker exec -t -i myMysql /bin/bash
mysql -uroot -p

这时候,root用户只能通过localhost访问,增加用户,授予其对应权限:

1
grant all on *.* to 'test'@'%' identified by '1234';

创建test用户后,就可以以正常访问mysql数据库的方式远程访问myMysql容器了。

通过数据卷容器备份、恢复和迁移数据

备份

创建一个新容器,加载sqldata容器中的数据卷,并从主机挂载当前目录到容器的/backup目录。容器启动后,将sqldata数据卷备份为当前容器中的/backup/backup.tar文件。

1
docker run --volumes-from sqldata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data/mysql

恢复

先创建一个带有空的数据卷的容器:

1
docker run -v /data/mysql:/var/lib/mysql --name backupdata ubuntu /bin/bash

再创建另一个容器,挂载backupdata容器中的数据卷,解压备份文件到挂载的容器数据卷中:

1
docker run --volumes-from backupdata -v $(pwd):/backup busybox tar xvf /backup/backup.tar