主机论坛_虚拟主机_美国主机_美国虚拟主机_云主机技术_全球主机交流聚集地—Web Hosting Talk 中文站

找回密码
立即注册
发新帖

0

收听

5

听众

1015

主题
发表于 2022-4-8 16:28:51 | 查看: 38| 回复: 0
本章知识点概括:Docker Compose容器编排
构建自动发现的Docker服务架构
实现容器服务自动加入Nginx集群
**Docker Compose容器编排功能**Docker compose的前身是Fig,它是一个定义及运行多个docker容器的工具使用Docker Compose不再需要使用shell脚本来启动容器Docker Compose非常适合组合是同多个容器进行开发的场景可以执行多个容器的操作**Docker Compose容器编排**YAML是一种标记语言很直观的数据序列化格式文件格式及编写注意事项不支持表符tab缩进,需要使用空格缩进通常开头缩进2个空格字符后缩进1个空格,如冒号,逗号,横杠用#号注释如果包含特殊字符用单引号引起来布尔值必须用引号括起来Docker Compose配置常用字段build dockerfile context 指定Dockerfile文件名构建镜像上下文路径image   指定镜像command  执行命令,覆盖默认命令container name  指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scaledeploy 指定部署和运行服务相关配置,只能在swarm模式使用environment  添加环境变量networks  加入网络ports  暴露容器端口,但端口不能低于60volumes  挂载宿主机或命令卷,像数据卷一样restart  重启策略hostname 容器主机名Docer Compose常用命令build  重新构建服务ps  列出容器up  创建和启动容器exec  在容器里面执行命令scale  指定一个服务容器启动数量top 显示容器进程logs 查看容器输出down  删除容器,网络,数据卷和镜像stop/start/restart 停止/启动/重启服务Compose 命令说明docker-compose选项--verbose 输出更多调试信息--version 打印版本并退出-f,--file 使用特定的compose模板文件,默认为docker-compose.yml-p,指定项目名称,默认使用目录名称ConsulConsul是HashCorp公司推出得到开源工具,用于实现分布式系统的服务与配置Consul的特性Consul支持健康检查,允许存储键值对一致性协议采用Raft算法,用来保证服务的高可用成员管理和消息广播采用GOSSIP协议,支持ACL访问控制列表,与docker无缝配合构建自动发现的Docker服务架构建立Consul服务每个提供服务的节点上都要部署Consul的agentConsul agent有两种运行模式ServerClientServer和Client只是Conusl集群层面的区分,与搭建在Cluster之上的应用服务无关consul群集架构,发现注册nginx中的docker容器,监控节点服务器的状态。
consul server服务器中的nginx做反向代理去轮询访问服务器池中的一个个容器。用户访问代理端口,就能访问到后面的多个容器,我们的端口做了两次映射。consul服务器上可以统一修改配置文件

