关于MySQL镜像构建过程中添加自动初始化数据库

【Docker构建MySQL8.0镜像】 Docker构建MySQL8.0镜像,容器化部署,本地化部署数据库 阅读详情

需求描述

一般而言,我们在拉取了 mysql 镜像并运行之后,其中的并不会存在我们自定义的数据库,都是在镜像运行后,自己主动导入数据库,那么有没有方式可以一运行 mysql 镜像,对应生成的 mysql 容器中就有我们自定义的数据库呢?下面我们一起来看看吧!

探索前的介绍

下面的两张图片是 mysql 镜像内部根目录的两处位置,其中 entrypoint.sh 是shell脚本文件,可以看到它映射到/usr/local/bin 目录下 docker-entrypoint.sh 脚本文件,两者的配置是一样的,其位置如下图所示:

entrypoint.sh 的作用是用于对镜像运行时指定的以MYSQL开头的 -e 环境变量参数进行声明及处理,正是因为在此配置文件中声明了这些配置参数,我们才能在镜像运行时带上这些参数,以达到不同的效果,除了声明了这些参数外,还对这些参数进行了函数处理,将那些配置了的参数真正运用到 mysql 服务启动当中,如下图所示:

从上图可以看到,有些变量初始时就有默认值,有些则没有。docker会在 mysql 镜像启动的过程中监听这些声明的值,如果我们配置了,则配置的值将传递到脚本中,然后其中的一些函数就会根据这些值做出不同的行为动作。

探索数据库脚本添加和自动初始化

在大概知道了以上docker环境变量配置原理后,我们再来探索如何在镜像构建过程中添加项目数据库脚本,以及他是如何在镜像运行时自动执行的。

