首页 > 解决方案 > 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 中运行?

标签: mysqldocker

解决方案


推荐阅读