欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年05月27日 10:07:39   作者:碼農(nóng)小胖哥  
這篇文章給大家介紹Docker容器啟動時(shí)初始化Mysql數(shù)據(jù)庫的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

1. 前言

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

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

2.原理

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

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

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

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

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

3.自定義Dockerfile

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

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鏡像。
  • 第二步,無實(shí)際意義,主要是作者、組織信息。
  • 第三步,很重要!本來我沒有配置第三行,結(jié)果運(yùn)行容器后發(fā)現(xiàn)初始化數(shù)據(jù)的中文全部亂碼了。所以需要在初始化數(shù)據(jù)庫前修改Mysql的編碼等配置,這里我順便把時(shí)區(qū)也改為了+8:00。第四步,復(fù)制包含數(shù)據(jù)庫腳本的 ./sql文件夾到鏡像的/tmp/sql下。
  • 第五步,使用 mv 命令把第四步拷貝的文件夾下的所有.sql文件復(fù)制到 /docker-entrypoint-initdb.d下,這樣才能利用2.章節(jié)的機(jī)制進(jìn)行初始化數(shù)據(jù)庫。
  • 第六步,刪除使用過的臨時(shí)目錄。

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

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

通過mysql:5.7c鏡像啟動一個(gè)名稱為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

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

4. 總結(jié)

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

相關(guān)文章

  • Docker Base Image自己創(chuàng)建具體實(shí)現(xiàn)

    Docker Base Image自己創(chuàng)建具體實(shí)現(xiàn)

    這篇文章主要介紹了Docker Base Image創(chuàng)建具體實(shí)現(xiàn)的相關(guān)資料,這里提供了詳細(xì)的具體步驟,需要的朋友可以參考下
    2016-11-11
  • Docker創(chuàng)建nacos容器的方法

    Docker創(chuàng)建nacos容器的方法

    這篇文章主要介紹了Docker創(chuàng)建nacos容器的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟

    docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于docker使用alpine構(gòu)建jdk21鏡像的詳細(xì)步驟,鏡像中包含了應(yīng)用程序所需要的運(yùn)行環(huán)境,函數(shù)庫,配置,以及應(yīng)用本身等各種文件,這些文件分層打包而成,需要的朋友可以參考下
    2024-03-03
  • docker run 運(yùn)行容器自動結(jié)束的解決

    docker run 運(yùn)行容器自動結(jié)束的解決

    這篇文章主要介紹了docker run 運(yùn)行容器自動結(jié)束的解決,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker鏡像推送(push)到Docker Hub的實(shí)現(xiàn)

    Docker鏡像推送(push)到Docker Hub的實(shí)現(xiàn)

    這篇文章主要介紹了Docker鏡像推送(push)到Docker Hub的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Docker安裝Nacos詳細(xì)圖文教程

    Docker安裝Nacos詳細(xì)圖文教程

    這篇文章主要為大家詳細(xì)介紹了Docker安裝Nacos詳細(xì)圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • supervisor下的Dockerfile的多服務(wù)鏡像封裝操作

    supervisor下的Dockerfile的多服務(wù)鏡像封裝操作

    這篇文章主要介紹了supervisor下的Dockerfile的多服務(wù)鏡像封裝操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Docker本地鏡像發(fā)布到阿里云的實(shí)現(xiàn)

    Docker本地鏡像發(fā)布到阿里云的實(shí)現(xiàn)

    本文主要介紹了Docker本地鏡像發(fā)布到阿里云的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 基于docker搭建redis集群的方法

    基于docker搭建redis集群的方法

    這篇文章主要介紹了基于docker搭建redis集群的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • docker時(shí)區(qū)問題和遷移數(shù)據(jù)問題

    docker時(shí)區(qū)問題和遷移數(shù)據(jù)問題

    這篇文章主要介紹了docker時(shí)區(qū)問題和遷移數(shù)據(jù)問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評論