如果我们仔细地分析不难发现,mysql 镜像运行时会扫描 /docker-entrypoint-initdb.d/* 所有文件,然后遍历执行,因此我们可以如下这么做:

FROM mysql:8.0.31

### 将指定路径下的项目mysql数据库文件复制到初始化加载目录
COPY db.sql /docker-entrypoint-initdb.d/

### ENTRYPOINT 配置项在镜像一运行就一定会执行
### docker-entrypoint.sh 是一个shell脚本
ENTRYPOINT ["docker-entrypoint.sh"]

总结:

通过上面的分析和自我实验,我们可以了解到 entrypoint.sh 和 docker-entrypoint.sh 这两个脚本都是对镜像运行命令中的一些参数做运行前预处理,以方便实现快捷传参和指定的功能。我们也可以借助这个功能来实现自己的自定义docker 镜像运行的一些参数,来使自己的镜像也能够多元化的使用。

Docker容器启动时初始化MySQL数据库 我们编写自己的Dockerfile来实现我们的需求,这里以 Mysql:5.7 为例。不同的版本可能有一定的出入,需要详细去阅读官方文档。脚本如下:第一步,引入官方 Mysql:5.7 Docker镜像。第二步,无实际意义,主要是作者、组织信息。第三步,很重要!本来我没有配置第三行,结果运行容器后发现初始化数据的中文全部乱码了。所以需要在初始化数据库前修改Mysql的编码等配置,这里我顺便把时区也改为了+8:00。第四步,复制包含数据库脚本的 ./sql文件夹到镜像的/tmp/sql下。 阅读详情

相关推荐

Docker基础教程(205)Docker构建MySQL数据库镜像:别再用命令行安装MySQL了!Docker镜像构建秘籍,让你一杯咖啡的时间搞定数据库

还在为繁琐的MySQL安装配置感到头疼?Docker来拯救你!本文将带你深度“解剖”如何用Dockerfile亲手打造一个“开箱即用”的MySQL数据库镜像。我们将从基础镜像选择、安全密码设置、配置文件挂载,一路讲到数据持久化与初始化脚本的奥秘。告别环境不一致的噩梦,拥抱可移植、可复现的现代化部署。文末附赠完整示例,只需复制粘贴,你就能在几分钟内拥有一个完全定制化的MySQL服务,高效又优雅,真正实现“一次构建,随处运行”!

jxf_jxfcsdn的博客 822

Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据

/docker-entrypoint-initdb.d/ 本文介绍了使用Dockerfile构建有初始化数据MySQL镜像包的详细过程。通过验证,使用 `/docker-entrypoint-initdb.d` 初始化数据是可行的。

小子宝丁的博客 1万+

Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法

AX200 iwlwifi-cc-46.3cfab8da.0.tgz 无法下载网页出问题使用 其他方法来进行但是前提还是有网络。

chen20170325的博客 1038

【Docker】Linux Docker 中拉取 MySQL 镜像

拉取MySQL 启动MySQL镜像,运行容器 查看MySQL容器启动情况 进入MySQL容器 进入MySQL数据库 退出MySQL数据库 退出MySQL容器

杜小舟的博客 3260

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 376

机器学习算法原理:详细介绍各种机器学习算法的原理、优缺点和适用场景

现在,我们将进入到机器学习的核心部分——算法原理。在本篇文章中,我们将详细探讨各种机器学习算法的原理、优缺点和适用场景。

a871923942的博客 2965

制作MySQL镜像添加默认数据库及数据

(0) 准备以下目录结构 . ├── Dockerfile └── sql-scripts └── 01-playground.sql 复制代码(1) 编写数据库脚本 脚本名: 01-playground.sql SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; CREATE TABLE `t_employee` ( `id` varcha...

weixin_34234823的博客 1250

视觉SLAM十四讲slambook2示例代码所有依赖库的编译安装教程(VTK、OpenCV3、ceres、Sophus、g2o、Eigen、Pangolin、googletest等)

这是2021年的最后一篇博客~ 新年快乐! 0 准备工作   首先需要先安装cmake编译器: sudo apt-get install cmake   以及,将十四讲的示例代码克隆下来(十四讲的源码地址点击这里): git clone --recursive https://github.com/gaoxiang12/slambook2.git   由于里面的3rdparty文件夹内所有内容都来自于其他github仓库,所以需要加上--recursive参数,不然克隆下来的内容不完整。   如果你.

zeeq的博客 7837

通过Dockerfile build mysql镜像 初始化mysql数据库

通过Dockerfile build mysql镜像 初始化mysql数据库

CsbLanca 810

【Claude】Auto mode cannot determine the safety of an action 报错已解决

Claude Code Auto mode 安全分类器报错完整解析,涵盖 temporarily unavailable、could not evaluate、transcript exceeded 三种情况的根因与处理

博客 9945

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

基于官方镜像创建自定义MySQL镜像

基于官方镜像创建自定义MySQL镜像

chenkewen2007的博客 712

9.6华为OD机试真题 新系统 - 仓储货物有序出库 (Java/Py/C/C++/Js/Go)

9.6华为OD机试真题 新系统 - 仓储货物有序出库 (Java/Py/C/C++/Js/Go)

算法大师! 1196

Docker构建MySQL镜像并初始化

文章目录Docker构建MySQL镜像并初始化Dockerfile 的一些常用语法FROMRUNCMDENVCOPYADDWORKDIREXPOSE构建自带初始化的 MySQL 镜像Dockerfile启动脚本schema.sqlprivileges.sql Docker构建MySQL镜像并初始化 使用 docker 直接 pull MySQL 的镜像是很简单,但是有时候却需要对容器做一些初始化操...

Wonderful_sky的博客 5922

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化

前一段时间就在研究用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化,但被一些无关紧要的事儿给耽误了,经过查阅《dockerfile最佳实践》及MySQL数据库的迁移与备份还原的资料,整理了操作过程,并进行了实验,确认此方法可行: MySQL数据库系统的初始化是指MySQL安装到OS上后所经历的initinstall过程,只有经过初始化的数据库系统才能提供数据存储服务、才能被应用程序使用。 实现MySQL在解压安装过程或容器启动过程中的数据库系统的初始化,有三个思路:

UsamaBinLaden6976498的专栏 1688

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Dockerfile构建mysql镜像,并初始化数据库数据

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33816611的博客 1356

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

如何CentOS构建MySQL的docker镜像

记录如何在centos上打包mysql镜像,并且导出此镜像到其他主机上使用

LOVE_LIN_的博客 1830

dockerfile构建mysql_Dockerfile构建mysql镜像,并初始化数据库数据

1)在CentOS7环境中进行操作, 创建文件夹mymy,并新建文件Dockerfile,setup.sh,schema.sql,privileges.sqlmkdir mymycd mymytouch Dockerfiletouch setup.shtouch schema.sqltouch privileges.sqlDockerfile:FROM mysql:5.7ENV MYSQL_ALL...

weixin_36411280的博客 782

基于Dockerfile自动初始化MySQL数据库表结构

我们使用容器的方式部署数据库组件,特别是企业有大量的项目开发业务的,部署的开发、测试数据库组件较多时。经常会遇到以下问题: 业务需要使用数据库,但部署完数据库后,需要在数据库中执行创建schema的操作或者一些初始化数据的创建。 开发测试多套部署环境,需要多次重复1的步骤。 项目比较多,时间久了项目需要的数据库Schema不清楚。 项目交付时数据库Schema管理混乱。 现在如果是使用Go等语言研发的业务系统,都具备了ORM层自动初始化和更新Schema的能力,如果是这样本文对你无用。但目前大多数其他开

亚里士多智的博客 809

docker 生成mysql镜像启动时自动执行sql

在docker 创建 mysql 容器时,往往需要在创建容器的过程中创建database 实例,代码如下: docker run -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=my_db mysql:latest MYSQL_ROOT_PASSWORD=123456,指定 root 用户名密码 123456 MYSQL_DATABASE=my_db 创建数据库实例 my_db 但有时我们还希望在创建实例的过程中.

奇华资料的博客 3342

使用docker构建并部署MySQL5.7镜像

本文主要介绍了如何使用docker构建及部署mysql5.7镜像

zjq852533445的博客 4486

Dockerfile在linux上构建mysql8镜像并创建数据库

由于mysql5和mysql8版本的不同,导致构建镜像的时候存在一定的差异,在此将mysql8镜像的构建做一个总结。 本次总共用到了四个文件,分别是Dockerfile,setup.sh,my.sql,run.sh。 1.Dockerfile Dockerfile是构建镜像必须的文件,需要注意的是第二次copy时必须放到"/docker-entrypoint-initdb.d"路径下,...

kay 3196

docker部署mysql初始化数据库

在使用docker部署mysql服务时,往往需要在创建容器时新建database,在需要在创建实例的过程中希望初始化sql脚本。mysql官方镜像支持在容器初次启动时自动执行指定的sql脚本或shell脚本(注意:只有初次启动时才能自动执行在容器创建时会调用docker-entrypoint.sh这个脚本,这个脚本会遍历docker-entrypoint-initdb.d目录下所有的.sh和.sql后缀的所有脚本并执行,执行顺序为脚本文件名称排序。

欢迎一起学习交流 4955

docker下mysql镜像初始化

1、介绍 原理:当Mysql容器首次启动时,会在/docker-entrypoint-initdb.d目录下扫描.sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。默认情况下它们会初始化在启动容器时声明的MYSQL_DATABASE变量中的数据库。MYSQL_DATABASE这个变量默认是不存在的,必须在启动容器时候声明或定义,否则就扫描/docker-entrypoint-initdb.d目录下进行初始化,如下所示: do..

让爱慢慢成熟,c_x_y_000(微信) 1227

创建一个含有初始化数据库的mysql docker镜像

创建一个含有初始化数据库的mysql docker镜像一、准备一个用于数据库初始化的.sql文件二、编写Dockerfile文件三、编译Dockerfile文件1.在Dockerfile所在目录下,按住< Shift >键,然后右键,点击“在此处打开Powershell”,在powershell中使用以下命令:2.此时查看docker,可以在images里看到刚才创建的镜像了:四、测试1.使用以下命令创建一个容器进行测试:2.然后这个终端会被阻塞,这时候打开另一个终端,使用以下命令进入这个容器:

xswl5148的博客 3416
上一篇: docker中镜像和容器的区别
下一篇: docker中nacos1.0和nacos2.0使用的区别
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值