Mysql 添加>;使用Docker自动构建和组合加载.SQL 当使用docker compose+docker automated builds时,在sql转储中加载的最佳方式是什么?

Mysql 添加>;使用Docker自动构建和组合加载.SQL 当使用docker compose+docker automated builds时,在sql转储中加载的最佳方式是什么?,mysql,docker,dockerfile,docker-compose,Mysql,Docker,Dockerfile,Docker Compose,有一段时间我一直在忽略docker compose,试图了解docker及其自动构建,但我逐渐意识到,如果我想实现我的项目目标,即使用一个1命令并从中拥有一个完全工作的3站点,我可能需要使用docker compose集群 1xHAProxy 3xUbuntu/wp 3xMysqld 在我的Dockerfile中,我可以只包含来自Github repo的db.sql ADD db.sql /tmp/db.sql 未能找到一个最佳实践,即如何在不编写构建之外的任何命令的情况下加载数据库 想知道您

有一段时间我一直在忽略docker compose,试图了解docker及其自动构建,但我逐渐意识到,如果我想实现我的项目目标,即使用一个1命令并从中拥有一个完全工作的3站点,我可能需要使用docker compose集群

1xHAProxy
3xUbuntu/wp
3xMysqld

在我的Dockerfile中,我可以只包含来自Github repo的db.sql

ADD db.sql /tmp/db.sql
未能找到一个最佳实践,即如何在不编写构建之外的任何命令的情况下加载数据库

想知道您使用Dockerfile或Compose解决此问题的方法吗
只需执行mysql下的一个命令,在将db.sql加载到mysql db wp

Dockerfile

$docker run -d user/repo:tag
docker compose.yml

$docker-compose up

如果我在这里完全走错了路,请给我一些参考资料。还可以提到,一旦我觉得Docker不错,我计划使用CoreOS。因此,如果CoreOS>Docker设置的最佳实践是其他的,请告诉我

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

第一种方法是将MySQL映像建立在官方映像的基础上,并将SQL文件放入
/docker entrypoint initdb.d
(使用
Dockerfile
中添加my.SQL/docker entrypoint initdb.d/
)。官方镜像有一个相当复杂的entrypoint脚本(),它启动MySQL,初始化用户名和密码,并从
/docker entrypoint initdb.d
文件夹中编写脚本

另一个选项是执行类似于的操作,只需添加一个命令,例如:

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
COPY dump.sql/tmp/
运行/bin/bash-c”/usr/bin/mysqld_safe&“&”\
睡眠5&&\
mysql-u root-e“创建数据库mydb”&\
mysql-u root mydb
为什么不让另一个
运行
Dockerfile
中的
命令来加载数据库转储?@AndyShinn运行
会是什么样子?使用suggestion将给我
命令xxx返回一个非零代码:
具体是哪个建议?这个问题的答案有一个示例,用于启动
mysqld\u safe
,然后在一个复合
RUN
命令中导入数据库。在导入数据库之前,您需要启动
mysqld
,这正是问题所要解决的问题。因此@AndyShinn也许您可以给我一个例子,说明如何正确操作。看看官方MySQL映像中的“初始化新实例”部分,这说明了如何提供自动执行以初始化数据库的SQL转储(或shell脚本)。您可以将这些文件装载为卷,或者将它们烘焙到映像中,但我不确定第二个选项是否有效,因为MySQL映像使用了一个
volume
作为数据目录;因此,在Dockerfile中使用following将我的db.sql加载到
ENV MYSQL\u数据库中之后,数据库将不会持久化,因此取得了一些进展<代码>从mysql添加db.sql/docker-entrypoint-initdb.d/ENV mysql\u数据库mydb ENV mysql\u ROOT\u密码123 ENV mysql\u用户用户ENV mysql\u密码123