青州建设局网站,南通建设厅网站,南京网络营销,dedecms官网需求描述一般而言#xff0c;我们在拉取了 mysql 镜像并运行之后#xff0c;其中的并不会存在我们自定义的数据库#xff0c;都是在镜像运行后#xff0c;自己主动导入数据库#xff0c;那么有没有方式可以一运行 mysql 镜像#xff0c;对应生成的 mysql 容器中就有我们自…需求描述一般而言我们在拉取了 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 镜像运行的一些参数来使自己的镜像也能够多元化的使用。