版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/50658687
用Docker運作Percona Server
作者:chszs,未經部落客允許不得轉載。經許可的轉載需注明作者和部落格首頁: http://blog.csdn.net/chszs
Percona官方提供了一個Percona Docker鏡像,可以運作Percona Server MySQL和Percona Server for MongoDB。
Docker官方也提供了Percona鏡像,具體見:
Percona,但是這個鏡像不是Percona官方提供的。
而在Percona官方提供的鏡像中,針對每種存儲引擎的鏡像都有,具體見:
https://hub.docker.com/r/percona/但是,目前Percona官方提供的鏡像剛剛開始,還處于實驗性階段。
1、運作Percona Server/MySQL鏡像
docker run --name container-name -e MYSQL_ROOT_PASSWORD=secret -d percona/percona-server:tag
container-name是你為容器賦予的名字
secret是Percona伺服器root賬戶的密碼
tag是你想指定的Percona版本,目前有4個選擇:latest、5.6、5.6.28、5.6.27。
要從另一個Docker容器的應用程式連接配接到Percona Server容器:
(假定Percona使用預設的3306端口)
docker run --name app-container-name --link container-name -d app-that-uses-mysql
從MySQL指令行用戶端連接配接到Percona Server容器:
(下面的指令會從另一個Docker容器中運作MySQL指令行用戶端,再連接配接到Percona Server容器)
docker run -it --link container-name --rm percona/percona-server:tag mysql -h container-name -P 3306 -uroot -psecret'
2、運作Percona Server/MongoDB鏡像
要改變鏡像的存儲引擎很簡單,比如換成RocksDB引擎,可以這樣:
docker run --name psmdbrocks -d percona/percona-server-mongodb:latest --storageEngine=RocksDB
或者是換成PerconaFT存儲引擎:
docker run --name psmdbperconaft -d percona/percona-server-mongodb:latest --storageEngine=PerconaFT
3、環境變量
在啟動Percona Server容器時,可以通過docker run指令行傳遞一些環境變量來調整執行個體的運作配置。要注意,如果容器已經包含了資料庫資料目錄的話,那麼這些環境變量會不起作用,也即任何預先存在于鏡像中的資料庫會使得環境變量無效。主要使用的環境變量有下面幾個:
1)MYSQL_ROOT_PASSWORD
它表示Percona伺服器root超級使用者的密碼。
2)MYSQL_RANDOM_ROOT_PASSWORD
如果這個值設定為yes,表示Percona伺服器root超級使用者的密碼為随機産生,且密碼會輸出到容器的控制台,可以使用指令docker logs container-name來找到密碼。
3)MYSQL_ONETIME_PASSWORD
這是可選的環境變量,如果設定為yes,表示Percona伺服器root超級使用者的密碼是一次性的,會過期。當登陸Percona後,必須修改密碼。這個特性必須在5.6及以後版本才支援。
4)MYSQL_DATABASE
這是可選的環境變量,它表示在容器啟動時可以建立一個指定名字的資料庫。如果後面的user/password都設定了,那麼這個user将擁有對這個指定資料庫的超級權限(等同于GRANT ALL指令)。
注意:這種方式不應該用于建立root賬戶。
5)MYSQL_ALLOW_EMPTY_PASSWORD
如果這個值設定為yes,表示Percona伺服器root超級使用者的密碼可以為空。
不推薦使用。
4、Percona容器的安全
在很多場景下,使用MYSQL_ROOT_PASSWORD環境變量來指定root超級使用者的密碼是不安全的。是以安全的做法應該這樣:使用MYSQL_RANDOM_ROOT_PASSWORD随機密碼環境變量。如果想讓執行個體更加安全,還可以使用MYSQL_ONETIME_PASSWORD一次性密碼環境變量。
5、資料存儲
運作在Docker容器的應用程式要存儲資料有兩種方法:
1)讓Docker管理資料庫資料的存儲
通過把資料庫檔案寫入主機系統磁盤(使用内部的卷管理),實作讓Docker管理資料庫資料的存儲。這種方法,devicemapper、aufs、overlayfs等對性能有很大影響。
2)在托管主機建立資料目錄(在容器外部)
在托管主機上也即容器外部建立資料目錄,且通過挂載使得此目錄對容器可見。這種方法使得資料庫檔案易于被主機系統的工具或應用通路到。這種方法用于必須確定資料目錄存在,且通路權限和其它安全機制都要設定正确。通常可以這樣:
- 在主機系統适合的卷上建立資料目錄,比如/local/datadir
- 啟動容器:
.
docker run --name container-name -v /local/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -d percona/percona-server:tag
-v參數表示從主機系統挂載/local/datadir目錄到容器内的/var/lib/mysql目錄,它是MySQL寫資料檔案的位置。
還要注意主機系統的目錄是否對容器有寫權限,SELinux要啟用這個權限,執行:
chcon -Rt svirt_sandbox_file_t /local/datadir
如果啟動MySQL容器執行個體使用已有的資料目錄(即資料庫已存在),那麼在執行docker run指令時,MYSQL_ROOT_PASSWORD變量應該省略。
6、端口轉發
Docker允許在容器内映射端口到主機系統的端口,使用-p選項。
docker run --name container-name `-p 6603:3306` -d percona/percona-server
mysql -h docker_host_ip -P 6603
這樣就可以使用主機的6603端口連接配接到MySQL容器了。
7、傳遞參數給MySQL容器
還可以在docker run指令中傳遞任意參數給MySQL容器。
docker run --name my-container-name -d percona/percona-server --option1=value --option2=value
option1和option2在容器啟動時之間傳遞到Percona容器。比如想讓容器使用UTF-8作為字元集和collation的預設設定,可以這樣:
docker run --name container-name -d percona/percona-server --character-set-server=utf8 --collation-server=utf8_general_ci
8、使用自定義的MySQL配置檔案
MySQL容器的啟動配置檔案是/var/lib/mysql/my.cnf,如果想自定義這個配置檔案,可以修改它。