最近常常被問到,MySQL能夠適用於容器嗎?在這一篇裏,簡單地爲你們介紹一下MySQL在容器上的使用。
html
既然說到了容器,首先介紹一下關於容器的相關內容。
mysql
什麼是容器?讓咱們看一下官網上怎麼說,https://www.docker.com/resources/what-containerlinux
「A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.」nginx
翻譯過來的內容是「容器是軟件的標準單元,它將代碼及其全部依賴項打包,以便應用程序在不一樣的計算環境之間快速可靠地運行。Docker容器映像是一個輕量級的、獨立的、可執行的軟件包,它包括運行應用程序所需的一切:代碼、運行時、系統工具、系統庫和設置」。概述一下,用紅顏色標識出來的字即是容器的特徵。容器和虛擬機具備相似的資源隔離和分配優點,但功能不一樣,容器虛擬化的是操做系統而不是硬件。容器更輕便,更高效。Docker是實現容器技術的一個開源項目,它將程序以及程序全部的依賴都打包到Docker容器裏面。使用Docker的好處之一,能夠避免「明明在我這裏好用,爲何在你那裏很差用」,這個畫面開發的小夥伴和測試的小夥伴能夠腦補一下。git
使用Docker時,須要用到Docker鏡像。鏡像能夠從正式的鏡像庫下載,也能夠人工製做和更新。github
MySQL的鏡像能夠從 https://hub.docker.com/下載,這裏面既有社區版MySQL的鏡像,也有企業版MySQL的鏡像。另外,也能夠從https://container-registry.oracle.com下載兩個版本。sql
部署MySQL時,能夠參照下面的步驟:docker
安裝Docker服務。
bash下載Docker鏡像:服務器
docker pull mysql
啓動Docker容器:
docker run --name=mysqlse -e MYSQL_RANDOM_ROOT_PASSWORD=true -e MYSQL_ONETIME_PASSWORD=true -d mysql:latest
查看運行的容器:
docker ps
查看日誌,確認生成的root密碼:
docker logs mysqlse
鏈接MySQL服務器:
docker exec -it mysqlse mysql -uroot -p
將配置文件和數據目錄從底層主機系統映射到容器:
docker run --name=mysqlse -e MYSQL_RANDOM_ROOT_PASSWORD=true -v [path on host machine]/my.cnf:/etc/my.cnf -v [path on host machine]/datadir:/var/lib/mysql -d mysql:latest
關於詳細的安裝方法能夠參照:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-docker.html
讓咱們考慮下一個問題,若是使用了成百上千的容器,該怎樣管理呢?咱們須要一個管理系統來幫助建立和部署複雜的環境。如今有不少這樣的項目幫助咱們實現這一點,例如:Kubernetes,Swarm, Rancher, Docker Compose,...。
以Kubernetes爲例,Kubernetes是一個開源項目,容許將容器化的應用程序部署到集羣,而且可以控制它們。Kubernetes是最活躍的容器編排項目,它使用客戶端服務器(C/S)的架構,可以用於包括Docker在內的容器。
簡單介紹一下Kubernetes的幾個概念:
Node:容器運行的地方
Pods:共享存儲和網絡的一組容器
高可用:當Node或Pod不可用時,Kubernetes將Pod安置到其餘可用的Node
可以直接下載Docker鏡像
資源控制包括網絡和存儲
能夠和其餘項目整合提供存儲網絡等
MySQL提供了一個用於Kubernetes的 MySQLOperator for Kubernetes,目前仍是一個實驗室版本,它能夠安裝在現有的Kubernetes集羣內,用戶可以使用簡單的配置格式建立和管理MySQL集羣。這個項目一開始是爲了幫助內部團隊更容易地在Kubernetes中運行MySQL,但很快就發現不少其餘用戶可能也面臨着相似的問題,所以也將其開源提供給廣大用戶使用。https://github.com/oracle/mysql-operator
MySQL Operator for Kubernetes能夠部署社區版和企業版的MySQL,能夠配置管理InnoDB Cluster,當InnoDB Cluster的成員宕機時,MySQL Operator能夠自動將其從新加入集羣。此外,MySQL Operator還支持備份與恢復。
關於MySQL Operator的詳細內容能夠參考:https://blogs.oracle.com/developers/introducing-the-oracle-mysql-operator-for-kubernetes
以上內容是關於MySQL與容器的簡介,感謝您關注「MySQL解決方案工程師」!
本文分享自微信公衆號 - MySQL解決方案工程師(mysqlse)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。