docker swarm 集群及可视化界面的安装及配置
本文是swarm docker集群的实施文档 环境: centos 7 192.168.1.23 swarm-manager rethinkdb controller swarm-agent consul-c1 registrator 192.168.1.45 registrator swarm-agent consul-s3 192.168.1.65 registrator swarm-agent consul-s2 192.168.1.66 registrator swarm-agent consul-s2 192.168.1.70 registrator consul-c2 consul-template (nginx、haproxy) 192.168.1.71 registrator consul-c2 consul-template (nginx、haproxy) docker-engine 1.12.4 一、安装docker-engine 1.12.4 1、先检查是否安装旧版本docker rpm-qa|grepdocker 如果有先卸载 yumremovedocker* 2.编辑docker.repo文件,写入如下内容 cat>>/etc/yum.repos.d/docker-main.repo<<EOF name=DockermainRepository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey= EOF 3.安装docker yum-yinstalldocker-engine 4.关闭防火墙和selinux systemctlstopfirewalld.service systemctldisablefirewalld.service 关闭selinux sed-i's/SELINUX=.*/SELINUX=disabled/g'/etc/selinux/config 重启 5.增加tcp监听端口 修改/lib/systemd/system/docker.service sed-i's/ExecStart=.*/ExecStart=\/usr\/bin\/dockerd-Hunix\:\/\/\/var\/run\/docker.sock-D-Htcp\:\/\/0.0.0.0\:2375/g'/lib/systemd/system/docker.service 6.重启docker systemctlenabledocker.service systemctlrestartdocker ps-ef|grepdocker 能看到docker启动及2375端口 7、安装pip及docker api yum-yinstallepel-release yum-yinstallpython-pip pipinstalldocker-pydocker-compose 二、配置consul cluster 1、创建consul 用户及组 groupadd-g1000consul useradd-u100-g1000-s/sbin/nologinconsul 2、创建consul 数据存储文件夹 mkdir-p/opt/consul/{data,conf} chown-Rconsul:/opt/consul 3、拉取consul镜像 dockerpullprogrium/consul 提示:目录没有官方出consul镜像,以上consul镜像是星数最高的,也是consul官方推荐的第三方dockerp_w_picpath 4、启动consul server 192.168.1.66 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s1\ --restart=always\ --name=consul-s1\ progrium/consul\ -server-bootstrap-expect=1\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.66 5、启动consul server 192.168.1.65 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s2\ --restart=always\ --name=consul-s2\ progrium/consul\ -server\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.65-join192.168.1.66 6、启动consul server 192.168.1.45 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s3\ --restart=always\ --name=consul-s3\ progrium/consul\ -server\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.45-join192.168.1.66 7、启动consul Client192.168.1.23 dockerrun-d-hconsul-c1\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ --restart=always\ --name=consul-c1\ progrium/consul-advertise192.168.1.23-join192.168.1.66 8、启动consulClient192.168.1.70 dockerrun-d-hconsul-c2\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ --restart=always\ --name=consul-c2\ progrium/consul-advertise192.168.1.70-join192.168.1.66 9、启动consulClient192.168.1.71 dockerrun-d-hconsul-c3\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ --restart=always\ --name=consul-c3\ progrium/consul-advertise192.168.1.71-join192.168.1.66 10、关闭consul-s1并删除容器 dockerrm-fconsul-s1 重新启动一个新容器 dockerrun-d\ -p8300:8300\ -p8301:8301\ -p8301:8301/udp\ -p8302:8302\ -p8302:8302/udp\ -p8400:8400\ -p8500:8500\ -p8600:53\ -p8600:53/udp\ -v/opt/consul/data:/data\ -hconsul-s2\ --restart=always\ --name=consul-s2\ progrium/consul\ -server\ -ui-dir=/ui\ -client0.0.0.0\ -advertise192.168.1.66-join192.168.1.65 进入容器运行consulinfo查询是否实现自动选举Leader 三、registrator状态获取 依次启动 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.66\ consul://192.168.1.66:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.65\ consul://192.168.1.65:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.45\ consul://192.168.1.45:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.23\ consul://192.168.1.23:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.70\ consul://192.168.1.70:8500 dockerrun\ -d\ --restart=always\ --name=registrator\ --net=host\ -v/var/run/docker.sock:/tmp/docker.sock\ gliderlabs/registrator\ -ip192.168.1.71\ consul://192.168.1.71:8500 四、安装Shipyard+Swarm 1、 192.168.1.23 dockerrun-tid\ -p3375:3375\ --restart=always\ --nameshipyard-swarm-manager\ swarm:latest\ manage--hosttcp://0.0.0.0:3375consul://192.168.1.66:8500 dockerrun-tid\ --restart=always\ --name=shipyard-rethinkdb\ -p28015:28015\ -p29015:29015\ -v/data/rethinkdb:/data\ index.tenxcloud.com/docker_library/rethinkdb dockerrun-tid\ --restart=always\ --nameshipyard-controller\ --linkshipyard-rethinkdb:rethinkdb\ --linkshipyard-swarm-manager:swarm\ -p8080:8080\ dockerclub/shipyard:latest\ server\ -dtcp://swarm:3375#中文镜像 dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.23:2375consul://192.168.1.66:8500 2、安装swarm-agent (192.168.1.66,192.168.1.65,192.168.1.45) dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.66:2375consul://192.168.1.66:8500 dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.65:2375consul://192.168.1.66:8500 dockerrun-tid\ --restart=always\ --nameshipyard-swarm-agent\ swarm:latest\ join--addr192.168.1.45:2375consul://192.168.1.66:8500 五、安装haproxy or nginx (192.168.1.70,192.168.1.71) 1、安装haproxy http://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz yum-yinstallgitpatchgccgcc-c++readline-develzlib-devellibffi-devel\ opensslopenssl-develmakeautoconfautomakelibtoolbisonlibxml2\ libxml2-devellibxslt-devellibyaml-develpythonpython-docutils\ cmakeimakeexpat-devellibaiolibaio-develbzrncurses-develwget\ libjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devel\ pcre-develcurl-devellibmcryptlibmcrypt-devel cd/tmp wgethttp://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz tar-xvf/tmp/haproxy-1.7.0.tar.gz makeTARGET=linux31PREFIX=/opt/haproxy makeinstallPREFIX=/opt/haproxy 2、配置/opt/haproxy/conf/haproxy.conf global log127.0.0.1local0 #log127.0.0.1local1notice #logloghostlocal0info maxconn50000 chroot/opt/haproxy uid99 gid99 daemon nbproc2 pidfile/opt/haproxy/run/haproxy.pid #debug #quiet defaults modetcp optiondontlognull optionforwardfor optionredispatch retries2 balancestatic-rr statsenable statsuri/ha?stats#haproxy运行状态查看自定义uri timeoutconnect3000 timeoutclient50000 timeoutserver50000 listenadmin_stat #监听端口 bind*:8888 #http的7层模式 modehttp #logglobal #统计页面自动刷新时间 statsrefresh30s #统计页面URL statsuri/admin?stats #统计页面密码框上提示文本 statsrealmHaproxy\Statistics #统计页面用户名和密码设置 statsauthadmin:admin #隐藏统计页面上HAProxy的版本信息 #statshide-version listenlogin bind*:9999 modetcp balanceroundrobin optionhttpchk #maxconn50000 #log127.0.0.1local0debug 3、haproxy 启动脚本/etc/init.d/haproxy #!/bin/bash #chkconfig:-8515 #description:haproxyisaWorldWideWebserver.Itisusedtoserve PROGDIR=/opt/haproxy PROGNAME=haproxy DAEMON=$PROGDIR/sbin/$PROGNAME CONFIG=$PROGDIR/conf/$PROGNAME.conf PIDFILE=$PROGDIR/run/$PROGNAME.pid DESC="HAProxydaemon" SCRIPTNAME=/opt/haproxy/init.d/$PROGNAME #Gracefullyexitifthepackagehasbeenremoved. test-x$DAEMON||exit0 start() { echo-n"Starting$DESC:$PROGNAME" $DAEMON-f$CONFIG echo"." } stop() {echo-n"Stopping$DESC:$PROGNAME" cat$PIDFILE|xargskill echo"." } reload() {echo-n"reloading$DESC:$PROGNAME" $DAEMON-f$CONFIG-p$PIDFILE-sf$(cat$PIDFILE) } case"$1"in start) start ;; stop) stop ;; reload) reload ;; *) echo"Usage:$SCRIPTNAME{start|stop|reload}">&2 exit1 ;; esac exit0 4、启动 haproxy 并加入开机启动 chmod+xhaproxy chkconfighaproxyon servicehaproxystart 5、安装nginx 并支支持数字证书 https://www.openssl.org/source/openssl-1.1.0c.tar.gz http://nginx.org/download/nginx-1.11.7.tar.gz yum-yinstallgitpatchgccgcc-c++readline-develzlib-devellibffi-devel\ opensslopenssl-develmakeautoconfautomakelibtoolbisonlibxml2\ libxml2-devellibxslt-devellibyaml-develpythonpython-docutils\ cmakeimakeexpat-devellibaiolibaio-develbzrncurses-develwget\ libjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devel\ pcre-develcurl-devellibmcryptlibmcrypt-devel 下载安装openssl cd/tmp wgethttps://www.openssl.org/source/openssl-1.1.0c.tar.gz tar-xvfopenssl-1.1.0c.tar.gz cd/tmp/openssl-1.1.0c ./config--openssldir=/usr/local/ssl make&&makeinstall ./configshared--openssldir=/usr/local/ssl makeclean make&&makeinstall 下载安装nginx cd/tmp wgethttp://nginx.org/download/nginx-1.11.7.tar.gz groupadd-rnginx useradd-gnginx-rnginx tar-xvfnginx-1.11.7.tar.gz cd/tmp/nginx-1.11.7 ./configure--prefix=/usr/local/nginx\ --sbin-path=/usr/sbin/nginx\ --conf-path=/etc/nginx/nginx.conf\ --error-log-path=/var/log/nginx/error.log\ --http-log-path=/var/log/nginx/access.log\ --pid-path=/var/run/nginx.pid\ --lock-path=/var/run/nginx.lock\ --http-client-body-temp-path=/var/cache/nginx/client_temp\ --http-proxy-temp-path=/var/cache/nginx/proxy_temp\ --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp\ --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp\ --http-scgi-temp-path=/var/cache/nginx/scgi_temp\ --user=nginx\ --group=nginx\ --with-http_ssl_module\ --with-http_realip_module\ --with-http_addition_module\ --with-http_sub_module\ --with-http_dav_module\ --with-http_flv_module\ --with-http_mp4_module\ --with-http_gunzip_module\ --with-http_gzip_static_module\ --with-http_random_index_module\ --with-http_secure_link_module\ --with-http_stub_status_module\ --with-http_auth_request_module\ --with-threads\ --with-stream\ --with-openssl=/tmp/openssl-1.1.0c\#openssl源码路径 --with-stream_ssl_module\ --with-http_slice_module\ --with-mail\ --with-mail_ssl_module\ --with-file-aio\ --with-http_v2_module\ --with-ipv6 mkdir-pv/var/cache/nginx/{client_temp,proxy_temp,fastcgi_temp,uwsgi_temp,scgi_temp} make&&makeinstall 6、nginx 配置文件 修改/etc/nginx/nginx.conf usernginx; worker_processes1; error_log/var/log/nginx/error.logwarn; pid/var/run/nginx.pid; events{ worker_connections1024; } http{ include/etc/nginx/mime.types; default_typeapplication/octet-stream; log_formatmain'$remote_addr-$remote_user[$time_local]"$request"' '$status$body_bytes_sent"$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log/var/log/nginx/access.logmain; sendfileon; tcp_nopushon; keepalive_timeout65; gzipon; include/etc/nginx/conf.d/*.conf; } 创建/etc/nginx/conf.d文件夹 mkdir-p/etc/nginx/conf.d 添加nginx默认web配置文件 /etc/nginx/conf.d/default.conf server{ listen80; server_namelocalhost; #charsetkoi8-r; #access_loglogs/host.access.logmain; location/{ root/usr/local/nginx/html; indexindex.phpindex.htmlindex.htm; } #error_page404/404.html; #redirectservererrorpagestothestaticpage/50x.html # error_page500502503504/50x.html; location=/50x.html{ roothtml; } #proxythePHPscriptstoApachelisteningon127.0.0.1:80 # #location~\.php${ #proxy_passhttp://127.0.0.1; #} #passthePHPscriptstoFastCGIserverlisteningon127.0.0.1:9000 # location~\.php${ root/usr/local/nginx/html; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; includefastcgi_params; } location~*^.+\.(jpg|jpeg|gif|png|bmp)${ access_logoff; rootopencart; expires30d; break; } } 7、创建nginx 启动脚本/etc/init.d/nginx #chkconfig:23451090 #description:StartandStopredis PATH=/usr/local/bin:/sbin:/usr/bin:/bin EXEC=/usr/sbin/nginx PIDFILE=/var/run/nginx.pid CONF="/etc/nginx/nginx.conf" AUTH="1234" case"$1"in start) if[-f$PIDFILE] then echo"$PIDFILEexists,processisalreadyrunningorcrashed." else echo"Startingnginxserver..." $EXEC& fi if["$?"="0"] then echo"nginxisrunning..." fi ;; stop) if[!-f$PIDFILE] then echo"$PIDFILEexists,processisnotrunning." else PID=$(cat$PIDFILE) echo"Stopping..." kill-9$PID PID=$(pidofnginx) kill-9$PID rm-rf/var/run/nginx.pid sleep2 while[-x$PIDFILE] do echo"Waitingfornginxtoshutdown..." sleep1 done echo"nginxstopped" fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/nginx{start|stop|restart|force-reload}">&2 exit1 esac 8、设置nginx开机启动并启动nginx chmod+xnginx chkconfignginxon servicenginxstart 六、安装consul-template 实现服务器自动发现 1、下载consul-template https://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip cd/tmp wgethttps://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip yum-yinstallunzip unzip/tmp/consul-template_0.16.0_linux_amd64.zip-d/usr/bin/ 2、consul-template haproxy配置 cat>/opt/consul/conf/haproxy_ctmpl.json<<EOF consul="127.0.0.1:8500" template{ source="/opt/haproxy/conf/haproxy.ctmpl" destination="/opt/haproxy/conf/haproxy.conf" command="/etc/init.d/haproxyreload" } EOF 3、/opt/haproxy/conf/haproxy.ctmpl 配置 global log127.0.0.1local0 #log127.0.0.1local1notice #logloghostlocal0info maxconn50000 chroot/opt/haproxy uid99 gid99 daemon nbproc2 pidfile/opt/haproxy/run/haproxy.pid #debug #quiet defaults modetcp optiondontlognull optionforwardfor optionredispatch retries2 balancestatic-rr statsenable statsuri/ha?stats timeoutconnect3000 timeoutclient50000 timeoutserver50000 listenadmin_stat bind*:8888 modehttp #logglobal statsrefresh30s statsuri/admin?stats statsrealmHaproxy\Statistics statsauthadmin:admin #statshide-version frontendwww bind*:80 modehttp aclapachehdr(HOST)apache.zone.com aclnginxhdr(HOST)nginx.zone.com use_backendapache.qkazone.comifapache use_backendnginx.qkazone.comifnginx backendapache.zone.com balanceroundrobin modehttp {{rangeservice"apache-php-80"}} serverapache``.`Address`:``.`Port`check`end` backendnginx.zone.com modehttp balanceroundrobin {{rangeservice"nginx-80"}} servernginx``.`Address`:``.`Port`check`end` listenlogin bind*:9999 modetcp balanceroundrobin #log127.0.0.1local0debug {{rangeservice"centos7"}} serverssh``.`Address`:``.`Port`check`end` 4、配置consul-template haproxy 启动脚本/etc/init.d/haproxy_ctmpl #!/bin/bash #chkconfig:23451090 #description:StartandStopredis PATH=/usr/local/bin:/sbin:/usr/bin:/bin EXEC=/usr/bin/consul-template CONF="/opt/consul/conf/haproxy_ctmpl.json" case"$1"in start) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"haproxy_ctmplisrunning..." else echo"Startinghaproxy_ctmplserver..." $EXEC-config$CONF>/tmp/haproxy_ctmpl.out2>&1& fi ;; stop) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"Stopping..." kill-9$PID sleep2 else echo"haproxy_ctmplexists,processisnotrunning." fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/tmpl{start|stop|restart|force-reload}">&2 exit1 esac 5、设置开机启动,启动 chmod+xhaproxy_ctmpl chkconfighaproxy_ctmplon servicehaproxy_ctmplstart 6、consul-template nginx配置/opt/consul/conf/nginx_ctmpl.json cat>/opt/consul/conf/nginx_ctmpl.json<<EOF consul="127.0.0.1:8500" template{ source="/etc/nginx/conf.d/nginx_web.ctmpl" destination="/etc/nginx/conf.d/nginx_web.conf" command="/usr/sbin/nginx-sreload" } EOF 7、/etc/nginx/conf.d/nginx_web.ctmpl配置 upstreamapache{ ip_hash; #Refer:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream #least_conn; #least_time; {{rangeservice"apache-php-80"}} server``.`Address`:``.`Port`fail_timeout=0; `end` keepalive64; } server{ listen80; server_nameapache.zone.com; location/{ client_max_body_size0; proxy_connect_timeout300s; proxy_send_timeout900; proxy_read_timeout900; proxy_buffer_size32k; proxy_buffers432k; proxy_busy_buffers_size64k; proxy_redirectoff; proxy_hide_headerVary; proxy_set_headerAccept-Encoding''; proxy_set_headerHost$host; proxy_set_headerReferer$http_referer; proxy_set_headerCookie$http_cookie; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$host; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_headers_hash_max_size51200; proxy_headers_hash_bucket_size6400; proxy_passhttp://apache/; } } upstreamnginx{ ip_hash; #Refer:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream #least_conn; #least_time; {{rangeservice"nginx-80"}} server``.`Address`:``.`Port`fail_timeout=0; `end` keepalive64; } server{ listen80; server_namenginx.zone.com; location/{ client_max_body_size0; proxy_connect_timeout300s; proxy_send_timeout900; proxy_read_timeout900; proxy_buffer_size32k; proxy_buffers432k; proxy_busy_buffers_size64k; proxy_redirectoff; proxy_hide_headerVary; proxy_set_headerAccept-Encoding''; proxy_set_headerHost$host; proxy_set_headerReferer$http_referer; proxy_set_headerCookie$http_cookie; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_set_headerHost$host; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; proxy_headers_hash_max_size51200; proxy_headers_hash_bucket_size6400; proxy_passhttp://nginx/; } } 8、配置consul-template nginx启动脚本/etc/init.d/nginx_ctmpl #!/bin/bash #chkconfig:23451090 #description:StartandStopredis PATH=/usr/local/bin:/sbin:/usr/bin:/bin EXEC=/usr/bin/consul-template CONF="/opt/consul/conf/nginx_ctmpl.json" case"$1"in start) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"haproxy_ctmplisrunning..." else echo"Startinghaproxy_ctmplserver..." $EXEC-config$CONF>/tmp/nginx_ctmpl.out2>&1& fi ;; stop) PID=$(ps-ef|grep-vgrep|grep"$EXEC-config$CONF"|awk'{print$2}') if[-n"$PID"] then echo"Stopping..." kill-9$PID sleep2 else echo"haproxy_ctmplexists,processisnotrunning." fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/tmpl{start|stop|restart|force-reload}">&2 exit1 esac 9、设置开机启动 chmod+xnginx_ctmpl chkconfignginx_ctmplon servicenginx_ctmplstart 七、测试是否自动发现 dockerrun-ti-d-p:80eboraas/apache-php dockerrun-d-ti-p:80nginx 1、打开http://192.168.1.66:8500/ui/#/dc1/services 2、http://192.168.1.23:8080/#/containers 查看shipyard 管理平台 账号admin密码shipyard 3、haproxy http://192.168.1.70:8888/admin?stats http://192.168.1.71:8888/admin?stats 账号:admin 密码admin 最后:注意事项:consul registrator 是基于端口发现的不映射端口是发现不了的 consul 服务挂了整个宿主机运行应用将不可见。registrator 是基于镜像名加端口服务 镜像名称为nginx 多端口暴露 对外发现的服务名称nginx-80 单个端口暴露就是镜像名称为服务名 像集群添加宿主机 consul registrator swarm-agent registrator 链接consul 端口请使用宿主机的consul 端口 使用其它机器端口如果其它机器挂了这台宿主机的应用不可被发现