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
————————————————