使用dockerfile在mysql中创build一个默认的数据库

我使用这个tutum-docker-mysql dockerfile来启动并运行一个docker镜像,并在其中安装了mysql, docker文件创build一个名为root并且没有密码的用户,我需要的是把这样的东西添加到dockerfile:

RUN mysql -uroot -p"" && mysql create database test; 

所以当我从docker文件build立一个图像时,数据库应该已经在那里了。

通过执行以下操作,我能够完成将数据库添加到tutum-docker-mysql映像的目标。

 git clone https://github.com/tutumcloud/tutum-docker-mysql.git cd tutum-docker-mysql vi create_mysql_admin_user.sh 

在.sh文件里面我添加了一行,就在两个已经存在的“mysql -uroot”行之下。 我简单地补充说:

 mysql -uroot -e "create database test;" 

之后,更改为.sh文件,我只是build立了docker图像。

 docker build -t tutum/mysql . 

在build立docker镜像之后,我可以运行如下的东西:

 docker run -d -p 3307:3306 tutum/mysql 

一旦容器正在运行,您需要知道要使用的密码和容器的IP地址。 要获取密码,你只需要做

 docker logs 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

但是,当然使用从上面的“docker run”命令返回的容器ID。 现在你有密码,你需要的IP地址。 我这样做了。

 docker inspect 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

看着“网关”地址。 随着密码和IP地址,我就可以从容器的外部做这个mysql命令。

 mysql -uadmin -pJcM5FCphMOp4 -h172.17.42.1 -P3307 

其中ip地址和密码是我从前两个docker命令获得的值。 在命令运行之后,我可以发出一个“show databases”命令,结果如下。

 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) mysql> 

我争取了一段时间,通过修改Dockerfile来尝试它。 我认为这可能是可能的,但过了一段时间,我发现上述解决scheme更快,更简单。

您可以在容器启动时传递ON_CREATE_DB env参数。 来自tutum README.md的示例

docker run -d -p 3306:3306 -e ON_CREATE_DB="newdatabase" tutum/mysql