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

我下载的mysql的官方docker镜像,然后登陆进去创建了一个数据库。 我将这个修改后的container commit成一个新的镜像,里边自然包含了我创建的数据库; 但是在commit之后,我从新生成的镜像启动container,连接进去,发现里边并没有我所创建的数据库。 请问是什么原因? 操作过程如下: <pre> 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 </pre>
已邀请:

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

赞同来自: Keshawn

先说原因: 从mysql-server的(https://hub.docker.com/r/mysql/mysql-server/~/dockerfile/)可以看到有这样的一行 <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数据有所帮助。
OneAPM公司的Cloud Insight 是一个数据管理平台,支持 MySQL 的监控。提供数据聚合、过滤、分组的功能,让用户能够在集群环境中,了解多节点的 MySQL 运行整体情况,迅速做出判断可以在官网注册试用哦~

要回复问题请先登录注册