1. Docker 服务
作为一名后端攻城狮, 对 "服务" 这个概念一定不陌生. 比如, 我们做一个会员系统, 它可能会需要数据库, 缓存, 消息队列, 这些都是中间件服务, 除此以外可能还需要依赖其它的 Dubbo 服务.
在 Docker 中, 服务就是用于生产环境的容器 ("containers in production"). 我们可以这样来理解这句话, 当我们运行某个镜像时, 其实就产生了一个镜像实例, 这个实例我们把它叫做容器, 接下来我们对它做个升级, 比如一些配置负载均衡, 配置域名解析映射等, 最终它以 web 服务的形式运行, 那么这个升级版的容器就是 Docker 服务. 可以设想一下开发一个 Java 应用程序是怎样的过程, 首先建一个工程, 然后编写代码, 打成 jar 包, 在内网运行, 配置 nginx, 配置告警及监控, 经过这一系列操作后, 客户端才能通过公网访问到这个服务.(PS: 类比 Java 的话, 镜像就是类, 容器就是对象, 服务就是一个成型的 App 产品, 或者叫服务)
一个服务只运行一个映像, 但是它将镜像运行的方式进行了编码, 比如应该使用什么端口, 应该运行多少个容器副本, 以便服务具有所需的能力, 等等. 可以通过改变运行该软件的容器实例的数量来对服务进行扩容, 从而为流程中的服务分配更多的计算资源.
幸运的是, 使用 Docker 平台很容易定义, 运行和扩容服务. 只需要写一个 docker-compose.YAML 文件即可.
2. 第一个 docker-compose.YAML 文件
创建一个文件, 文件命名为 docker-compose.YAML, 将下列内容粘贴到文件中, 保存
一个 docker-compose.YAML 文件是一个 YAML 文件, 它定义了 Docker 容器在生产环境中的行为.
这个 docker-compose.YAML 文件告诉 Docker 要做以下事情:
从注册中心上 pull(拉取) 镜像
以 Web 服务的形式运行该映像的 5 个实例, 限制每个实例最多只能使用 CPU 单个内核时间的 10%(也可以是 "1.5", 表示每个实例只能使用 1.5 个内核) 和 50MB 内存
如果一个容器失败, 立即重启它
将主机上的 4000 端口映射到 Web 的 80 端口
指示 Web 容器通过叫 webnet 的负载均衡网络共享 80 端口
用默认设置定义 webnet 网络
3. 运行新的负载均衡的 App
首先, 运行
接下来, 给 App 起个名字, 比如叫 getstartedlab
我们的单个服务堆栈在一台主机上运行了 5 个容器实例, 让我们来看一看
除了 "docker service ls", 我们还可以通过 "docker stack services" 来查看
还可以通过修改 docker-compose.YAML 来动态的扩展 App, 修改为后需要再执行一次
完整的演示
4. 备忘单
来源: https://www.cnblogs.com/cjsblog/p/10775727.html