长话短说,本文旨在记录基于阿里容器云的微服务部署过程,让大家对阿里容器云的使用,微服务的部署有一个整体认识。这个话题我会分几篇文章阐述,由浅入深,部署由笨拙到灵巧,大家一起学习,进步!今天我们说说来看看整体框架的部署过程:


1.
登陆阿里云consle创建容器集群并加入三个ecs节点
阿里云console-->容器服务-->集群-->创建集群
从零开始部署基于阿里容器云的微服务(consul+registrator+template)(一)_第1张图片                           

我们的测试节点如下:

192.168.1.1 node1

192.168.1.2 node2consul master

192.168.1.3 node3

2.分别登陆测试节点node1-node3获取consul
docker pull progrium/consul

 

3.node2上启动consul master

docker run -d -h master -v /data:/data\

-p 192.168.1.2:8300 \

-p 192.168.1.2:8301:8301 \

-p 192.168.1.2:8302:8302 \

-p192.168.1.2:8400:8400 \

-p 8500:8500 \

progrium/consul -server-advertise 192.168.1.2 -bootstrap-expect 3(等到集群节点到三个才启动)

4.node1node3上启动consuljoinnode2

node1

docker run -d -h node1 -v /data:/data \

-p 192.168.1.1:8300:8300 \

-p 192.168.1.1:8301:8301 \

-p 192.168.1.1:8302:8302 \

-p 192.168.1.1:8400:8400 \

-p 8500:8500 \

progrium/consul -server -advertise 192.168.1.1-join 192.168.1.2

 

node3

docker run -d -h node1 -v /data:/data \

-p 192.168.1.3:8300:8300 \

-p 192.168.1.3:8301:8301 \

-p 192.168.1.3:8302:8302 \

-p 192.168.1.3:8400:8400 \

-p 8500:8500 \

progrium/consul -server -advertise 192.168.1.3-join 192.168.1.2

 

5.检查consul集群状态

Node2上执行

wKiom1ia5YqD5D_PAABow73eP9c282.png-wh_50

显示节点信息

 

6.安装部署registrator并注册到consul

Node1

docker run -d -v/var/run/docker.sock:/tmp/docker.sock --name node1 -h node1gliderlabs/registrator:latest consul://192.168.1.2:8500

node2:

docker run -d -v/var/run/docker.sock:/tmp/docker.sock --name node2 -h node2gliderlabs/registrator:latest consul://192.168.1.2:8500

node3:

docker run -d -v/var/run/docker.sock:/tmp/docker.sock --name node3 -h node3 gliderlabs/registrator:latestconsul://192.168.1.2:8500

 

查看注册到consul的服务,此刻因为我们没有启动任何的服务,所以会看到空的列表:

curl 192.168.1.2:8500/v1/catalog/services|jq .

 

7.下载consul-template

安装unzip

yuminstall unzip -y
wgethttps://releases.hashicorp.com/consul-template/0.7.0/consul-template_0.7.0_linux_amd64.zip
unzip consul-template_0.7.0_linux_amd64.zip -d /usr/local/bin/


8.
制作Dockfile并生成镜像

A,定义模板文件

vi/usr/local/service.ctmpl

upstreampython-service {
least_conn;
{{range service "python-micro-service"}}server ``.`Address`:``.`Port`max_fails=3 fail_timeout=60 weight=1;
`else`server 127.0.0.1:65535; # force a 502 `end`
}

server {
listen 80 default_server;
charset utf-8;

location / {
proxy_pass http://python-service;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

 

B.定义nginx启动脚本

vi start.sh

#!/bin/bash

service nginx start

consul-template -consul=192.168.1.2:8500-template="/templates/service.ctmpl:/etc/nginx/conf.d/service.conf:servicenginx reload"

 

C.定义Dockerfile

 

cp /usr/local/bin/consul-template .

vi Dockerfile

 

FROMnginx:latest

ENTRYPOINT ["/bin/start.sh"]
EXPOSE 80
VOLUME /templates
ENV 192.168.1.2:8500

ADDstart.sh /bin/start.sh
#RUN rm -v /etc/nginx/conf.d/*
ADD consul-template /usr/local/bin/
RUN chmod +x /usr/local/bin/consul-template && chmod +x /bin/start.sh

 

D.制作nginx镜像文件

docker build -t nginx_test_123 .

 

E.查看制作的镜像文件

Docker p_w_picpaths

从零开始部署基于阿里容器云的微服务(consul+registrator+template)(一)_第2张图片

 

看到我们刚刚创建的nginx镜像了

 

9.上传镜像

直接使用docker push会直接推送p_w_picpathdocker hub上,我们是要上传到我们的阿里云仓库的,步骤如下:

A.    在阿里云后台先定义镜像名称

从零开始部署基于阿里容器云的微服务(consul+registrator+template)(一)_第3张图片

B.    重新指定我们的镜像名字

Docker tag 3cde0ec0444snginx容器id

registry.cn-beijing.aliyuncs.com/test/nginx_test_123

 

C.    镜像上传

登陆阿里docker hub

docker login --username=aliyun账户  --password="hub密码"   registry.cn-beijing.aliyuncs.com

 

上传镜像
docker push registry.cn-beijing.aliyuncs.com/test/nginx _test_123

 

查看上传的镜像

从零开始部署基于阿里容器云的微服务(consul+registrator+template)(一)_第4张图片

 

10.使用镜像批量部署应用

阿里云-容器云-应用-创建应用-通过镜像创建应用-镜像名创建,假设我们部署到集群的三个节点则compose编排如下:

从零开始部署基于阿里容器云的微服务(consul+registrator+template)(一)_第5张图片


11
.再次查看consul注册服务注册信息可看到刚发布的nginx已经注册好了

 

 

今天先记录到这,下次我们进行java类的微服务部署,因为是直接启动的jar包所以不涉及到template文件的编写,registrator直接注册到consul就可以了