【问题标题】:How to deliver docker image to client?如何将 docker 镜像传递给客户端?
【发布时间】:2017-11-14 13:59:54
【问题描述】:

客户想要交付一个 docker 应用程序。我有两个关于最佳做法的问题。

首先,我需要交付一个带有 tomcat、一个 webapp、一个数据库和一些表的应用程序。我了解如何设置 tomcat 和数据库,但是您如何处理它们的资产(即 webapp 和表)?您是否将它们包含在图像中,然后将其推送到 hub.docker.com? 如果 webapp 和数据库表是专有的,你如何处理呢?您是否创建了私有图像并以某种方式共享?

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

提前致谢

编辑首先,感谢所有回复的人。 @RicardoBranco 和 @kstromeiraos 都对如何分发图像有很好的建议。我不知道客户更喜欢哪个,虽然我想给你们两个打勾,所以只允许我给一个答案。因此,我对你们俩都投了赞成票,并将让互联网决定从长远来看哪个答案会占上风。

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

谢谢大家

【问题讨论】:

  • 在这种情况下webapp 是否只是带有特定客户端应用程序的war 文件?您会为许多客户重复这样做还是更多的是一次性的?您能否进一步澄清一下应用程序(数据库类型,数据库是否有多个部分(即模式和客户端数据分开)?
  • @AndyShinn 是的,webapp 只是带有特定客户端应用程序的战争文件。一次性的事情。 Mysql DB 最初以模式和数据为种子。使用过程中可能会添加更多数据

标签: docker


【解决方案1】:
  1. 您有两种分发图像的选项。

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

    要备份卷,请查看这个有用的工具,它可以让您做到这一点。 https://github.com/discordianfish/docker-backup

【讨论】:

  • 是否需要docker save/loaddocker export/import 就足够了?
【解决方案2】:
  1. 您可以在 Docker Hub(或 Amazon EC2 Container Registry)中创建一个私有存储库,或者使用 TLS 和某种形式的用户身份验证(使用 TLS 客户端证书和/或 HTTP 基本身份验证)自行设置一个 Docker Registry:

https://docs.docker.com/registry/

  1. 容器停止时不会重置数据,仅当容器(和关联的卷)被移除时。容器是对数据(卷)进行操作的代码的临时实例。

【讨论】:

    【解决方案3】:

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

    在了解构建 docker 镜像的最佳实践时,您应该注意镜像应该由非 root 用户构建,这有助于其他用户不访问您的 web 应用程序/数据库中的数据。强>

    关于共享您的私有图像,请使用带有私有存储库的 hub.docker.com,或者您可以使用 AWS ECR - EC2 Container Registry。

    否则,您可以使用 docker save 将您的图像保存到可以发送的 tar 文件中。

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

    只有在停止的容器被移除时才会移除数据,否则您可以使用 "docker commit" 将容器保存到图像。这样您就可以将容器中的所有更改保存到图像中。

    我建议,与其为您的数据库提供单独的数据库,不如在构建映像时创建它并使用它,或者创建一个运行时文件夹并在运行时将其映射到容器。

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 2020-01-27
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多