Docker新手入门之七:Docker编配工具介绍

转载过程中,图片丢失,代码显示错乱。

为了更好的学习内容,请访问原创版本:

https://www.missshi.cn/api/view/blog/5a6328370a745f6335000007

Ps:初次访问由于js文件较大,请耐心等候(5s左右)

 

 

Docker的编配是指容器的自动配置、协作和服务管理的过程。

编配常常用于描述一组实践过程。通常会管理运行在多个Docker容器里面的应用,有时这些Docker容器也会运行在多个宿主机上。

本文中,我们将主要讲解众多编配工作中的两种,分别是适用于简单容器编配的Fig以及管理分布式服务的Consul。

Fig

安装

Fig是基于Python编写的一款Docker编配工具,可以执行使用Python的包管理工具pip来进行安装:

 
  
  1. pip install -U fig

安装完成后可以执行如下命令来查看fig的版本:

 
  
  1. fig 1.0.1

示例服务演示

为了演示Fig的工作原理,我们以一个Python Flask服务为例进行讲解。 
该示例需要使用如下两个容器:

  • 应用容器,运行Python代码
  • Redis容器,运行Redis数据库

下面开始构建应用容器镜像:

 
  
  1. mkdir figapp
  2. cd figapp
  3. touch Dockerfile

编辑Dockerfile如下:

 
  
  1. FROM python:2.7
  2. MAINTAINER nianshi <nianshi0912@gmail.com>
  3. ENV REFRESHED_AT 2018-02-18
  4. ADD . /figapp
  5. WORKDIR /figapp
  6. RUN pip install -r requirements.txt

接下来,我们需要在当前目录下创建如下两个文件:app.py程序运行文件及requirements.txt依赖库文件。 
其中app.py文件内容如下:

 
  
  1. from flask import Flask
  2. from redis import Redis
  3. import os
  4. app = Flask(__name__)
  5. redis = Redis(host="redis", port=6379)
  6. @app.route('/')
  7. def hello():
  8. redis.incr('hits')
  9. return 'Hello Docker Book reader! I have been seen {0} times'.format(redis.get('hits'))
  10. if __name__ == "__main__":
  11. app.run(host="0.0.0.0", debug=True)

requirements.txt文件内容如下:

 
  
  1. flask
  2. redis

这个简单的Flask服务的作用就是统计页面被访问的次数。 
整体Dockerfile文件的作用也相对简单,首先就是将源代码加载至容器中,此外就是安装Flask服务依赖的一些第三方库。 
下面,我们来构建该镜像:

 
  
  1. docker build -t nianshi/figapp .

fig.yml

现在,应用服务的镜像已经准备完成了,我们可以配置Fig来创建需要的服务了。 
使用Fig,可以定义一组服务之间的相互关系,只要我们将这些配置信息都写入一个YAML的文件中,执行fig up命令即可启动这些容器。 
首先,我们来创建一个fig.yml文件:

 
  
  1. web:
  2. image: nianshi/figapp
  3. command: python app.py
  4. ports:
  5. - "5000:5000"
  6. volumes:
  7. - .:/figapp
  8. links:
  9. - redis
  10. redis:
  11. image: nianshi/redis_base
  12. command: redis-server

对于每个服务(web/redis),需要设置相关的配置参数。 
以Web为例: 
image表示该服务基于的镜像; 
command表示启动容器时要执行的命令; 
port指的是端口映射; 
volumes指的是卷映射。 
links表示的服务之间的连接关系。 
对于该配置文件,我们可以转换为如下命令:

 
  
  1. docker run -d -p 5000:5000 -v .:/figapp --link redis:redis --name nianshi/figapp python app.py

运行Fig

执行执行如下命令即可启动服务:

 
  
  1. fig up

如果希望服务在后台运行,则直接添加-d参数即可:

 
  
  1. fig up -d

接下来,我们打开浏览器访问页面: 
title

使用Fig

在宿主机命令行使用如下命令可以查看所有Fig编配的服务的状态:

 
  
  1. fig ps

title 
同时,可以使用如下命令来查看服务日志:

 
  
  1. fig logs

使用如下命令可以停止正在运行的服务:

 
  
  1. fig stop

它们停止该编配文件中的所有服务。 
Ps:fig kill可以用于停止服务。 
对于停止后的服务,可以使用如下命令重新启动:

 
  
  1. fig start

最后,我们使用如下命令来删除这些服务:

 
  
  1. fig rm

Ps:补充一句,Fig的使用方式与目前流行的Docker三剑客之一的docker-compose十分类似,感兴趣的同学可以自行了解一下docker-compose的使用。

