客户希望交付docker应用程序。关于最佳实践,我有两个问题。
首先,我需要提供一个带有tomcat的应用程序、一个webapp、一个数据库和一些表。我知道如何设置tomcat和数据库,但你如何处理它们的资产(即webapp和表)?您是否将它们包含在图片中,然后将其推送到hub.docker.com?如果webapp和数据库表是专有的,您如何处理?您是否创建了一个私人图像并以某种方式共享?
其次,随着应用程序的运行,数据库表可能会发生变化。据我所知(并经过测试),docker容器是无状态的,因此一旦停止,数据就会被重置。如何在重新启动之间保持相同的状态?我知道你可以在容器和主机之间映射文件夹,但我真的要在一个单独的数据库文件夹中包含数据并让docker容器映射它吗?这里的最佳实践是什么?
提前感谢
编辑首先,感谢所有回复的人。对于如何分发图片,@RicardoBranco和@kstromeiraos都有很好的建议。我还不知道客户更喜欢哪一个,虽然我想给你们两个打勾,但我只能给一个答案。所以我已经给你们两个投了赞成票,并将让互联网决定从长远来看哪个答案占上风。
第二,我是个白痴。我使用“docker run”命令来“启动”我的容器,我现在意识到这是在创建一个新的容器,让我相信我已经丢失了上一次会话中的所有数据。直到我意识到你应该叫“docker start”来“启动”一个容器之后,我才注意到我的理解错误。
谢谢大家
1)您如何处理专有细节?
当谈到构建docker图像的最佳实践时,您应该注意,图像应该由非根用户构建,这有助于其他用户不访问您的web应用程序/数据库中的数据。
关于私有映像的共享,请使用私有存储库 hub.docker.com,或者您可以使用 AWS ECR - EC2 容器注册表。
否则,您可以使用dockersave,它会将您的图像保存到一个tar文件中,该文件可以发送。
2) 如何在重新启动之间保持相同的状态?
只有当停止的容器被删除时,数据才会被删除,否则您可以使用“docker commit”将容器保存到图像中。这样,您可以将容器中的所有更改保存到图像中。
我建议,与其为数据库提供单独的,不如在构建映像时创建相同的映像并使用它,或者在运行时创建一个运行时文件夹并将其映射到容器。
https://docs.docker.com/registry/
> < li>
您有两种选择来分发图像。
>
正如@Ricardo Branco所说,使用私人注册表。
使用 docker save
将映像保存到 tar 文件,然后与客户端共享,客户端可以通过使用 docker load
(https://docs.docker.com/engine/reference/commandline/save/) 加载它们来使用它们。
您应该有一个保存数据库数据的卷。您可以映射主机目录。
要备份卷,请查看这个有用的工具,它允许您这样做。 https://github.com/discordianfish/docker-backup
我有一个mongodb服务和一个使用docker compose运行的测试服务: 在我试图运行的start.sh脚本中: 但我得到了以下错误: 我的问题是:为什么会发生错误?Dependes_on属性不应该自动包含服务依赖项吗?正如这里提到的: depends_on 表示服务之间的依赖关系,这有两个效果: docker compose up将按依赖顺序启动服务。在下面的示例中,db和redis将在
问题内容: 当docker-demon启动时,它会向iptables添加一些规则。当通过我删除所有规则时,必须停止并重新启动docker demon以重新创建dockers规则。 有没有办法让docker重新添加其他规则? 问题答案: 最好的方法是重启docker服务,然后将docker规则重新添加到iptables中。(上DEB基:) 但是,如果您只想恢复这些规则而无需重新启动服务,我保存了我的
我已经成功安装了ibm_db v3。docker映像中的0.1包,但当我尝试导入ibm_db_dbi模块时,它会抛出错误。 Dockerfile: 构建成功后,其执行下面的ibm_db模块来映像。 正在下载https://files.pythonhosted.org/packages/98/cb/f77d9bd5f64246074af364cc30e20e3044c533890f3b67d30e8
问题内容: 我有3个简单的微服务(mysql,apirest,gui),我开始使用docker-compose: 在 MySQL的 和 apirest 微服务没有问题可以进行通信(我可以连接到我的数据库 apirest 使用 的MySQL 作为主机名。 但是,当我尝试使用 apirest* 作为主机名执行http请求(角度)时,我在 gui 微服务中收到以下错误: * 无法加载资源:net ::
我有一系列svg矩形(使用D3.js),我想在mouseover上显示一条消息,该消息应该被一个充当背景的框包围。它们应该彼此完全对齐,并与矩形(在顶部和居中)完全对齐。做这件事最好的方法是什么? 我尝试使用“x”、“y”、“width”和“height”属性添加一个svg文本,然后预置一个svg rect。问题是文本的参考点在中间(因为我希望它居中对齐,所以我使用了),但对于矩形,它是左上的坐标
我正在使用GKE和Terraform配置一个高可用的kubernetes集群。多个团队将在集群上运行多个部署,我预计大多数部署将在一个自定义命名空间中,主要是出于隔离的原因。 我们的一个开放问题是如何管理集群上的GCP服务帐户。 我可以使用自定义GCP服务帐户创建集群,并调整权限,以便它可以从GCR中提取映像,日志到stackdriver等。我认为这个自定义服务帐户将被GKE节点使用,而不是默认的
我使用的是Elasticsearch 5.2和Spring Boot 1.5.1。我通过一个Spring应用程序中的Java客户端连接到它。当我在端口或上连接到它时,得到。在我的Java客户机中,我将属性设置为。通过端口9200上的cURL向它发送请求时,它工作正常。我在一个集群中有4个节点,我不能连接到其中任何一个。我的配置文件具有分部中的所有默认值,但除外,后者的值为。 我在用Gradle。我
问题内容: 为了在Windows上使用Java进行客户端HTTP SPNEGO身份验证,您需要设置Windows注册表项allowtgtsessionkey。这是有据可查的。我不明白的是人们如何解决这个问题?大多数公司站点永远不会接受只使用一个软件就可以在Windows中更改此注册表项。还需要考虑是否需要在组织中的每个工作站上更改此麻烦。但这只是理论,因为到目前为止,我一直无法说服我们的任何客户更