1. docker hub中可以直接拉取images來安裝
  2. 使用指令安裝時要注意版本,我要安裝5.7的版本
sudo docker pull mysql:5.7
下載映像檔完成
sudo docker images
查看映像檔

因不想每次都輸入sudo 將使用者切換至root,VM是由vagrant安裝的,密碼也是vagrant。

執行映像檔並將MySql的一些重要目錄掛載至VM

 docker run -p 3306:3306 --name mysql \
 -v /mydata/mysql/log:/var/log/mysql \
 -v /mydata/mysql/data:/var/lib/mysql \
 -v /mydata/mysql/conf:/etc/mysql \
 -e MYSQL_ROOT_PASSWORD=1234 \
 -d mysql:5.7

Windows請參考以下指令

docker run -p 3306:3306 --name mysql -v C:\mydata\mysql\log:/var/log/mysql -v C:\mydata\mysql\data:/var/lib/mysql -v C:\mydata\mysql\conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=e23s5 -d mysql:5.7

-p 3306:3306 把容器的port mapping到VM主機的port
-v /mydata/**:/var/ 把目錄掛載到VM主機
-e MYSQL_ROOT_PASSWORD 初始化ROOT密碼

(此步驟可不做) 如有要關閉swap檔案,且需要調整VM的記憶體大小,看VM安裝完預設是512M,所以我調整成2048M,並且把swap先關閉然後刪除swapfile,這個檔案表示了你目前的記憶體容量。

sudo swapoff /swapfile
sudo rm /swapfile

(此步驟可不做) 如果遇到啟動後馬上被終止有可能是硬碟滿了,此時要先找出佔空間的目錄

du -hsx /vagrant/AppData/Local/Application\ Data/* | sort -hr | head
26G /vagrant/AppData/Local/Application Data/Application Data
31M /vagrant/AppData/Local/Application Data/Adobe
1.1M /vagrant/AppData/Local/Application Data/Apple Computer
108K /vagrant/AppData/Local/Application Data/IconCache.db
4.0K /vagrant/AppData/Local/Application Data/PUTTY.RND
4.0K /vagrant/AppData/Local/Application Data/AdvancedConfigurator
0 /vagrant/AppData/Local/Application Data/y-w-y.com
0 /vagrant/AppData/Local/Application Data/Yarn
0 /vagrant/AppData/Local/Application Data/Wox
0 /vagrant/AppData/Local/Application Data/VMware

我也不知道為什麼這檔案寫入到VM裡面,這些看起來是我實體機的一些檔案...

刪除佔空間最大的目錄

rm -rf Application\ Data/

如果因為上一步驟啟動失敗的話要先將容器停止並刪除
docker stop mysql
docker rm mysql

==========================================

查看剛剛執行的容器

docker ps

查看mysql被安裝於哪個位置

whereis mysql

因為有將特定目錄掛載出來,可以方便在VM中修改設定檔

 vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection=utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

重新啟動mysql

docker restart mysql

進入mysql容器

 docker exec -it mysql bash

檢查容器內的設定檔是否有寫入

 cat /etc/mysql/my.cnf

有寫入剛剛內容表示成功

開啟類似NAT的功能,讓docker內網可以訪問外網資源

firewall-cmd --permanent --zone=public --add-masquerade

開啟3306

firewall-cmd --add-service=mysql --permanent

重新載入防火牆規則

firewall-cmd --reload