客户希望提供docker应用程序。关于最佳实践,我有两个问题。
首先,我需要使用tomcat,webapp,数据库和一些表来提供应用程序。我理解如何设置tomcat和数据库,但你如何处理他们的资产(即webapp和表)?您是否将它们包含在图像中,然后将其推送至hub.docker.com? 如果webapp和数据库表是专有的,你如何处理?你创建一个私人形象并以某种方式分享它吗?
其次,随着应用程序的运行,数据库表可能会发生变化。据我了解(并经过测试),docker容器是无状态的,因此一旦停止,数据就会被重置。 如何在重启之间保持相同的状态? 我知道你可以在容器和主机之间映射文件夹,但是我真的发送了一个包含数据的单独数据库文件夹并让docker容器映射它吗?这里最好的做法是什么?
提前致谢
编辑首先,感谢所有回复的人。 @ RicardoBranco和@kstromeiraos都对如何分发图像有很好的建议。我不知道客户喜欢哪一个,虽然我想给你们两个勾选标记,但是只允许我给出一个答案。所以我对你们两个都赞不绝口,并且让互联网决定从长远来看哪个答案占优势。
其次,我是个白痴。我正在使用“docker run”命令“启动”我的容器,我现在意识到正在创建一个新的容器,让我相信我丢失了上一次会话中的所有数据。只是在我意识到你应该打电话给“docker start”来“启动”一个容器之后我注意到我在理解上的错误。
谢谢大家
答案 0 :(得分:3)
您可以通过两种方式分发图像。
正如@Ricardo Branco所说,使用私人注册表。
使用docker save
将图片保存到tar文件,然后通过使用docker load
(https://docs.docker.com/engine/reference/commandline/save/)加载来与您的客户分享,可以使用它们。{/ p >
您应该有一个数据库数据仍然存在的卷。您可以映射主机目录。
要备份卷,请查看这个有用的工具,它允许您这样做。 https://github.com/discordianfish/docker-backup
答案 1 :(得分:2)
https://docs.docker.com/registry/
答案 2 :(得分:0)
1)你如何处理专有细节?
在介绍构建docker映像的最佳实践时,您应该注意映像应该使用非root用户构建,这有助于其他用户不访问Web应用程序/数据库中的数据。强>
关于共享您的私有映像,可以将 hub.docker.com 与私有存储库一起使用,也可以使用 AWS ECR - EC2容器注册表。
否则,您可以使用 docker save ,这会将您的图片保存到可以发货的tar文件中。
2) 如何在重启之间保持相同的状态?
只有删除已停止的容器才会删除数据,否则您可以使用“docker commit”将容器保存到图像。这样,您可以将容器中的所有更改保存到图像中。
我建议,不要为数据库单独提供,而是在构建映像时创建它,并使用它或创建运行时文件夹并在运行时将其映射到容器。