docker 的内部基础设施

Internal infrastructure with docker

我有一个小型公司网络 services/servers:

所有 运行 在 2 台机器(1 台内部服务器,1 台 hetzner-rootserver)上的单独虚拟子网中的单独 kvm(libvirt)-vms 中,中间有 shorewall。我正在考虑切换到 Docker.

但是我有两个问题:

关于多主机网络:您是对的,Docker 链接不能跨主机工作。使用 Docker 1.9+,您可以像他们的博客 post http://blog.docker.com/2015/11/docker-multi-host-networking-ga/

中描述的那样使用 "Docker Networking"

不过,他们没有解释如何保护连接。我强烈建议在你的 Docker 守护进程上启用 TLS,这也应该保护你的多主机网络(这是一个假设,我没有尝试过)。

对于 Kubernetes,您将添加另一层抽象,因此您需要学习使用 pods 和服务概念。这很好,但可能有点太多了。请记住,您以后仍然可以决定使用 Kubernetes(或替代方案),因此第一步应该是了解如何将您的服务包装在 Docker 容器中。

您不必将所有内容都切换到 Docker。您应该从 Jenkins、Java 应用程序或 OwnCloud 开始,然后再熟悉 Docker 世界。 Jenkins 和 OwnCloud 会给你足够的挑战来获得一些维护容器的经验。如果 Docker 在您的设置中有意义并且您需要将其应用于其他服务,那么您可以更好地评估。

我个人倾向于将所有内容包装在 Docker 中,但这只是出于一个原因:保持主机清洁。如果你到达 运行 中的所有内容 Docker 的地步,你将有更多的自由来选择服务可以 运行 的位置,并且你可以更轻松地将容器移动到其他主机。

您还应该探索 Docker 中心,在那里您可以找到准备好的 运行 解决方案,例如Atlassian 存储:https://hub.docker.com/r/atlassian/stash/

如果您需要特殊应用程序的灵感以及如何将它们包装在 Docker 中,我建议您查看 https://github.com/jfrazelle/dockerfiles - 您会在那里找到很多很好的例子。

您可以像这样创建一个网络,从您的子网为容器提供它们自己的 IP:

docker network create \
  --driver=bridge \
  --subnet=135.181.x.y/28 \
  --gateway=135.181.x.y+1 \
  network

你的网关是你子网的 IP + 1 所以如果我的子网是 123.123.123.123 那么我的网关应该是 123.123.123.124

不幸的是,我还没有弄清楚如何让容器从它们自己的 ip 出现在 public 中,目前它们显示为专用服务器的 ip。如果您知道我该如何解决这个问题,请告诉我。不过,我可以使用它的 ip 访问容器。