Mysql在docker镜像中安装并保存数据

时间:2014-08-20 10:03:07

标签: docker

我是Docker的新手。我创建了一个安装了JAVA和MySQL的docker镜像。我尝试通过将其复制到docker镜像来运行普通的Java应用程序,它成功运行了预期的结果。之后我尝试使用mysql数据库运行基于Java的应用程序。我创建了一个数据库,并尝试执行该程序,它成功运行,我得到了预期的输出。

但是,当我关闭该容器并再次尝试运行它时,它需要我再次创建一个具有相同名称的新数据库,并且我已经存在的数据将丢失。所以,每次打开一个新的mysql,我需要运行它并创建新的数据库和表来存储数据。无论如何都要将我的数据保存在图像中,以便每当我运行泊坞窗图像时,它应该将以前的数据存储在同一个数据库中吗?

3 个答案:

答案 0 :(得分:4)

如果你刚开始使用docker,我建议在容器中为数据库数据安装一个本地目录。这假设您只在一台计算机上运行您的应用程序,但它比为您的数据创建单独的容器更容易。要做到这一点,你会做这样的事情:

# Add VOLUMEs to allow backup of config and databases
VOLUME  ["/etc/mysql", "/var/lib/mysql"]

并做

$ docker run -v /path/to/local/etc:/etc/mysql -v /path/to/local/db:/var/lib/mysql your-image

也就是说,在docker中运行mysql对于docker世界来说是一个非常重要的第一步。这是一个很好的例子:

https://github.com/tutumcloud/tutum-docker-mysql

答案 1 :(得分:3)

图像和容器之间存在差异。

如果要将容器中所做的更改保存到新图像,则应使用

docker commit <container name or id> <optionnal image name>

如果您只想在提交使用之前重新启动容器以进行更多修改:

docker start <container name or id>
docker attach <container name or id>

如何查看所有容器的列表

docker ps -a

答案 2 :(得分:3)

您有两种方法来管理容器中的数据:

  • 数据卷:数据卷是一个或多个容器中的一个特别指定的目录,它绕过Union文件系统为持久数据或共享数据提供了一些有用的功能

  • 数据卷容器:如果您要在容器之间共享某些持久性数据,或者想要从非持久性容器中使用,则最好创建一个命名的数据卷容器,然后从中挂载数据。

有关详细信息,请参阅官方用户指南:https://docs.docker.com/userguide/dockervolumes/