【问题标题】:ADD > LOAD .SQL using Docker Automated build and ComposeADD > LOAD .SQL 使用 Docker 自动构建和撰写
【发布时间】:2016-01-17 22:05:22
【问题描述】:

使用 docker-compose + docker 自动构建时,在 sql 转储中加载的最佳方式是什么?

暂时忽略 docker-compose 并尝试了解 docker 和它的自动构建,但我意识到我可能需要 docker-compose如果我想完成我的项目目标,即使用一个 1 命令并从中拥有一个完全正常工作的 3 站点 Docker 集群

1xHAProxy
3xUbuntu/wp
3xMysqld

在我的 Dockerfile 中,我可以只包含来自我的 Github 存储库的 db.sql,例如

ADD db.sql /tmp/db.sql

未能找到最佳实践,我应该如何在不编写构建之外的任何命令的情况下加载我的数据库。

想知道您使用 Dockerfile 或 Compose 的解决方案

通过执行下面的命令之一 mysql FROM mysql ADD db.sql db.sql 应该在将 db.sql 加载到 mysql 时构建/运行db wp

Dockerfile

$docker run -d user/repo:tag

docker-compose.yml

$docker-compose up

如果我在这里完全走错了路,请给我一些参考。还可以提到,一旦我对 Docker 感觉良好,我就打算使用 CoreOS。因此,如果 CoreOS > Docker 设置的最佳实践是其他内容,请告诉我!

【问题讨论】:

  • 为什么不想在Dockerfile 中添加另一个RUN 命令来加载数据库转储?
  • @AndyShinn RUN 会是什么样子?使用建议here 会给我The command xxx returned a non-zero code:
  • 具体是哪个建议?该问题的答案有一个示例,用于启动mysqld_safe,然后在一个复合RUN 命令中导入数据库。您需要先启动mysqld,然后才能导入数据库,这正是问题所要解决的问题。
  • 所以@AndyShinn 也许你可以给我一个例子,它应该如何以正确的方式完成。
  • 查看官方 MySQL 镜像的“初始化新实例”部分; hub.docker.com/_/mysql,它解释了如何提供自动执行以初始化数据库的 SQL 转储(或 shell 脚本)。您可以将这些文件挂载为卷,或将它们烘焙到映像中以进行分发

标签: mysql docker dockerfile docker-compose


【解决方案1】:

在构建或运行时初始化 SQL 文件有两个选项:

第一种方法是将您的 MySQL 镜像基于官方镜像,并将您的 SQL 文件放在/docker-entrypoint-initdb.d 中(在Dockerfile 中使用ADD my.sql /docker-entrypoint-initdb.d/ 之类的东西)。官方镜像有一个相当复杂的入口点脚本 (https://github.com/docker-library/mysql/blob/master/5.7/docker-entrypoint.sh),它启动 MySQL,初始化用户名和密码,以及来自 /docker-entrypoint-initdb.d 文件夹的脚本。

另一种选择是在https://stackoverflow.com/a/25920875/684908 处执行类似答案的操作,然后添加如下命令:

COPY dump.sql /tmp/
RUN /bin/bash -c "/usr/bin/mysqld_safe &" && \
  sleep 5 && \
  mysql -u root -e "CREATE DATABASE mydb" && \
  mysql -u root mydb < /tmp/dump.sql

【讨论】:

  • 我不确定第二个选项是否有效,因为 MySQL 映像使用 aVOLUME 作为数据目录;所以数据库在构建后不会持续存在
  • 在 Dockerfile 中使用以下内容确实将我的 db.sql 加载到ENV MYSQL_DATABASE,因此取得了一些进展。 FROM mysql ADD db.sql /docker-entrypoint-initdb.d/ ENV MYSQL_DATABASE mydb ENV MYSQL_ROOT_PASSWORD 123 ENV MYSQL_USER user ENV MYSQL_PASSWORD 123
猜你喜欢
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 2023-04-08
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多