Crystal's Record

電腦,生活

20240109 Docker架設MySQL初探(還有一個連線問題,有進展再更新)

參考資料:詳細的說明

1.pull

2.在實機新增存放資料的資料夾

sudo mkdir mysql_data

3.run+掛起資料 latest為版號tag(愛看官方說明

sudo docker run --name my-mysql  --net=host -v /mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=369369 -d mysql:latest

注意:用host網路模式時帶-p無效,且會提示"WARNING: Published ports are discarded when using host network mode"

4.容器操作

進容器裡

sudo docker exec -it 006a7c71b569 bash

ChatGPT解釋參數

這段命令中的 -it 參數用於 Docker 命令中,有兩個功能:

-i 表示 "interactive"(互動式)。它使你能夠與正在運行的容器進行交互,即使該容器沒有關聯的標準輸入(stdin)。

-t 表示 "tty"(終端)。它為容器分配一個虛擬的終端(TTY),使你能夠在容器內部進行命令行交互。

這兩個選項一起使用時,允許你以互動式的方式進入正在運行的容器,就像是直接在容器內部操作一樣。

進到容器內初始化MySQL(哇不用sudo!)

mysql -u root -p

輸入剛剛起容器定的帳號密碼

然後還要開起對外連線,最好採用新增使用者的做法比較安全

CREATE USER 'it'@'%' IDENTIFIED BY 'it';
GRANT ALL ON *.* TO 'it'@'%'  WITH GRANT OPTION;
ALTER USER 'it'@'%' IDENTIFIED WITH mysql_native_password BY '369369';
FLUSH PRIVILEGES;

如何修改容器啟動參數

因為發生連線問題,想試著補上遺漏的參數--net=host(還有個更長的版本)測試看看有沒有用

但直接docker rm是想把資料搞掉逆...

但要做實驗,先進容器內新增一個資料庫、資料表跟一筆row請忽略此圖中間悲慘的過程,另外感謝ChatGPT提供罐頭(喂)

退出容器運行 據說相對安全的語法—刪除容器container

sudo docker stop 容器ID # 用sudo docker ps -a查詢
sudo docker container rm 容器ID
sudo docker run --name my-mysql  --net=host -v /mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=369369 -d mysql:latest # 運行新語句

進到新容器(id會變)看看資料還在不在...

太好了!資料還在!!


補充

其他Docker專有名詞:

中午更:有件事還沒做!

就是加上host網路模式後還沒測用DBeaver連線是否能成功啦@@

...

...果然我就知道事情沒有我想的這麼簡單ˇWˇ.........

看來跟容器使用host網路模式沒太大關係...?反而跟MySQL本身的設定有關

完全不知道昨天為什麼會覺得改了網路模式就會有用=_=(可能跟其他討論的結論混淆了,搜尋關鍵字當時是"Docker GCP MySQL can't conn",那就有太多種情境了)


修改容器內的MySQL設置

我旋即又遇到第一個問題,就是容器內我用不了apt,安裝不了vim,不好修改設定QQ...

(未完待續)