Docker是一个开源的应用容器引擎,它能够实现应用部署的自动化。此外,容器是完全使用沙箱机制,容器之间的环境相互独立,不会相互干扰。
phpMyAdmin能够为你的MySQL提供直观、方便的Web管理界面,非常好用。
在这里,由于我不想让phpMyAdmin的PHP、Apache环境与服务器上原有环境混杂到一起,因此采用Docker+phpMyAdmin的方式。
1. 修改MySQL配置
和远程访问一个道理,要想从容器中的phpMyAdmin访问运行在服务器上的MySQL,必须先修改MySQL配置文件,允许非localhost的IP访问。
打开/etc/mysql/mysql.conf.d/mysqld.cnf配置文件,进行如下修改:
bind-address = localhost
# 找到上式,修改为
bind-address = xxx.xx.xx.x # 你的docker0的ip地址
# 或者修改为
bind-address = 0.0.0.0 # 表示允许任意ip地址访问
1
2
3
4
5
然后,还需要将你的账号也设置为允许从远程登陆(默认为localhost)。为了完成这一操作,先通过localhost登入mysql,更改mysql数据库里的user表里对应你账号的host项,从localhost改成%。具体操作如下:
# 使用mysql数据库
use mysql;
# 将root账号(可替换成其他)的host修改为%
update user set host = '%' where user = 'root';
# 查看修改结果
select host, user from user;
1
2
3
4
5
6
最后,不要忘记重启mysql:sudo service mysql restart
至此,你的MySQL和对应账号已经开放了从Docker容器中访问的权限。
2. 创建phpMyAdmin镜像
# PMA_HOST设置为连接的MySQL主机名或ip地址
# PMA_PORT设置为端口号
# 8080:80,将宿主机的8080端口映射到镜像的80端口
docker run -d
--name myadmin
-e PMA_HOST=$(ip route show | grep docker0 | awk '{print $9}')
-e PMA_PORT=3306
-p 8080:80
phpmyadmin/phpmyadmin
1
2
3
4
5
6
7
8
9
值得一提的是,这里是通过桥接网络模式(bridge mode)运行的镜像,因此在镜像中可通过docker0访问宿主网络。
3. 访问数据库
此时,可以通过8080端口访问到phpMyAdmin的管理界面了,即http://your_domain_name:8080/。
4. One More Thing
把MySQL随意地暴露在网络下无疑会带来安全隐患,从安全角度考虑,应该为防火墙设置白名单规则,只有白名单的IP才能够连接数据库。
# ufw防火墙,提供一个参考思路而已
ufw insert 1 allow from 172.17.0.3 to any port 3306
————————————————