Mysql已安装并在docker映像中持久化数据

Mysql已安装并在docker映像中持久化数据,docker,Docker,我是码头工人的新手。我创建了一个docker映像,其中安装了JAVA和MySQL。我尝试通过将普通Java应用程序复制到docker映像中来运行它,它成功地运行了,获得了预期的结果。之后,我尝试使用mysql数据库运行一个基于Java的应用程序。我创建了一个数据库,并尝试执行该程序,它成功运行,我得到了预期的输出 但是,当我关闭该容器并再次尝试运行它时,它要求我再次创建一个同名的新数据库,而我已经存在的数据将丢失。所以,每次它打开一个新的mysql,我都需要运行它并创建新的数据库和表来存储数据。

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


但是,当我关闭该容器并再次尝试运行它时,它要求我再次创建一个同名的新数据库,而我已经存在的数据将丢失。所以,每次它打开一个新的mysql,我都需要运行它并创建新的数据库和表来存储数据。是否仍然可以将我的数据保存在映像中,以便每隔一次运行docker映像时,它应该将以前的数据存储在同一数据库中?

映像和容器之间存在差异

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

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

有两种方法可以管理容器中的数据:

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

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


有关更多信息,请参阅官方用户指南:

如果您刚开始使用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世界中非常重要的第一步。这是一个很好的例子:

# 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