技術分享 | 使用 Docker 安裝 MySQL

做者:Peter Zaitsev
翻譯:管長龍
原文: https://www.percona.com/blog/...

在工做中,我常常須要安裝特定版本的 MySQL、MariaDB 或 Percona 來運行一些實驗,例如:檢查版本差別或是提供測試說明。此博客系列將闡述如何使用 Docker 安裝 MySQL、MariaDB 或 Percona。這篇文章是第一篇,重點是 MySQL。html

Docker 的優勢在於它能夠很是輕鬆地安裝最新的 MySQL 版本以及任何其餘版本,但每每與典型的生產安裝不匹配。當您須要簡單的單個實例時,Docker 的確很方便。若是您正在研究一些與複製相關的行爲,那麼則不必定適合。mysql

這些說明皆在快速、輕鬆地運行測試實例的狀況下。不適用於生產部署。如下內容所假定已安裝 Docker。linux

首先,您應該知道只有兩個「官方」 MySQL Docker 存儲庫。其中之一由 Docker 團隊維護,可經過一個簡單的 docker 命令 mysql:latest 運行起來。另外一個由 Oracle 的 MySQL 團隊維護,語法:sql

docker run mysql / mysql-server:latest

說明:語法中的 latest 是 tag 值,表示默認安裝庫中的最新版本docker

在如下示例中,咱們將使用 MySQL 團隊的 Docker 映像,儘管 Docker 團隊的工做方式與此相似。安全

使用 Docker 安裝最新版本的 MySQL

docker run --name mysql-latest  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest

這將啓動最新版本的 MySQL 實例,可使用指定的 root 密碼從任何地方遠程訪問該實例。這很容易測試,但不是好的安全習慣(這就是爲何它不是默認值)的緣由。服務器

鏈接到 MySQL Server Docker 容器

使用 Docker 安裝意味着您沒法直接在主機上得到任何工具,實用程序或庫,所以您能夠單獨安裝它們,從遠程主機訪問建立的實例,或使用 Docker 映像附帶的命令行。工具

經過 Docker 啓動 MySQL 命令行客戶端:

docker exec -it mysql-latest mysql -uroot -pstrongpassword

使用 Docker 啓動 MySQL Shell:

docker exec -it mysql-latest mysqlsh -uroot -pstrongpassword

在 Docker 容器中管理 MySQL 服務器

當您要中止 MySQL Server Docker 容器運行時:測試

docker stop mysql-latest

若是要從新啓動已中止的 MySQL Docker 容器,則不該嘗試使用 docker run 從新啓動它。相反,您應該使用:命令行

docker start mysql-latest

若是出現錯誤,例如,若是容器未啓動,則可使用如下命令訪問其日誌:

docker logs mysql-latest

若是要從頭開始從新建立一個新的 Docker 容器,能夠運行:

docker stop mysql-latest
docker rm mysql-latest

以後再次執行 docker run 命令。

將命令行選項傳給 Docker 容器中的 MySQL Server

若是要將某些命令行選項傳給 MySQL Server,能夠採用如下方式:

docker run --name mysql-latest  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest \
--innodb_buffer_pool_size=256M \
--innodb_flush_method=O_DIRECT \

在 Docker 中運行指定版本的 MySQL 服務器

若是想在 Docker 容器中運行某版本的 MySQL,這很簡單。您可使用 Docker Image Tag 選擇想要的版本,並將 Name 更改成其餘名稱,以免名稱衝突:

docker run --name mysql-8.0.17  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:8.0.17

這將在 Docker 容器中啓動 MySQL 8.0.17。

docker run --name mysql-5.7  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:5.7

這將在 Docker 中啓動最新的 MySQL 5.7。

在 Docker 中同時運行多版本的 MySQL 服務器

同時在 Docker 中運行多版本的 MySQL ,潛在問題是 TCP 端口衝突。若是您不從外部訪問 Docker 容器,而只運行同一容器中包含的程序,則能夠刪除端口映射(-p option),而後能夠運行多個容器:

docker run --name mysql-latest  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest
 
docker run --name mysql-8.0.17  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:8.0.17

在更常見的狀況下,當您須要從外部訪問 Docker 容器時,您將須要將其映射爲使用不一樣的外部端口名稱。 例如,要在端口 3306/33060 和 MySQL 8.0.17 在 3307/33070 處啓動最新的 MySQL 8,咱們可使用:

docker run --name mysql-latest  \
-p 3306:3306 -p 33060:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:latest
  
docker run --name mysql-8.0.17  \
-p 3307:3306 -p 33070:33060  \
-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword'   \
-d mysql/mysql-server:8.0.17

若是要在 Docker 上使用 MySQL 進行更復雜的事請,那還有不少事情要考慮。

有關更多信息,請查閱:
https://hub.docker.com/r/mysq...
https://dev.mysql.com/doc/ref...

相關文章
相關標籤/搜索