
絕大多數(shù)情況下我們都希望我們的服務(wù)是無狀態(tài)的,但是在項(xiàng)目開發(fā)中不可避免的會出現(xiàn)有狀態(tài)的服務(wù),這給我們在服務(wù)彈性伸縮及其他使用上或多或少帶來了一定難度。在實(shí)際工作使用中,我們線上是采用的阿里云的云數(shù)據(jù)庫RDS,其提供了數(shù)據(jù)庫的容災(zāi)、備份、恢復(fù)、監(jiān)控、遷移等方面的全套解決方案,解決了數(shù)據(jù)庫運(yùn)維的成本。而在開發(fā)測試階段則采用自建MySQL服務(wù)。本篇實(shí)踐記錄則如題所示,我們基于Docker來搭建一個(gè)本地MySQL服務(wù)。
一、下載鏡像
我們使用Docker Hub上的官方mysql鏡像,目前最新的版本為8.0.16
$ docker pull mysql:8.0.16

執(zhí)行如下命令查看一下剛才下載的鏡像詳細(xì)信息
$ docker inspect mysql:8.0.16
部分截圖如下

二、啟動(dòng)MySQL服務(wù)實(shí)例
2.1 創(chuàng)建主機(jī)掛載目錄
$ mkdir -p /docker_volume/mysql/data

2.2 啟動(dòng)容器
這里簡單說明一下,我們指定MySQL的初始root密碼為123456,并且設(shè)置其默認(rèn)編碼和排序規(guī)則為UTF-8(utf8mb4),在開發(fā)階段中一般情況下都可以這樣設(shè)置。
$ docker run -d --restart=unless-stopped -p 30030:3306 \
-v /docker_volume/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:8.0.16 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

接著我們觀察一下容器日志,執(zhí)行如下命令
$ docker logs -f mysql

可以看見,MySQL服務(wù)已經(jīng)成功啟動(dòng)。接著我們來通過本地客戶端工具訪問試一試。
三、客戶端連接MySQL服務(wù)
我本地使用Navicat作為客戶端工具連接到MySQL服務(wù),需要注意的是mysql8之前的版本中加密規(guī)則是mysql_native_password,而在mysql8之后,加密規(guī)則是caching_sha2_password,所以需要客戶端使用支持mysql8加密規(guī)則的較新版本。 在客戶端新建mysql連接,輸入我們的虛擬機(jī)IP地址,以及我們剛才映射的主機(jī)端口30030,然后輸入root密碼123456即可。如下圖配置好后,測試連接成功。

接下來我們再Rancher中來部署我們的MySQL服務(wù)。
四、Rancher中部署MySQL服務(wù)
4.1 刪除原有容器
執(zhí)行如下命令停止并刪除先前啟動(dòng)的MySQL容器
$ docker container stop mysql && docker container rm mysql

4.2 Rancher的UI中部署服務(wù)
我們開始部署一個(gè)工作負(fù)載,類型選擇StatefulSet,選擇NodePort進(jìn)行端口映射

在環(huán)境變量里添加我們的root密碼為123456

選擇映射主機(jī)目錄把準(zhǔn)備好的目錄進(jìn)行映射

命令中設(shè)置我們的server編碼

最后點(diǎn)擊啟動(dòng)即可,稍等片刻,即可看見我們的服務(wù)部署成功了。

接著我們還是在先前的客戶端工具下進(jìn)行測試連接一波。至此,我們已經(jīng)完成了MySQL服務(wù)在docker環(huán)境下的部署。
五、使用小結(jié)
本篇實(shí)踐記錄我們演示了怎么通過容器部署MySQL服務(wù)以及使用客戶端工具連接到MySQl服務(wù)上,整體來說比較簡單。需要注意的是MySQL服務(wù)是一個(gè)很常見而且我們開發(fā)中幾乎不可或缺的存在,如果需要容器化部署的話特別要注意一下數(shù)據(jù)狀態(tài),生產(chǎn)環(huán)境中還是建議采用云數(shù)據(jù)庫,或者自建高可用服務(wù)。如果你有什么疑問或者文中有什么錯(cuò)誤的地方,歡迎在留言區(qū)留言。
題外話:最近公司準(zhǔn)備在使用華為云的DevCloud,它從項(xiàng)目管理,版本管理,CI/CD等一整套都做好了集成,能夠滿足傳統(tǒng)的部署方式也支持容器環(huán)境部署,不用自己再搭這些環(huán)境了,當(dāng)然市面上也有其它云可供使用。
前文導(dǎo)航
Docker決戰(zhàn)到底(一) 虛擬機(jī)中安裝ubuntu系統(tǒng)
Docker決戰(zhàn)到底(二) Docker環(huán)境搭建
Docker決戰(zhàn)到底(三) Rancher2.x的安裝與使用
Docker決戰(zhàn)到底(四) Jenkins的安裝與使用
Docker決戰(zhàn)到底(五) 制作自己的Jenkins鏡像
Docker決戰(zhàn)到底(六) 制作自己的Maven鏡像
Docker決戰(zhàn)到底(七) 使用多階段構(gòu)建Spring Boot應(yīng)用鏡像
Docker決戰(zhàn)到底(八) 自己動(dòng)手搭建GitLab服務(wù)
Docker決戰(zhàn)到底系列全為本人wendell_dev原創(chuàng),轉(zhuǎn)載請注明來源。