如何在Docker上运行MySQL
MySQL是最常用的开源关系数据库管理系统。
在本教程中,我们将学习如何在Docker引擎上运行MySQLDocker。
- 下载Docker MySQL镜像。
- 启动新的MySQL容器。
- Docker MySQL环境变量。
- 与另一个Docker容器的链接。
- 启动MySQL容器,远程访问。
- 使用自定义MySQL配置文件。
- 使用自定义数据目录。
- 来自主机的备份数据库。
下载docker mysql镜像
要运行MySQL容器,我们需要一个MySQL镜像。
我们可以使用Docker Lifl命令获取最新版本的MySQL镜像。
docker pull mysql:latest
或者我们可以下载特定版本的MySQL Docker镜像,下面的命令将从Docker MySQL存储库下载“MySQL 5.7”镜像。
docker pull mysql:5.7
找到可用版本转到Docker集线器并搜索MySQL。
启动新的MySQL容器
Docker MySQL容器非常直接。
启动新服务器实例非常简单。
以下示例将从“MySQL 5.7”镜像中启动名为“mysql_server”的新MySQL实例。
docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
请注意,最重要的选项是MySQL_Root_Password,我们还使用-d选项将容器运行作为后台进程。
我们可以使用Docker Exec命令获取与MySQL实例的交互式shell会话。
docker exec -it mysql_server bash
要从主机获取到MySQL控制台的直接交互式会话,请键入:
docker exec -it mysql_server mysql -uroot -p
Docker MySQL环境变量
当我们启动一个新实例时,我们可以通过使用docker运行命令传递一个或者多个环境变量来调整MySQL实例的配置。
下表显示了与Docker MySQL一起使用的环境变量。
- mysql_root_password - 设置mysql root用户的密码。这个变量是强制性的。
- mysql_user,mysql_password - 创建新的MySQL用户并设置用户密码。这是可选的。
- mysql_database - 在启动时创建一个新数据库。这是可选的。如果创建用户,则将授予用户对数据库的超级用户访问权限。
- mysql_allow_empty_password - 如果设置为“是”,则新容器可以以空的根密码开头。
- mysql_random_root_password - 如果设置为“是”,将创建root用户的随机初始密码。
在以下示例中,我们创建一个新的容器,其中包含一个名为“test_db”的新MySQL数据库。
docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test_db mysql:5.7
使用新的MySQL用户启动一个容器:
docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test_db -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypass mysql:5.7
使用空root密码启动MySQL容器:
docker run -d --name mysql_server -e MYSQL_ALLOW_EMPTY_PASSWORD="yes" -e MYSQL_ROOT_PASSWORD="" mysql:5.7
与另一个Docker容器的链接
通常,我们需要将MySQL实例与其他容器链接。
例如,以下命令将启动新的Apache Httpd容器,其中包含一个名为“mysql_server”的MySQL实例的链接。
docker run -d --name apache-web --link mysql_server:mysql httpd:latest
Apache容器现在可以访问MySQL容器中的MySQL服务器。
连接到MySQL Server时,MySQL主机应为MySQL容器的名称或者ID。
mysql -p -h mysql_server
使用远程访问启动MySQL容器
为了允许远程访问MySQL容器,我们需要使用容器端口3306映射主机端口3306,我们创建新实例时。
docker run -d -p 3306:3306 --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
从主机中可以使用127.0.0.1作为MySQL主机访问MySQL控制台。
mysql -p -h 127.0.0.1
请注意,在创建容器时,应完成端口映射。
使用自定义MySQL配置文件
启动配置文件是/etc/mysql/my.cnf文件,该文件依次包括以/etc/mysql/conf.d或者/etc/mysql/mysql.conf.d目录中找到的任何文件。
CNF延期。
当我们启动一个新的容器时,我们可以用主机上的目录替换配置目录。
例如,在主机上创建一个名为/var/config的目录。
mkdir /var/config
然后在/var/config目录中创建mysqld.cnf文件,并将任何MySQL配置添加到MySQLD.CNF文件中。
touch /var/config/mysqld.cnf
现在我们可以将/var/config目录挂载为mysql容器中的/etc/mysql/mysql.conf.d。
docker run -d --name mysql_server -v /var/config:/etc/mysql/mysql.conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
根据上面的示例,我们使用-v标志替换使用local/var/config目录的/etc/mysql/mysql.conf.d目录。
使用自定义数据目录
同样的方式我们还可以从主机安装MySQL数据目录。
docker mysql上的默认数据目录是“/var/lib/mysql”。
首先,在主机上创建数据目录:
mkdir -p /mysql/data
然后使用本地数据目录启动服务器实例:
docker run -d --name mysql_server -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
备份来自主机的数据库
使用docker exec命令,我们可以从主机创建数据库转储。
以下命令将从“mysql_server”实例转储“example_db”数据库。
docker exec mysql_server sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" example_db' > example_db.sql
以下命令将从MySQL容器中转储所有数据库。
docker exec mysql_server sh -c 'exec mysqldump --all-databases -u root -p"$MYSQL_ROOT_PASSWORD"' > all_databases.sql