如何将docker镜像传送给客户端?

时间:2017-06-13 00:14:05

标签: docker

客户希望提供docker应用程序。关于最佳实践,我有两个问题。

首先,我需要使用tomcat,webapp,数据库和一些表来提供应用程序。我理解如何设置tomcat和数据库,但你如何处理他们的资产(即webapp和表)?您是否将它们包含在图像中,然后将其推送至hub.docker.com? 如果webapp和数据库表是专有的,你如何处理?你创建一个私人形象并以某种方式分享它吗?

其次,随着应用程序的运行,数据库表可能会发生变化。据我了解(并经过测试),docker容器是无状态的,因此一旦停止,数据就会被重置。 如何在重启之间保持相同的状态? 我知道你可以在容器和主机之间映射文件夹,但是我真的发送了一个包含数据的单独数据库文件夹并让docker容器映射它吗?这里最好的做法是什么?

提前致谢

编辑首先,感谢所有回复的人。 @ RicardoBranco和@kstromeiraos都对如何分发图像有很好的建议。我不知道客户喜欢哪一个,虽然我想给你们两个勾选标记,但是只允许我给出一个答案。所以我对你们两个都赞不绝口,并且让互联网决定从长远来看哪个答案占优势。

其次,我是个白痴。我正在使用“docker run”命令“启动”我的容器,我现在意识到正在创建一个新的容器,让我相信我丢失了上一次会话中的所有数据。只是在我意识到你应该打电话给“docker start”来“启动”一个容器之后我注意到我在理解上的错误。

谢谢大家

3 个答案:

答案 0 :(得分:3)

  1. 您可以通过两种方式分发图像。

  2. 您应该有一个数据库数据仍然存在的卷。您可以映射主机目录。

    要备份卷,请查看这个有用的工具,它允许您这样做。 https://github.com/discordianfish/docker-backup

答案 1 :(得分:2)

  1. 您可以在Docker Hub(或Amazon EC2 Container Registry)中创建一个私有存储库,或者使用TLS和某种形式的用户验证(使用TLS客户端证书和/或HTTP基本身份验证)自行设置Docker Registry:
  2. https://docs.docker.com/registry/

    1. 只有在删除容器(和关联的卷)时,才会在容器停止时重置数据。容器意味着是在数据(卷)上运行的代码的短暂实例。

答案 2 :(得分:0)

  

1)你如何处理专有细节?

在介绍构建docker映像的最佳实践时,您应该注意映像应该使用非root用户构建,这有助于其他用户不访问Web应用程序/数据库中的数据。

关于共享您的私有映像,可以将 hub.docker.com 与私有存储库一起使用,也可以使用 AWS ECR - EC2容器注册表。

否则,您可以使用 docker save ,这会将您的图片保存到可以发货的tar文件中。

  

2)   如何在重启之间保持相同的状态?

只有删除已停止的容器才会删除数据,否则您可以使用“docker commit”将容器保存到图像。这样,您可以将容器中的所有更改保存到图像中。

我建议,不要为数据库单独提供,而是在构建映像时创建它,并使用它或创建运行时文件夹并在运行时将其映射到容器。