【问题标题】:How can I create a docker image with a initialized database如何使用已初始化的数据库创建 docker 映像
【发布时间】:2017-08-08 19:29:47
【问题描述】:

我想使用官方mysql docker image 来创建一个带有初始化数据库和导入转储文件的新图像。默认命令是mysqld,所以我想知道如何实现这一点。 有没有办法只初始化数据库并导入转储,而不启动 mysql 守护进程?

【问题讨论】:

    标签: mysql docker


    【解决方案1】:

    MySQL docker 镜像会在首次启动时自动解析来自/docker-entrypoint-initdb.d 目录的.sh .sql.sql.gz。文件将按字母顺序执行。

    将现有数据库转储到文件中,然后编辑 Dockerfile 以添加:

    ADD mysqldump.sql /docker-entrypoint-initdb.d/mysqldump.sql
    

    第一次启动时,mysqldump.sql 将被导入。

    【讨论】:

      【解决方案2】:

      一个选项是访问 docker 容器的 bash shell(请参阅 https://hub.docker.com/_/mysql/ 中的“容器 shell 访问和查看 MySQL 日志”部分),导入您的转储文件(您可以使用 docker cp 复制转储文件从您的主机系统到 docker 容器),完成后,您可以使用docker commit 命令从当前运行的容器创建一个新的 docker 映像。之后您可以使用新创建的图像。

      希望这会有所帮助。

      【讨论】:

      • 谢谢,这行得通,虽然我仍然不喜欢这个过程。据我所知,我无法自动执行此操作。
      • 您还可以创建一个 docker 文件,您可以在其中提及相同的步骤,并从该 docker 文件中创建一个 docker 映像。
      【解决方案3】:

      我刚刚找到了mysql:5.7 的解决方案。我在构建过程中执行了稍微修改的entrypoint.sh

      COPY ./docker-entrypoint.sh /
      RUN /docker-entrypoint.sh mysqld
      

      docker-entrypoint.sh我删除了最后一行:

      exec "$@
      

      它看起来很丑,但到目前为止还有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多