Consul

对于分布式程序应用而言,一般由多个组件(服务)组成。 
这些服务可以都放在一台机器上,也可以分布在多个数据中心中。而这些组件之间通常是互相关联的,即为其他组件提供相关服务。 
而在这个过程中,服务发现就显得十分重要了。服务发现是指管理多个应用程序之间的相互关系。 
由于应用服务本身是分布式的,因此服务发现机制通常也是分布式的。并且其本身要求足够可靠。 
Consul就是一个典型的服务发现工具。它使用一个一致性算法的特殊数据存储器,即使用Raft一致性算法来提供确定的写入机制。 
此外,Consul还有一些如下的功能:

  • 根据API进行服务分类
  • 提供基于DNS查询接口和REST API查询接口。
  • 提供了完整强大的服务监控体系。

接下来的内容中,我们将会学习如下内容:

  1. 创建Consul服务的Docker镜像。
  2. 构建三台Docker宿主机,并在每台机器上运行一个Consul,来展现Consul如何处理弹性和失效的情况。
  3. 构建服务并注册到Consul,然后从其他服务查询该数据。

构建Consul镜像

首先创建文件夹准备构建Consul镜像:

 
  
  1. mkdir consul
  2. cd consul
  3. touch Dockerfile

修改Dockerfile文件如下:

 
  
  1. FROM ubuntu:16.04
  2. MAINTAINER nianshi <nianshi0912@gmail.com>
  3. ENV REFRESHED_AT 2018-02-18
  4. RUN apt-get -qq update
  5. RUN apt-get -qq install curl unzip
  6. ADD https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip /tmp/consul.zip
  7. RUN cd /usr/sbin &amp;&amp; unzip /tmp/consul.zip &amp;&amp; chmod +x /usr/sbin/consul &amp;&amp; rm /tmp/consul.zip
  8. RUN mkdir -p /webui/
  9. ADD https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_web_ui.zip /webui/webui.zip
  10. RUN cd /webui &amp;&amp; unzip webui.zip &amp;&amp; rm webui.zip
  11. ADD consul.json /config/
  12. EXPOSE 53/udp 8300 8301 8301/udp 8302 8302/udp 8400 8500
  13. VOLUME ["/data"]
  14. ENTRYPOINT [ "/usr/sbin/consul", "agent", "-config-dir=/config" ]
  15. CMD []

其中,用到一个consul.json文件,其内容如下:

 
  
  1. {
  2. "data_dir": "/data",
  3. "ui_dir": "/webui",
  4. "client_addr": "0.0.0.0",
  5. "ports": {
  6. "dns": 53
  7. },
  8. "recursor": "8.8.8.8"
  9. }

下面,我们来分析一下Dockerfileconsul.json两个文件:

  1. 安装了curl unzip
  2. 下载并解压consul的zip文件
  3. 下载Consul网页界面并解压到/webui目录下。
  4. 添加配置文件至/config/中。
  5. 暴露一系列端口,作用如下:
端口 用途
53/udp DNS服务器
8300 服务器使用的RPC
8301+udp Serf服务器使用的LAN端口
8302+udp Serf服务器使用的WAN端口
8400 命令行PRC接入点
8500 HTTP API

下面,我们来构建镜像:

 
  
  1. docker build -t nianshi/consul .

单机测试Consul容器

执行如下命令启动Consul容器

 
  
  1. docker run -p 8500:8500 -p 53:53/udp -h node1 nianshi/consul -server -bootstrap

其中,-server表示告诉consul代理以服务器的模式运行,-bootstrap表示本节点自选举为集群领导者。 
Ps:一个集群中,只能有一个节点可以添加-bootstrap。 
浏览器访问8500端口可以看到如下页面: 
Docker新手入门之七:Docker编配工具介绍_第1张图片

其他编配工具介绍

Fleet和etcd

Fleet是一个集群管理工具,etcd是一个高可用性的键值数据库,用于共享配置和服务发现。

Docker三剑客

docker-compose、docker-machine以及swarm俗称Docker三剑客,是常用的Docker编配工具之一。

Kubernetes

Kubernetes是Google开源的容器集群调度管理工具,是目前Docker容器编排中最流行的工具之一。

Ps:此外还有一些流行的工具,例如Apache Mesos,Helios,Centurion等。


 

更多更详细的内容,请访问原创网站:

https://www.missshi.cn/api/view/blog/5a6328370a745f6335000007

Ps:初次访问由于js文件较大,请耐心等候(5s左右)

你可能感兴趣的:(Docker,Docker,Swarm,Kubernetes技术栈学习)