天天看點

用Docker運作Percona Server用Docker運作Percona Server

版權聲明:本文為部落客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,如果想自定義這個配置檔案,可以修改它。