mysql - MySQL Docker 容器如果不存在则创建数据库
问题描述
我正在尝试创建一个Dockerfile
将创建一个具有 MySQL 8.0 数据库的图像。
在本地,我将针对这个 MySQL 容器运行我的软件,但在非本地,我将在 AWS 上针对 MySQL 8.0 RDS 集群运行我的软件。
所以对我来说很重要的是,如果有任何 RDS MySQL 8.0“调整”、配置或优化将自动应用,我的本地 MySQL 容器尽可能地模仿这些,以防止“在本地工作但不在开发”症状抬起头来。
我希望能够在我的机器上指定我希望数据在容器运行中存储和持久化的目录。理想情况下,这将作为运行时参数传入,因此如果需要,我可以在运行时更改它。当容器启动时,我需要它运行:
CREATE DATABASE IF NOT EXISTS my_db;
查看官方的MySQL 8.0 Dockerfile我有几个问题:
FROM oraclelinux:7-slim
ARG MYSQL_SERVER_PACKAGE=mysql-community-server-minimal-8.0.23
ARG MYSQL_SHELL_PACKAGE=mysql-shell-8.0.22
# Install server
RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release-el7.rpm \
https://repo.mysql.com/mysql-community-release-el7.rpm \
&& yum-config-manager --enable mysql80-server-minimal \
&& yum install -y \
$MYSQL_SERVER_PACKAGE \
$MYSQL_SHELL_PACKAGE \
libpwquality \
&& yum clean all \
&& mkdir /docker-entrypoint-initdb.d
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /entrypoint.sh
COPY healthcheck.sh /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh
EXPOSE 3306 33060 33061
CMD ["mysqld"]
一方面,我通常尝试使用 Alpine Linux,因为它占用的空间非常小。有什么理由我不能指定alpine:latest
而不是oraclelinux:7-slim
?还是 MySQL需要的东西在 Alpine 上不可用?RDS MySQL 上是否存在我需要在此处设置的任何调整/设置?
但这里真正的问题是,我将如何添加一种方法来连接到正在运行的 MySQL 实例并CREATE DATABASE IF NOT EXISTS my_db;
从这个 Dockerfile 中运行?
解决方案
推荐阅读
- sorting - select2 以所需的顺序以编程方式选择选项
- php - 有没有办法调用稍后在 PHP 中初始化的变量?
- android - 有没有办法将 NDEF 消息传递给字符串?
- flutter - 即使在版本 1.20.0 之后使用 LengthLimitingTextInputFormatter,Flutter TextField 也不遵守 maxLength 限制
- javascript - 数组从索引 19 开始
- r - R卡在anim_save中的渲染
- python - 如何将 QLineEdit() 和 QPushButton 带到登录窗口的中心?
- go - 在 go 中将多条消息发送到一个频道进行整理
- django - 正则表达式在 url 中不匹配
- javascript - 在 Google Chart API 的数据表中组合两个数组时出错