最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1. 前言

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

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

2.原理

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

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

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

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

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

3.自定義Dockerfile

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

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

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

# 一定不要忘記最后的一個 . 點
docker build -t mysql:5.7c .

通過mysql:5.7c鏡像啟動一個名稱為mysql-service的容器,root密碼為123456,并持久化數(shù)據(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%' 查看時區(qū)是否是東八區(qū)。

4. 總結(jié)

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

相關(guān)文章

  • Docker 制作鏡像Dockerfile和commit操作

    Docker 制作鏡像Dockerfile和commit操作

    這篇文章主要介紹了Docker 制作鏡像Dockerfile和commit操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 使用docker啟動redis守護進程的詳細流程

    使用docker啟動redis守護進程的詳細流程

    在現(xiàn)代軟件開發(fā)中,緩存和消息隊列是提高應用性能和擴展性的關(guān)鍵,Redis 是一種流行的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),使用 Docker 容器化技術(shù)可以方便地部署和管理 Redis 服務,本文給大家介紹了使用docker啟動redis守護進程的詳細流程,需要的朋友可以參考下
    2025-01-01
  • Ubuntu Docker 的安裝部署及簡單應用

    Ubuntu Docker 的安裝部署及簡單應用

    這篇文章主要介紹了Ubuntu Docker 的安裝部署的相關(guān)資料,這里說明介紹了詳細的步驟,需要的朋友可以參考下
    2016-10-10
  • Armbian5.9.0安裝docker及部署可視化portainer的詳細教程

    Armbian5.9.0安裝docker及部署可視化portainer的詳細教程

    這篇文章主要介紹了Armbian5.9.0安裝docker及部署可視化portainer的詳細教程,通過?ssh?進去?Armbian?系統(tǒng)后,輸入相應代碼,按提示輸入y,等待安裝完成即可,需要的朋友可以參考下
    2022-05-05
  • Docker設(shè)置日志滾動的解決方案

    Docker設(shè)置日志滾動的解決方案

    Docker容器默認將日志寫入同一文件,可能導致磁盤滿,解決方案包括修改全局docker.service配置或針對特定容器修改hostconfig.json,下面給大家介紹Docker設(shè)置日志滾動的解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像)

    Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像)

    這篇文章主要介紹了Docker鏡像構(gòu)建原理解析(不裝docker也能構(gòu)建鏡像),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • pipework docker無法使用ip netns命令解決辦法

    pipework docker無法使用ip netns命令解決辦法

    這篇文章主要介紹了pipework docker無法使用ip netns命令解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • docker安裝fastdfs鏡像的一些注意事項

    docker安裝fastdfs鏡像的一些注意事項

    在安裝docker fastdfs鏡像時大家需要注意如果是云服務器則需要在云服務器后臺的安全組入口方向放開22122、23000以及8888端口,并且在云服務器防火墻配置放開以上三個端口,具體內(nèi)容詳情大家跟隨小編一起看看吧
    2021-05-05
  • 解決docker run hello-world遇到錯誤消息-error during conne

    解決docker run hello-world遇到錯誤消息-error during&n

    這篇文章主要介紹了解決docker run hello-world遇到錯誤消息-error during conne問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù)問題

    docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù)問題

    Redis 是一個開源的使用 ANSI C 語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value 的 NoSQL 數(shù)據(jù)庫,并提供多種語言的 API。這篇文章主要介紹了docker安裝redis 5.0.7并掛載外部配置和數(shù)據(jù),需要的朋友可以參考下
    2019-12-12

最新評論

怀安县| 泰顺县| 如东县| 乐昌市| 宣恩县| 定远县| 青龙| 兴国县| 上虞市| 济源市| 汶川县| 郓城县| 华坪县| 盐亭县| 永平县| 拉孜县| 蓬溪县| 团风县| 上蔡县| 晋城| 吉安县| 台山市| 阳新县| 剑阁县| 冕宁县| 台南市| 新绛县| 大田县| 兰考县| 石门县| 嘉峪关市| 重庆市| 横山县| 增城市| 新乐市| 临武县| 镇江市| 江山市| 陈巴尔虎旗| 永昌县| 栾城县|