首页 > 解决方案 > 使用 MySQL 创建 Dockerfile

问题描述

我想创建一个 Dockerfile 以创建一个已经安装了 mysql 并创建了我的数据库的容器。

我有一个sql包含我的 *.sql 文件的script文件夹和一个包含我的db_builder.sh脚本的文件夹,这些脚本可以完成我需要的所有工作(创建数据库、导入所需的 sql 文件等......)。

我唯一缺少的是在db_builder.sh脚本运行之前运行 mysql 服务器。我还需要知道root用户的默认密码是什么。

FROM ubuntu:18.04

ADD sql src/sql
ADD scripts src/scripts

RUN apt-get update && apt-get install mysql-server -y

# somehow start mysql ???

RUN src/scripts/db_builder.sh

标签: mysqldockerdockerfile

解决方案


我通过以下方式解决了我的问题:

1) 从 MySQL 映像而不是 Ubuntu 映像创建 Dockerfile

2) 将 mydb_builder.sh分成两个脚本:prepare_sql_files.sh--> 准备导入所需的 sql 文件db_import.sh--> 实际执行导入

3)在 Dockerfile 中设置 RUN ,同时由于mysql docker 映像的此功能prepare_sql_files.sh而只放置(添加):db_import.sh/docker-entrypoint-initdb.d

首次启动容器时,将使用提供的配置变量创建并初始化具有指定名称的新数据库。此外,它将执行 /docker-entrypoint-initdb.d 中的扩展名为 .sh、.sql 和 .sql.gz 的文件。文件将按字母顺序执行。您可以通过将 SQL 转储安装到该目录并提供带有贡献数据的自定义图像来轻松填充您的 mysql 服务。SQL 文件将默认导入到 MYSQL_DATABASE 变量指定的数据库中。

所以我的 dockerfile 现在看起来像这样:

FROM mysql:latest

ADD sql /src/sql
ADD scripts /src/scripts

RUN /src/scripts/prepare_sql_files.sh

ADD /src/scripts /docker-entrypoint-initdb.d

推荐阅读