上篇中,我们主要介绍了使用docker-compose对Windows Docker单服务器进行远程管理,编译和部署镜像,并且设置容器的自动启动。但是,还有一些重要的问题没有解决,这些问题不解决,就完全谈不上运维:

问题一:如此部署的应用,在宿主机外部,只能通过宿主机的ip加一个个特定的端口来访问每个容器内的应用,这显然是不满足实际需求的。

问题二:相比于将应用直接部署在有UI界面的Windows Server,因为每个应用部署于自己的Windows Docker容器,当应用运行时发生各种问题时,比如,cpu高,内存高,访问变慢等等,如何才能方便地排查问题呢?即使你愿意一个个容器attach上去,也因为它没有UI,远没有传统有UI界面的Windows Server上容易。所以,我们必须有必要的工具来更方便的监控容器的运行。

下篇

  • 负载均衡和反向代理

  • 日志解析和监控

负载均衡和反向代理

要解决问题一:

  • 首先,我们需要一个机制,当用户访问我们的ip或域名时,服务器能根据不同的域名,或者不同的子路径,在相同的端口比如80或者443,从每个应用容器返回内容——这就是反向代理;

  • 接着,我们不希望我们的应用在更新、系统维护、或者局部故障时无法提供服务,所以,每个部署的应用不能是单点,那么,如果同一个应用部署了多个容器实例,如何才能让他们Serve相同的域名和URL请求呢?——这就是负载均衡;

通常,支持反向代理的组件,往往也同时提供负载均衡功能。例如:F5、nginx、Apache2、HAProxy甚至IIS的ARR等。不同的方案可能侧重点略有不同,我们可以根据实际情况选择不同的方案。另外,既然我们的应用部署在Windows Docker服务器,那么最好我们所用的代理组件同样能部署在Windows Docker容器,这样我们就能用一致的流程和工具来管理。下面的示例中,我们选择Apache2,实现一个部署于Windows Docker部署的反向代理加负载均衡器。

为了演示负载均衡,我们新建一个two-instances-demo目录,其中docker-compose.yml里为iis-demo添加两个不同内部ip的容器实例,再添加一个apache容器,它的Dockerfile定义在apache目录中。

version: "2.1"services:  apache:    build: .    image: "apache-proxy:1.0"    ports:
    - "80:80"    networks:      nat:
  iis-demo-1: