我想创建一个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
答案 0 :(得分:0)
我通过以下方式解决了我的问题:
1)从MySQL映像而不是Ubuntu映像创建Dockerfile
2)将我的db_builder.sh
分成两个脚本:
-prepare_sql_files.sh
->准备要导入的所需sql文件
-db_import.sh
->实际上执行导入
3)由于mysql docker image的这一功能,在Dockerfile中设置了prepare_sql_files.sh
的运行,而只是将db_import.sh
放置(ADD)在/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