一、安裝docker#
windows 和 mac 版可以直接到官網(wǎng)下載 docker desktop
linux 的安裝方法可以參考 https://www.cnblogs.com/myzony/p/9071210.html
可以在shell中輸入以下命令檢查是否成功安裝: sudo docker version
二囤躁、建立鏡像#
-
拉取官方鏡像(我們這里選擇5.7翎卓,如果不寫后面的版本號(hào)則會(huì)自動(dòng)拉取最新版)
docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mysql鏡像
-
檢查是否拉取成功
$ sudo docker images
-
一般來說數(shù)據(jù)庫容器不需要建立目錄映射
sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- –name:容器名邓线,此處命名為
mysql
- -e:配置信息,此處配置mysql的root用戶的登陸密碼
- -p:端口映射镊绪,此處映射 主機(jī)3306端口 到 容器的3306端口
- -d:后臺(tái)運(yùn)行容器寒亥,保證在退出終端后容器繼續(xù)運(yùn)行
- –name:容器名邓线,此處命名為
-
如果要建立目錄映射
duso docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
- -v:主機(jī)和容器的目錄映射關(guān)系蜘醋,":"前為主機(jī)目錄胁塞,之后為容器目錄
-
檢查容器是否正確運(yùn)行
docker container ls
- 可以看到容器ID,容器的源鏡像压语,啟動(dòng)命令啸罢,創(chuàng)建時(shí)間,狀態(tài)胎食,端口映射信息扰才,容器名字
三、連接mysql#
-
進(jìn)入docker本地連接mysql客戶端
sudo docker exec -it mysql bash mysql -uroot -p123456
-
使用遠(yuǎn)程連接軟件時(shí)要注意一個(gè)問題
我們?cè)趧?chuàng)建容器的時(shí)候已經(jīng)將容器的3306端口和主機(jī)的3306端口映射到一起厕怜,所以我們應(yīng)該訪問:
host: 127.0.0.1 port: 3306 user: root password: 123456
-
如果你的容器運(yùn)行正常衩匣,但是無法訪問到MySQL蕾总,一般有以下幾個(gè)可能的原因:
-
防火墻阻攔
# 開放端口: $ systemctl status firewalld $ firewall-cmd --zone=public --add-port=3306/tcp -permanent $ firewall-cmd --reload # 關(guān)閉防火墻: $ sudo systemctl stop firewalld
-
需要進(jìn)入docker本地客戶端設(shè)置遠(yuǎn)程訪問賬號(hào)
$ sudo docker exec -it mysql bash $ mysql -uroot -p123456 mysql> grant all privileges on *.* to root@'%' identified by "password";
原理:
# mysql使用mysql數(shù)據(jù)庫中的user表來管理權(quán)限,修改user表就可以修改權(quán)限(只有root賬號(hào)可以修改) mysql> use mysql; Database changed mysql> select host,user,password from user; +--------------+------+-------------------------------------------+ | host | user | password | +--------------+------+-------------------------------------------+ | localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E | | 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E | +--------------+------+-------------------------------------------+ 2 rows in set (0.00 sec) mysql> grant all privileges on *.* to root@'%' identified by "password"; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> select host,user,password from user; +--------------+------+-------------------------------------------+ | host | user | password | +--------------+------+-------------------------------------------+ | localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E | | 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E | | % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E | +--------------+------+-------------------------------------------+ 3 rows in set (0.00 sec)
-