用Docker執行PerconaServer
用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,如果想自定義這個配置檔案,可以修改它。
相關文章
- 用golang官方Docker映象執行專案GolangDocker
- 用Docker打包Python執行環境DockerPython
- docker 執行 MySQLDockerMySql
- Docker 執行 jarDockerJAR
- Docker 執行MySQLDockerMySql
- Docker執行命令Docker
- docker 執行redisDockerRedis
- Docker容器中執行.Net Core應用程式Docker
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 在CentOS中使用docker執行nodejs應用CentOSDockerNodeJS
- docker執行golang可執行檔案最簡docker-compose fileDockerGolang
- 如何訪問 Mac 下用 HyperKit 執行的 Docker VM?MacDocker
- Youki:用 Rust 編寫的更快Docker容器執行時RustDocker
- 如何把 Java Web 應用放在 docker 容器中執行JavaWebDocker
- eos docker執行後無法執行cleosDocker
- Docker部署並執行ElasticsearchDockerElasticsearch
- Docker執行資源控制Docker
- 使用Systemd執行Docker容器Docker
- 使用docker執行CentOS容器DockerCentOS
- 在Docker容器中執行ASP.NET MVC應用程式DockerASP.NETMVC
- 在 SAP 雲平臺上部署和執行 Docker 應用Docker
- 用Docker執行Nginx和多個版本PHP部署網站DockerNginxPHP網站
- PPT | Docker定義儲存-讓應用無痛執行Docker
- DOCKER上執行DOTNET COREDocker
- Mac 安裝執行 Docker for MacMacDocker
- docker-執行mysql服務DockerMySql
- Docker極簡入門:使用Docker執行Java程式DockerJava
- jenkins和docker 在docker裡執行jenkinsJenkinsDocker
- Docker入門系列之一:在一個Docker容器裡執行指定的web應用DockerWeb
- Docker-OSX:在Docker中執行你的蘋果Mac!Docker蘋果Mac
- Docker執行nginx映象及docker網路埠對映DockerNginx
- Docker實戰之執行專案Docker
- docker 中vim 命令 無法執行Docker
- Docker 之 執行狀態監控Docker
- Docker筆記四之執行MySQLDocker筆記MySql
- 使用普通使用者執行 dockerDocker
- 在 Azure 上使用 Docker 執行 MonoDockerMono
- docker-執行jenkins服務DockerJenkins