用准备的数据库scheme创build一个docker mysql容器

我想在一个已经包含我的应用程序的必要scheme的mysql之上创build一个docker镜像。

我试图添加行到Dockerfile将导入我的scheme作为一个SQL文件。 我这样做(我的Dockerfile):

FROM mysql ENV MYSQL_ROOT_PASSWORD="bagabu" ENV MYSQL_DATABASE="imhere" ADD imhere.sql /tmp/imhere.sql RUN "mysql -u root --password="bagabu" imhere < /tmp/imhere.sql" 

据我的理解,这是行不通的,因为mysql的docker镜像不包含mysql客户端(最佳做法状态“不要添加的东西,只是因为他们会很高兴”)(我错了吗?)

什么可能是一个很好的方法来做到这一点? 我有几件事情,但他们似乎都是凌乱的解决方法。

  1. 安装MySQL客户端,做我所要做的,然后删除/清除它。
  2. 复制mysql客户端二进制文件到图像,做我必须做的,然后删除它。
  3. 在另一个sql服务器中创build模式,并直接复制数据库文件(这看起来非常混乱,听起来像一堆污染问题)

有什么build议么? 希望稍后可以很容易维护,也许符合最佳实践?

你应该把你的init脚本放在挂载为/docker-entrypoint-initdb.d的目录中 – 请参阅MySQL Docker映像文档中的“初始化新实例”部分。

像Ansible这样的pipe理软件可以帮助您轻松实现mysql的导入,而无需安装和重新安装客户端。 Ansible具有很好的内置function来pipe理docker图像和容器以及mysql数据库。