我是Docker的新手。我创建了一个安装了JAVA和MySQL的docker镜像。我尝试通过将其复制到docker镜像来运行普通的Java应用程序,它成功运行了预期的结果。之后我尝试使用mysql数据库运行基于Java的应用程序。我创建了一个数据库,并尝试执行该程序,它成功运行,我得到了预期的输出。
但是,当我关闭该容器并再次尝试运行它时,它需要我再次创建一个具有相同名称的新数据库,并且我已经存在的数据将丢失。所以,每次打开一个新的mysql,我需要运行它并创建新的数据库和表来存储数据。无论如何都要将我的数据保存在图像中,以便每当我运行泊坞窗图像时,它应该将以前的数据存储在同一个数据库中吗?
答案 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世界来说是一个非常重要的第一步。这是一个很好的例子:
答案 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/