-----------------------------------------------------docker-compose容器编排----------------------------------------------------------------
#宿主机的共享目录有nginx软件包,我们挂载到/opt/目录下mount.cifs //192.168.100.25/LNMP /opt/#创建容器编排目录mkdir /root/compose_ngin#创建nginx容器镜像cd compose_nginx/mkdir nginxcd nginx/cd /opt/cp nginx-1.12.0.tar.gz /root/compose_nginx/nginx/cd /root/compose_nginx/nginx/#加上nginx启动脚本vim run.sh #!/bin/bash/usr/local/nginx/sbin/nginx[root@localhost nginx]# vim DockerfileFROM centos:7MAINTAINER this is nginx <chen>RUN yum -y updateRUN yum -y install wget pcre-devel zlib-devel make zlib gcc gcc-c++ openssl-devel net-toolsRUN useradd -M -s /sbin/nologin nginxADD nginx-1.12.0.tar.gz /usr/local/srcWORKDIR /usr/local/srcWORKDIR nginx-1.12.0RUN ./configure \--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module && make && make installENV PATH /usr/local/nginx/sbinPATHEXPOSE 80EXPOSE 443RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.confWORKDIR /root/nginxADD run.sh /run.shRUN chmod 755 /run.shCMD ["/run.sh"]编写docker-compose编排安装nginx[root@localhost compose_nginx]# vim docker-compose.ymlversion: '3'services:  nginx:    hostname: nginx    build:      context: ./nginx      dockerfile: Dockerfile    ports:      - 1216:80      - 1217:443    networks:      - chen    volumes:      - ./wwwroot:/usr/local/nginx/htmlnetworks:  chen:[root@localhost compose_nginx]# mount.cifs //192.168.100.25/compose /mnt/Password for root@//192.168.100.25/compose:   [root@localhost compose_nginx]# cd /mnt/[root@localhost mnt]# lsconsul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip  docker-compose[root@localhost mnt]# cp -p docker-compose /usr/local/bin/[root@localhost mnt]# chmod +x /usr/local/bin/docker-compose #开启路由转发[root@localhost compose_nginx]# vim /etc/sysctl.confnet.ipv4.ip_forward=1[root@localhost compose_nginx]# sysctl -pnet.ipv4.ip_forward = 1利用编排工具开启nginx[root@localhost compose_nginx]# docker-compose -f docker-compose.yml up -d[root@localhost compose_nginx]# docker ps -aCONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                                         NAMES66d7cee5692d        compose_nginx_nginx   "/run.sh"           11 seconds ago      Up 9 seconds        0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1我们做了数据卷我们写个默认首页进去[root@localhost compose_nginx]# lsdocker-compose.yml  nginx  wwwroot[root@localhost compose_nginx]# cd wwwroot/[root@localhost wwwroot]# vim index.html<h2>this is chen web ! ! !</h2>
-------------------------------------------------------------------consul部署----------------------------------------------------------------------
自动发现注册多个docker容器节点,要想被consul管理,就要去注册,满足搜索条件agent就会提交注册请求,consul server自动发现去处理注册请求,监控容器的状态,template模板[root@localhost ~]# mkdir consul[root@localhost ~]# cd /mnt/[root@localhost mnt]# lsconsul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip  docker-compose[root@localhost mnt]# cp consul_0.9.2_linux_amd64.zip /root/consul/[root@localhost mnt]# cd /root/consul/[root@localhost consul]# lsconsul_0.9.2_linux_amd64.zip[root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip Archive:  consul_0.9.2_linux_amd64.zip  inflating: consul              [root@localhost consul]# mv consul /usr/bin/#使用conusl agent代理功能[root@localhost consul]# consul agent \#指定server功能#参与领袖#ui界面#参数指定位置#绑定本地地址#面对所有节点#本地节点名称混合输出到日志中,放在后台运行> -server \> -bootstrap \> -ui \> -data-dir=/var/lib/consul-data \> -bind=192.168.136.142 \> -client=0.0.0.0 \> -node=consul-server01 &> /var/log/consul.log &[1] 37957#查看群集信息[root@localhost consul]# consul membersNode             Address               Status  Type    Build  Protocol  DCconsul-server01  192.168.136.142:8301  alive   server  0.9.2  2         dc1#现在只有一台,它就是老大[root@localhost consul]# consul info | grep leader        leader = true        leader_addr = 192.168.136.142:8300第二台节点服务器(创建多个容器)容器服务自动加入nginx集群[root@localhost ~]# docker run -d \> --name=registrator \ #指定容器名称> --net=host \  #指定主机> -v /var/run/docker.sock:/tmp/docker.sock \ #指定数据卷宿主机目录,容器目录> --restart=always \ #重启> gliderlabs/registrator:latest \ #指定本地的镜像> -ip=192.168.136.167 \ #指定你本地的地址> consul://192.168.136.142:8500 #指定consul的地址#两个nginx服务容器[root@localhost ~]# docker run -itd -p:83:80 --name test-01 -h test01 nginxroot@localhost ~]# docker run -itd -p:84:80 --name test-02 -h test02 nginx#两个apache服务5容器[root@localhost ~]# docker run -itd -p:88:80 --name test-03 -h test02 httpd[root@localhost ~]# docker run -itd -p:89:80 --name test-04 -h test04 httpd#查看所有容器[root@localhost ~]# docker ps -aCONTAINER ID        IMAGE                           COMMAND                  CREATED              STATUS              PORTS                NAMES00a94fe6fd0c        httpd                           "httpd-foreground"       6 seconds ago        Up 5 seconds        0.0.0.0:89->80/tcp   test-04b47b89287e43        httpd                           "httpd-foreground"       38 seconds ago       Up 37 seconds       0.0.0.0:88->80/tcp   test-039b695e1d8660        nginx                           "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:84->80/tcp   test-023cbf17118dab        nginx                           "nginx -g 'daemon of…"   2 minutes ago        Up 2 minutes        0.0.0.0:83->80/tcp   test-01055caf398060        gliderlabs/registrator:latest   "/bin/registrator -i…"   3 minutes ago        Up 3 minutes                             registrator验证http和nginx服务是否注册到consul
consul服务器Consul-Templatee 是一个守护进程,用于实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成以后,可以选择运行shell命令执行更新操作,重新加载nginx,Consul-template可以查询Consul中的服务目录,key,key-values等这种强大的抽象功能和查询语言模板可以使Consul-template特别适合动态的创建配置文件[root@localhost ~]# cd /root/[root@localhost ~]# lsanaconda-ks.cfg  compose_nginx  initial-setup-ks.cfg  公共  文档  模板  音乐chen             consul         下载                  图片  桌面  视频[root@localhost ~]# cd consul/[root@localhost consul]# lsconsul_0.9.2_linux_amd64.zip[root@localhost consul]# #准备temlate nginx 模板文件[root@localhost consul]# vim nginx.ctmplupstream http_backend {  {{range service "nginx"}}   server {{.Address}}:{{.port}};   {{end}}}server {  listen 1216;  server_name localhost 192.168.136.167;  access_log /var/log/nginx/kgc.cn-access.log;  index index.html index.php;  location / {    proxy_set_header HOST $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header Client-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_pass http://http_backend;  }}#安装nginx[root@localhost nginx-1.12.0]# yum install gcc gcc-c++ pcre-devel zlib-devel -y[root@localhost nginx-1.12.0]# ./configure --prefix=/usr/local/nginx[root@localhost nginx-1.12.0]# make && make install[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf#nginx中有events,http,if,location,字段 19     include     vhost/*.conf;[root@localhost nginx-1.12.0]# cd /usr/local/nginx/conf/[root@localhost conf]# mkdir vhost[root@localhost consul]# cd /var/log/[root@localhost log]# mkdir /var/log/nginx[root@localhost log]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/[root@localhost log]# nginx[root@localhost log]# netstat -ntap | grep nginxtcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      107612/nginx: ma[root@localhost opt]# cd /mnt/[root@localhost mnt]# cp consul-template_0.19.3_linux_amd64.zip /root/[root@localhost mnt]# cd /root/[root@localhost ~]# unzip consul-template_0.19.3_linux_amd64.zip [root@localhost ~]# mv consul-template /usr/bin/#启用模板[root@localhost ~]# consul-template -consul-addr 192.168.136.142:8500 \> -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \> --log-level=info#coul服务器处于监控状态,我们再开一台终端同一台服务器的#验证

#增加一个nginx容器节点增加一个nginx容器节点,测试服务发现及配置更新功能//在registrator服务端注册dockers run -itd -p:85:80 --name test-05 -h test05 nginxdocker logs -f test-01docker logs -f test-02docker logs -f test-05
SD-WAN-MPLS组网http://www.kd010.com/

收藏回复 显示全部楼层 道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|WebHostingTalk中文站

GMT+8, 2024-5-17 16:39 , Processed in 0.067817 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表