Docker安裝Mysql和Redis並本地成功連線
哈嘍,大家好,我是強哥。
最近強哥在學習一個開源專案,由於想要在本地部署專案以便更好的進行專案預研,所以需要在本地搭建專案環境。
專案中有用到MySQL和Redis,可是如果在本地直接安這兩個軟體強哥又覺得很不舒服,機子上有各種各樣的開發軟體以後也不好維護。恰巧,自己機子上安裝了Docker,那為什麼不直接把MySQL和Redis安到Docker上呢?
說幹就幹,這篇文章只是簡單的記錄下Docker安裝MySQL和Redis的步驟方法,可以說是個備忘錄吧。畢竟搭建環境還是可能時不時要用到的,自己實踐好的拿來就用,比較省時間。
安裝Mysql
1、查詢映象
docker search mysql
2、下載映象
選擇自己想要的版本,然後下載映象
docker pull centos/mysql-57-centos7
3、通過映象建立容器並執行:
# 啟動容器,埠對映到3308,掛載之前的資料卷
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 \
-p 3306:3306 f83a2938370c
命令解釋:
-
f83a2938370c
為Image ID - -d 是說讓我們的容器在後臺執行
- -e 給新建立的資料庫設定root密碼
- -p 3306:3306 把所有對宿主機3306埠的tcp報文轉發到容器的3306埠
4、配置外部連線
容器執行起來後,Mysql還不能直接連,需要配置許可權、密碼相關資訊。
//進入容器: docker exec -it 62349aa31687 /bin/bash //進入mysql: mysql -uroot -p123456 //使用mysql庫 mysql> use mysql; //更新域屬性,'%'表示允許外部訪問: mysql> update user set host='%' where user ='root'; //重新整理許可權: mysql> flush privileges; //授權使用者,你想root使用密碼從任何主機連線到mysql伺服器 mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin123' WITH GRANT OPTION; mysql> flush privileges; //如果你想允許使用者root從ip為192.168.1.104的主機連線到mysql伺服器 mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.104' IDENTIFIED BY 'admin123' WITH GRANT OPTION; mysql> flush privileges;
配置完上面的資訊之後,就可以直接在外部連線到Docker中的Mysql容器了
這裡要說明一點,如果使用的是Dbeaver連線的MySQL8的話,如果直接連還會報錯:Public Key Retrieval is not allowed
。
這時,只需要在Dbeaver中,連線設定->驅動屬性中的allowPublicKeyRetrieval
設定成true
:
之後就能正常連線了:
5、Linux和Windows的區別
對了,強哥在安完Mysql併成功連線後,在使用專案的初始化指令碼時,還遇到一個坑,就是專案的sql指令碼使用的是小寫的表名。會使得專案在初始化的時候報錯:提示表不存在問題:Table 'xxx.QRTZ_LOCKS' doesn't exist。
這時候就要確認mysql資料庫是否區分大小寫。方法:使用show Variables like '%table_names'
檢視lower_case_table_names
的值,0代表區分,1代表不區分。
LINUX下的MYSQL預設是要區分表名大小寫的 ,而在windows下表名不區分大小寫
所以,如果是Docker安裝的話,肯定就是區分大小寫了,讓MYSQL不區分表名大小寫的方法其實很簡單:
- 用ROOT登入,修改/etc/my.cnf
- 在[mysqld]下加入一行:
lower_case_table_names=1
- 重新容器即可
安裝Redis
其實有了上面安裝Mysql的經驗,按差不多的順序安裝Redis就可以了。
1、查詢映象
docker search redis
2、下載映象
選擇自己想要的版本,然後下載映象
docker pull redis
3、執行Redis容器
docker run --name redis -d -p 6379:6379 5d44f444e409
-
5d44f444e409
為Image ID
4、外部連線
Redis相對沒有Mysql這麼麻煩,還要配許可權什麼的。Redis容器啟動後,直接外部就可以連啦:
當然,./redis-cli
這個也是要本地有redis的包才行,可以用Redis-manager測試連線或者寫一段程式碼測試連線效果一樣哈。
寫在最後
其實,這篇文章內容相對來說,沒有太多的技術含量,不過是一篇備忘錄而已。當然,對於強哥這種有點健忘症的人來說,記錄收藏一下,還是挺有用的。有時候往往是最簡單的東西,最容易浪費時間和出錯。尤其是你浪費了一大把時間在與目標無關緊要的東西上時,非常容易讓人惱火。強哥記錄這篇也是有切身經歷的。
整個用Docker安裝軟體的流程就大體這樣,比如之後還要用到其他的一些軟體之類的,其實有Docker真的能方便很多。安裝流程也大體如此,比較簡單。安裝一次Docker之後,便一勞永逸啦,比在本機安裝真的會方便不少。