mysql - 如何预配置和预填充官方MySQL docker容器?

标签 mysql docker dockerfile

我想基于官方 MySQL docker 容器镜像构建一个新的 MySQL 镜像。我想减少运行图像时需要添加的参数数量。 (例如,-e MYSQL_USER-e MYSQL_DATABASE 甚至 -e MYSQL_ROOT_PASSWORD='rootsecret') 其中已包含我对全局变量的设置以及 docker-entrypoint-initdb.d 文件夹中的创建数据库 SQL 文件。

如何添加所有设置并创建一个新镜像以简单地 docker run mysql:config1 docker run mysql:config2 等等?

最佳答案

您可以使用 docker 文件构建您自己的 mysql docker 镜像,配置用户名、密码和您可能需要的所有其他内容,构建该镜像,将其上传到 docker hub,然后当您启动新的 docker 容器时,您只需使用先前构建的容器。

用于构建内部包含 mysql 服务器的 ubuntu 镜像的 Docker 文件示例如下所示(将其保存到名为 Dockerfile 的文件中):

FROM ubuntu:latest
    RUN apt-get update \
    && apt-get install -y apt-utils \                                           
    && { \
        echo debconf debconf/frontend select Noninteractive; \
        echo mysql-community-server mysql-community-server/data-dir \
            select ''; \
        echo mysql-community-server mysql-community-server/root-pass \
            password 'Desired-Password'; \
        echo mysql-community-server mysql-community-server/re-root-pass \
            password 'Desired-Password'; \
        echo mysql-community-server mysql-community-server/remove-test-db \
            select true; \
    } | debconf-set-selections \
    && apt-get install -y mysql-server mysql-client

然后像这样构建你的 mysql docker 容器(你必须位于保存 Docker 文件的文件夹中):

docker build my-ubuntu-mysql-docker

然后你必须将其推送到 docker hub,然后你可以使用它来启动一个新的 docker 容器,如下所示:

docker run -d -p 2222:22 -p 3306:3306 --name my-ubuntu-mysql-docker ...

其中2222是映射到docker容器的ssh端口22的本地ssh端口,3306是映射到docker容器的mysql端口的本地mysql端口。

希望这会有所帮助!

关于mysql - 如何预配置和预填充官方MySQL docker容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689953/

相关文章:

java - 我可以使用多个具有不同 JDK 版本的 spring-boot 容器吗?

php - undefined variable MySQL PHP

php - 查询结果存入一个变量

php - PDO PHP bindValue 不起作用

javascript - 错误 : MongoError: Authentication failed. 我正在使用 docker 和 mongoose

docker - 如何将 dos2unix 添加到基于 Alpine 的 docker 容器中?

php - 以数据库方式处理标签的更有效方法是什么?

docker - Web应用程序docker swarm将源代码放在哪里?

docker : run service on specific nodes using --placement-pref

go - 如果代码未托管在 Internet 上,如何导入包