本文用最直接的方式介绍如何在Docker中运行MySQL,如果你只是想让MySQL运行起来,或者想了解一些相关的知识,这篇文章就能够给你想要的。

1.拉取镜像

docker pull mysql

如果不显示指定Tag,默认为latest。下面拉取的是Tag为5.7.18的MySQL镜像

docker pull mysql:5.7.18

Docker商店的地址:https://hub.docker.com
MySQL镜像的地址:https://hub.docker.com/_/mysql/

拉取结束后,可以通过以下命令查看已拉取的镜像

docker images

如下图所示:

在Docker中运行MySQL简介教程-程序旅途

2. 运行容器

执行下面的命令启动一个MySQL容器

docker run --name bob-mysql -p 3306:3306 -v ~/mysql:/var/lib/mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.18

下面解释一下这条命令

docker run ——docker从镜像启动一个容器命令

--name——这是docker run命令的参数,就是给要启动的容器起个名字

-p ——端口映射,前面的是宿主端口号,后面的是容器端口号

-v ——挂载宿主机目录到镜容器里,前面的是宿主机目录,后面的是容器目录,那么后面的目录为什么是/var/lib/mysql呢?执行docker inspect -f {{.Config.Volumes}} bob-mysql就可以看到了

--restart——故障或开机重启,显示退出除外

-e——指的是环境变量,在启动MySQL镜像时,可以传入一个或多个环境变量修改MySQL实例的配置。这里一定要注意的是启动容器的数据目录已经包含了数据库,这时环境变量就不起作用了。

MySQL镜像支持一下环境变量
MYSQL_ROOT_PASSWORD —— 设置MySQL root用户的密码
MYSQL_DATABASE —— 指定在镜像启动时创建的数据库名称,如果同时指定了MYSQL_USER, MYSQL_PASSWORD,则会授予该用户对这个数据库ALL的权限(GRANT ALL)
MYSQL_USER, MYSQL_PASSWORD —— 创建一个用户并设置它的密码
MYSQL_ALLOW_EMPTY_PASSWORD —— 设置为yes允许容器启动时root用户密码留空
MYSQL_RANDOM_ROOT_PASSWORD —— 为root用户生成随机密码(使用pwgen)
MYSQL_ONETIME_PASSWORD —— 设置root用户初始化完后过期,强制登录时修改密码。注意这个功能只支持MySQL 5.6+

进入容器

使用下面的命令进入容器

docker exec -it bob-mysql /bin/bash

登录MySQL

使用下面的命令登录MySQL

mysql -uroot -p

输入密码后,登录MySQL成功

在Docker中运行MySQL简介教程-程序旅途

创建MySQL用户

使用下面的命令可以创建MySQL用户

mysql> use mysql;
mysql> create USER 'chengxulvtu'@'%' IDENTIFIED BY '123456';

下面解释以下这条命令
chengxulvtu —— 这是要创建的用户名称
% —— 指定用户允许从哪里的主机登录,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登录,可以使用通配符%,上面的命令中就是允许chengxulvtu这个用户从任意的主机登录。
123456 —— 这个是chengxulvtu用户的密码

所以上面的命令用一句话说就是:创建一个名为chengxulvtu的用户,将它的密码设置为123456,并允许从任意的主机登录。

用户授权

MySQL授权的命令格式如下:

GRANT privileges ON databasename.tablename TO 'username'@'host'

下面给出几个例子:

1. 授予chengxulvtu所有数据库有所有的权限

grant all on *.* to 'chengxulvtu'@'%'

2. 授予chengxulvtu只有myql数据库的所有权限

grant all on mysql.* to 'chengxulvtu'@'%'

3. 授予chengxulvtu只有mysql数据库的查询权限

grant select on mysql.* to 'chengxulvtu'@'%'

4. 授予chengxulvtu只有mysql数据库user表的查询权限

grant select on mysql.user to 'chengxulvtu'@'%'

这里就先举这几个例子,详细可自行查阅。

如果想让chengxulvtu也有授予其他用户权限的权限,则后面要带上WITH GRANT OPTION

grant all *.* to 'chengxulvtu'@'%' with grant option;

本文关于在Docker中运行MySQL容器就介绍这些,希望对你有所帮助。


2019.9.28补充

启动容器时,如果需要忽略表明大小写,需要指定 --lower_case_table_names=1   参数

欢迎扫描下方二维码关注“chengxulvtu"公众号。
在Docker中运行MySQL简介教程-程序旅途