激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識(shí)|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - 服務(wù)器知識(shí) - Docker容器啟動(dòng)時(shí)初始化Mysql數(shù)據(jù)庫(kù)的方法

Docker容器啟動(dòng)時(shí)初始化Mysql數(shù)據(jù)庫(kù)的方法

2020-09-21 21:51碼農(nóng)小胖哥 服務(wù)器知識(shí)

這篇文章給大家介紹Docker容器啟動(dòng)時(shí)初始化Mysql數(shù)據(jù)庫(kù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

Docker容器啟動(dòng)時(shí)初始化Mysql數(shù)據(jù)庫(kù)的方法

1. 前言

Docker在開(kāi)發(fā)中使用的越來(lái)越多了,最近搞了一個(gè)Spring Boot應(yīng)用,為了方便部署將Mysql也放在Docker中運(yùn)行。那么怎么初始化 SQL腳本以及數(shù)據(jù)呢?

我這里有兩個(gè)傳統(tǒng)方案。 第一種方案是在容器啟動(dòng)后手動(dòng)導(dǎo)入,太low了不行。第二種在Spring Boot客戶端連接Mysql容器時(shí)初始化數(shù)據(jù)庫(kù),你可以參考使用flyway進(jìn)行數(shù)據(jù)庫(kù)版本控制一文,但是這依賴(lài)客戶端的能力。能不能做到Mysql容器啟動(dòng)時(shí)就自己初始化數(shù)據(jù)庫(kù)呢?當(dāng)然可以!今天就來(lái)演示一下。全部代碼見(jiàn)文末。

2.原理

當(dāng)Mysql容器首次啟動(dòng)時(shí),會(huì)在 /docker-entrypoint-initdb.d目錄下掃描 .sh,.sql,.sql.gz類(lèi)型的文件。如果這些類(lèi)型的文件存在,將執(zhí)行它們來(lái)初始化一個(gè)數(shù)據(jù)庫(kù)。這些文件會(huì)按照字母的順序執(zhí)行。默認(rèn)情況下它們會(huì)初始化在啟動(dòng)容器時(shí)聲明的 MYSQL_DATABASE變量定義的數(shù)據(jù)庫(kù)中,例如下面的命令會(huì)初始化一個(gè)REGION_DB 數(shù)據(jù)庫(kù):

$ docker run --name some-mysql -e MYSQL_DATABASE=REGION_DB -d mysql:tag

如果你的啟動(dòng)命令沒(méi)有指定數(shù)據(jù)庫(kù)那么就必須在數(shù)據(jù)庫(kù)DDL腳本中聲明并指定使用該數(shù)據(jù)庫(kù)。否則就會(huì)實(shí)現(xiàn)下面的異常:

ERROR 1046 (3D000) at line 7: No database selected

那么接下來(lái)我們將利用這一機(jī)制來(lái)實(shí)現(xiàn)Docker容器啟動(dòng)時(shí)初始化數(shù)據(jù)庫(kù)。

3.自定義Dockerfile

我們編寫(xiě)自己的Dockerfile來(lái)實(shí)現(xiàn)我們的需求,這里以 Mysql:5.7 為例。不同的版本可能有一定的出入,需要詳細(xì)去閱讀官方文檔。腳本如下:

?
1
2
3
4
5
6
FROM mysql:5.7
LABEL OG=felord.cn
COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf
COPY ./sql /tmp/sql
RUN mv /tmp/sql/*.sql /docker-entrypoint-initdb.d
RUN rm -rf /tmp/sql
  • 第一步,引入官方 Mysql:5.7 Docker鏡像。
  • 第二步,無(wú)實(shí)際意義,主要是作者、組織信息。
  • 第三步,很重要!本來(lái)我沒(méi)有配置第三行,結(jié)果運(yùn)行容器后發(fā)現(xiàn)初始化數(shù)據(jù)的中文全部亂碼了。所以需要在初始化數(shù)據(jù)庫(kù)前修改Mysql的編碼等配置,這里我順便把時(shí)區(qū)也改為了+8:00。第四步,復(fù)制包含數(shù)據(jù)庫(kù)腳本的 ./sql文件夾到鏡像的/tmp/sql下。
  • 第五步,使用 mv 命令把第四步拷貝的文件夾下的所有.sql文件復(fù)制到 /docker-entrypoint-initdb.d下,這樣才能利用2.章節(jié)的機(jī)制進(jìn)行初始化數(shù)據(jù)庫(kù)。
  • 第六步,刪除使用過(guò)的臨時(shí)目錄。

然后你可以通過(guò)構(gòu)建鏡像命令構(gòu)建自定義的Mysql鏡像:

# 一定不要忘記最后的一個(gè) . 點(diǎn)
docker build -t mysql:5.7c .

通過(guò)mysql:5.7c鏡像啟動(dòng)一個(gè)名稱(chēng)為mysql-service的容器,root密碼為123456,并持久化數(shù)據(jù)到宿主機(jī) D:/mysql/data下:

docker run --name mysql-service -v d:/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7c

小貼士:你可以通過(guò) SHOW VARIABLES LIKE 'character%' 查看字符集是否更改為utf8mb4,也可以通過(guò)SHOW VARIABLES LIKE '%time_zone%' 查看時(shí)區(qū)是否是東八區(qū)。

4. 總結(jié)

到此這篇關(guān)于Docker容器啟動(dòng)時(shí)初始化Mysql數(shù)據(jù)庫(kù)的文章就介紹到這了,更多相關(guān)docker容器啟動(dòng)初始化數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av性色全交蜜桃成熟时 | 中文欧美日韩 | 久操伊人 | 免费欧美精品 | 久久3 | 国产精品免费观看视频 | 国产自在自线午夜精品视频在 | 国产在线精品一区二区三区不卡 | 亚洲成人福利在线观看 | 欧美综合日韩 | 精品一区二区三区免费看 | 热久久91 | 桥本有菜免费av一区二区三区 | 黄色毛片免费看 | 欧美一级黄| 久久99久久99精品 | av免费在线播放网址 | 3xxx | 国产精品亚洲三区 | 国产一区二区三区高清 | 黄色片网站在线看 | 男人天堂免费 | 欧美色淫 | 射逼网站 | 久久精品中文字幕一区二区三区 | 久久精品视频69 | 日韩毛片在线看 | 在线观看va | www.com香蕉 | 色毛片 | 亚洲一区二区三区在线看 | 成人在线视频在线观看 | 神马久久精品综合 | 亚洲成人在线视频网 | 日韩欧美动作影片 | 欧美精品一区二区性色 | 91精品国产一区二区三区动漫 | 欧美成人h版在线观看 | 亚洲精品久久久久www | 精品亚洲va在线va天堂资源站 | 中国hd高清xxxxvideo |