mysql的docker镜像中如何创建数据库


我下载的mysql的官方docker镜像,然后登陆进去创建了一个数据库。
我将这个修改后的container commit成一个新的镜像,里边自然包含了我创建的数据库;
但是在commit之后,我从新生成的镜像启动container,连接进去,发现里边并没有我所创建的数据库。
请问是什么原因?

操作过程如下:
1.下载mysql镜像:docker pull mysql/mysql-server

2.从镜像启动: docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server

3.连接上述启动的container: sudo docker run -it --link mysql:mysql --rm mysql/mysql-server sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'

4.创建database

5.将修改的container提交成一个image:sudo docker commit -m="create database" 05e231bbebdf mysql/mysql-server

6.然后利用新生成的image启动container,重复2和3

7.查看database,没有之前创建的database
已邀请:

徐新坤 - 京东商城-TIG-JDOS团队

赞同来自: Keshawn


先说原因:
从mysql-server的(https://hub.docker.com/r/mysql ... rfile/)可以看到有这样的一行
<pre>
VOLUME /var/lib/mysql
</pre>
这意味着使用这个镜像时,容器的/var/lib/mysql目录会被映射到宿主机上的某个目录。具体映射到哪个目录,可以通过 <strong>docker inspect containerID</strong> 查看。如果不做更改,那么也就意味着你写入的数据会被直接写入到宿主机的该目录中,而且不随容器的销毁而销毁。同样,commit的时候,该目录的内容也不会被加入到镜像中。所以使用commit出来的镜像,你就无法看到先前的数据了(先前的数据文件并没有commit进来)。

再说一下建议:

建议你读一下(https://hub.docker.com/r/mysql/mysql-server/)中Where to Store Data一节,会对你了解如何存储mysql数据有所帮助。

pennymei

赞同来自:


OneAPM公司的Cloud Insight 是一个数据管理平台,支持 MySQL 的监控。提供数据聚合、过滤、分组的功能,让用户能够在集群环境中,了解多节点的 MySQL 运行整体情况,迅速做出判断可以在官网注册试用哦~

要回复问题请先登录注册