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專有名詞:
- Docker ommit:異動變成建立一個新的img
- Dockerfile:來build屬於自己的img~
- Docker Compose:管理多個容器
中午更:有件事還沒做!
就是加上host網路模式後還沒測用DBeaver連線是否能成功啦@@
...
...果然我就知道事情沒有我想的這麼簡單ˇWˇ.........
看來跟容器使用host網路模式沒太大關係...?反而跟MySQL本身的設定有關
完全不知道昨天為什麼會覺得改了網路模式就會有用=_=(可能跟其他討論的結論混淆了,搜尋關鍵字當時是"Docker GCP MySQL can't conn",那就有太多種情境了)
修改容器內的MySQL設置
我旋即又遇到第一個問題,就是容器內我用不了apt,安裝不了vim,不好修改設定QQ...
(未完待續)