1、用戶密碼和字符集等的設置,需要安裝完MySql
後,進入到MySql
中去設置,非常麻煩;
2、配置文件和數據文件都在MySql
的容器內,不是很安全。
本文將介紹怎樣在創建容器時通過參數的配置來解決上面兩個問題。
環境
- CentOS:7.4
- Docker:1.13.1
- MySql:8.0.11
設置環境變量
設置環境變量和鏡像的參數,可以來解決第一個問題,環境變量使用-e
的方式設置在鏡像名稱的前面;鏡像的參數需要配置在鏡像名稱的後面
docker run -d -p 4306:3306 -e MYSQL_USER="fengwei" -e MYSQL_PASSWORD="pwd123" -e MYSQL_ROOT_PASSWORD="rootpwd123" --name mysql001 mysql/mysql-server --character-set-server=utf8 --collation-server=utf8_general_ci |
環境變量說明:
-e MYSQL_USER=”fengwei”:添加用戶fengwei
-e MYSQL_PASSWORD=”pwd123”:設置fengwei的密碼偉pwd123
-e MYSQL_ROOT_PASSWORD=”rootpwd123”:設置root的密碼偉rootpwd123
鏡像參數說明:
–character-set-server=utf8:設置字符集爲utf8
–collation-server=utf8_general_ci:設置字符比較規則爲utf8_general_ci
使用SQLyog
進行測試,用戶名和密碼使用上面環境變量中添加的用戶fengwei
和密碼pwd123
,出現下圖的錯誤
執行命令進入到容器中的MySql
中,執行下面的Sql
語句
ALTER USER 'fengwei'@'%' IDENTIFIED WITH mysql_native_password BY 'password123'; |
再用SQLyog
測試,連接成功
上面連接不成功的問題也可以添加鏡像參數--default-authentication-plugin=mysql_native_password
來解決,完整命令如下
docker run -d -p 4306:3306 -e MYSQL_USER="fengwei" -e MYSQL_PASSWORD="pwd123" -e MYSQL_ROOT_PASSWORD="rootpwd123" --name mysql001 mysql/mysql-server --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password |
數據和配置掛載到宿主機
爲了安全性,我們應該將數據和配置放到宿主機中,首先執行下面的命令創建data
目錄和config
目錄
mkdir mysqltest cd mysqltest mkdir data mkdir config |
執行下面命令進入到config
目錄中,並在該目錄中創建my.cnf
配置文件
cd config touch my.cnf |
my.cnf
配置文件內容如下
[mysqld] user=mysql character-set-server=utf8 default_authentication_plugin=mysql_native_password [client] default-character-set=utf8 [mysql] default-character-set=utf8 |
執行下面命令創建容器
docker run -d -p 4306:3306 --restart always --privileged=true --name mysql001 -e MYSQL_USER="fengwei" -e MYSQL_PASSWORD="pwd123" -e MYSQL_ROOT_PASSWORD="rootpwd123" -v=/mysqltest/config/my.cnf:/etc/my.cnf -v=/mysqltest/data:/var/lib/mysql mysql/mysql-server |
參數說明
–restart always:開機啓動
–privileged=true:提升容器內權限
-v=/mysqltest/config/my.cnf:/etc/my.cnf:映射配置文件
-v=/mysqltest/data:/var/lib/mysql:映射數據目錄
特別說明
如果沒有添加--privileged=true
參數,容器創建後不能正常啓動,查看日誌發現有權限的錯誤
容器正常創建啓動後,可以用客戶端工具進行連接測試。
轉載自 http://www.fwhyy.com/2018/05/docker-installs-mysql-to-mount-external-data-and-configuration/