用Docker執行PerconaServer

chszs發表於2016-02-13
版權宣告:本文為博主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,如果想自定義這個配置檔案,可以修改它。


相關文章