使用docker搭建mysql和phpmyadmin

由于项目需要数据库,需要本地搭建测试,但毕竟是个人电脑,所以打算在docker下搭建mysql和phpmyadmin。

安装docker

本人Debian9 amd64,参照官网教程安装的docker

卸掉旧版(若有)

1
sudo apt-get remove docker docker-engine docker.io

添加docker的apt源

1
2
3
4
5
6
7
8
9
10
11
12
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable"

1
sudo apt-get install docker-ce

使用国内镜像源(可选)

若在安装docker或后面的image网速感人(比如本人初次就这样),可以更换国内镜像。参见USTC的Docker CE 源使用帮助Docker Hub 源使用帮助

更换apt源

编辑/etc/apt/sources.list,找到download.docker.com,替换成mirrors.ustc.edu.cn/docker-ce

更换hub源

新建或更改文件/etc/docker/daemon.json(应该是原本没有的),加入

1
2
3
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

重启dockerd

1
sudo service docker restart

修改docker使用权限(可选)

每一次docker操作都需要sudo不太方便,可以将当前用户加入docker用户组

编辑/etc/group,找到docker用户组,添加当前用户。

忘记是否需要重启dockerd以及注销用户重新登录。

下载并运行mysql和phpmyadmin

操作参照docker hub的两个说明:MYSQL,phpmyadmin

下载image

1
docker pull mysql phpmyadmin/phpmyadmin

运行

由于希望phpmyadmin在每次运行结束之后都删除掉(image仍保留),而MYSQL则保留(不想每次都要先设置下权限,后面会提到),所以在前者加了--rm参数

1
2
docker run --name sql -e MYSQL_ROOT_PASSWORD=ChangeThePassword -p 3306:3306 -d mysql/mysql-server:5.7
docker run --rm --name phpmyadmin -d --link sql:db -p 8080:80 phpmyadmin/phpmyadmin

运行完后,浏览器打开http://127.0.0.1:8080即可浏览phpmyadmin。输入用户名root密码ChangeThePassword登录。

这时候会报错,说xxxip不允许登录该MYSQL,需要进mysql修改修改权限。

设置MYSQL允许远程登录

步骤参照Set up a remote MySQL database connection

命令行执行

1
docker exec -ti sql bash

这时候已经进入mysql所在容器,然后再执行以下命令以root身份登录

1
mysql -p

这时会弹出提示要求输入密码,输入完回车进入,开始配置权限

1
2
3
mysql> use mysql;
mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'ChangeThePassword';
mysql> FLUSH PRIVILEGES;

上面的命令允许root从任何ip(命令中的%)以’ChangeThePassword’密码登录,并以任何操作(命令中的ALL)操作所有库所有表(命令中的.

推出终端,现在再在浏览器上试试,很好成功了。

停止以及后续使用

停止的话只需要docker stop sql phpmyadmin即可,不过由于对于mysql所在的容器的操作已经保存,所以下次启动mysql时只需要docker start sql即可

但由于phpmyadmin在每次运行结束后就删除了,所以再次运行时操作不变,即

1
docker run --rm --name phpmyadmin -d --link sql:db -p 8080:80 phpmyadmin/phpmyadmin