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|grep docker
如果有先卸载
yum remove docker*
2.编辑docker.repo文件,写入如下内容
cat >> /etc/yum.repos.d/docker-main.repo << EOF name=Docker main Repository baseurl=https://yum.dockerproject.org/repo/main/centos/7 enabled=1 gpgcheck=1 gpgkey= EOF
3.安装docker
yum -y install docker-engine
4.关闭防火墙和selinux
systemctl stop firewalld.service
systemctl disable firewalld.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 -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375/g' /lib/systemd/system/docker.service
6.重启docker
systemctl enable docker.service
systemctl restart docker
ps -ef|grep docker
能看到docker启动及2375端口
7、安装pip及docker api
yum -y install epel-release
yum -y install python-pip
pip install docker-py docker-compose
二、配置consul cluster
1、创建 consul 用户及组
groupadd -g 1000 consul
useradd -u 100 -g 1000 -s /sbin/nologin consul
2、创建consul 数据存储文件夹
mkdir -p /opt/consul/{data,conf}
chown -R consul: /opt/consul
3、 拉取consul镜像
docker pull progrium/consul
提示:目录没有官方出consul镜像,以上consul镜像是星数最高的,也是consul官方推荐的第三方docker image
4、启动 consul server 192.168.1.66
docker run -d
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
-h consul-s1
--restart=always
--name=consul-s1
progrium/consul
-server -bootstrap-expect=1
-ui-dir=/ui
-client 0.0.0.0
-advertise 192.168.1.66
5、启动 consul server 192.168.1.65
docker run -d
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
-h consul-s2
--restart=always
--name=consul-s2
progrium/consul
-server
-ui-dir=/ui
-client 0.0.0.0
-advertise 192.168.1.65 -join 192.168.1.66
6、启动 consul server 192.168.1.45
docker run -d
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
-h consul-s3
--restart=always
--name=consul-s3
progrium/consul
-server
-ui-dir=/ui
-client 0.0.0.0
-advertise 192.168.1.45 -join 192.168.1.66
7、启动 consul Client 192.168.1.23
docker run -d -h consul-c1
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
--restart=always
--name=consul-c1
progrium/consul -advertise 192.168.1.23 -join 192.168.1.66
8、启动 consul Client 192.168.1.70
docker run -d -h consul-c2
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
--restart=always
--name=consul-c2
progrium/consul -advertise 192.168.1.70 -join 192.168.1.66
9、启动 consul Client 192.168.1.71
docker run -d -h consul-c3
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
--restart=always
--name=consul-c3
progrium/consul -advertise 192.168.1.71 -join 192.168.1.66
10、关闭consul-s1并删除容器
docker rm -rf consul-s1
重新启动一个新容器
docker run -d
-p 8300:8300
-p 8301:8301
-p 8301:8301/udp
-p 8302:8302
-p 8302:8302/udp
-p 8400:8400
-p 8500:8500
-p 8600:53
-p 8600:53/udp
-v /opt/consul/data:/data
-h consul-s2
--restart=always
--name=consul-s2
progrium/consul
-server
-ui-dir=/ui
-client 0.0.0.0
-advertise 192.168.1.66 -join 192.168.1.65
进入容器运行 consul info 查询是否实现自动选举Leader
三、 registrator状态获取
依次启动
docker run
-d
--restart=always
--name=registrator
--net=host
-v /var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator
-ip 192.168.1.66
consul://192.168.1.66:8500
docker run
-d
--restart=always
--name=registrator
--net=host
-v /var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator
-ip 192.168.1.65
consul://192.168.1.65:8500
docker run
-d
--restart=always
--name=registrator
--net=host
-v /var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator
-ip 192.168.1.45
consul://192.168.1.45:8500
docker run
-d
--restart=always
--name=registrator
--net=host
-v /var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator
-ip 192.168.1.23
consul://192.168.1.23:8500
docker run
-d
--restart=always
--name=registrator
--net=host
-v /var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator
-ip 192.168.1.70
consul://192.168.1.70:8500
docker run
-d
--restart=always
--name=registrator
--net=host
-v /var/run/docker.sock:/tmp/docker.sock
gliderlabs/registrator
-ip 192.168.1.71
consul://192.168.1.71:8500
四、安装 Shipyard+Swarm
1、 192.168.1.23
docker run -tid
-p 3375:3375
--restart=always
--name shipyard-swarm-manager
swarm:latest
manage --host tcp://0.0.0.0:3375 consul://192.168.1.66:8500
docker run -tid
--restart=always
--name=shipyard-rethinkdb
-p 28015:28015
-p 29015:29015
-v /data/rethinkdb:/data
index.tenxcloud.com/docker_library/rethinkdb
docker run -tid
--restart=always
--name shipyard-controller
--link shipyard-rethinkdb:rethinkdb
--link shipyard-swarm-manager:swarm
-p 8080:8080
dockerclub/shipyard:latest
server
-d tcp://swarm:3375 # 中文镜像
docker run -tid
--restart=always
--name shipyard-swarm-agent
swarm:latest
join --addr 192.168.1.23:2375 consul://192.168.1.66:8500
2、安装swarm-agent (192.168.1.66,192.168.1.65,192.168.1.45)
docker run -tid
--restart=always
--name shipyard-swarm-agent
swarm:latest
join --addr 192.168.1.66:2375 consul://192.168.1.66:8500
docker run -tid
--restart=always
--name shipyard-swarm-agent
swarm:latest
join --addr 192.168.1.65:2375 consul://192.168.1.66:8500
docker run -tid
--restart=always
--name shipyard-swarm-agent
swarm:latest
join --addr 192.168.1.45:2375 consul://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 -y install git patch gcc gcc-c++ readline-devel zlib-devel libffi-devel
openssl openssl-devel make autoconf automake libtool bison libxml2
libxml2-devel libxslt-devel libyaml-devel python python-docutils
cmake imake expat-devel libaio libaio-devel bzr ncurses-devel wget
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel
pcre-devel curl-devel libmcrypt libmcrypt-devel
cd /tmp
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.0.tar.gz
tar -xvf /tmp/haproxy-1.7.0.tar.gz
make TARGET=linux31 PREFIX=/opt/haproxy
make install PREFIX=/opt/haproxy
2、配置/opt/haproxy/conf/haproxy.conf
global
log 127.0.0.1 local0
#log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 50000
chroot /opt/haproxy
uid 99
gid 99
daemon
nbproc 2
pidfile /opt/haproxy/run/haproxy.pid
#debug
#quiet
defaults
mode tcp
option dontlognull
option forwardfor
option redispatch
retries 2
balance static-rr
stats enable
stats uri /ha?stats #haproxy运行状态查看 自定义uri
timeout connect 3000
timeout client 50000
timeout server 50000
listen admin_stat
# 监听端口
bind *:8888
# http的7层模式
mode http
#log global
# 统计页面自动刷新时间
stats refresh 30s
# 统计页面URL
stats uri /admin?stats
# 统计页面密码框上提示文本
stats realm Haproxy Statistics
# 统计页面用户名和密码设置
stats auth admin:admin
# 隐藏统计页面上HAProxy的版本信息
#stats hide-version
listen login
bind *:9999
mode tcp
balance roundrobin
option httpchk
#maxconn 50000
#log 127.0.0.1 local0 debug
3、haproxy 启动脚本 /etc/init.d/haproxy
#! /bin/bash
# chkconfig: - 85 15
# description: haproxy is a World Wide Web server. It is used to serve
PROGDIR=/opt/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.conf
PIDFILE=$PROGDIR/run/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/opt/haproxy/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -f $CONFIG
echo "."
}
stop()
{ echo -n "Stopping $DESC: $PROGNAME"
cat $PIDFILE | xargs kill
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
exit 1
;;
esac
exit 0
4、启动 haproxy 并加入开机启动
chmod +x haproxy
chkconfig haproxy on
service haproxy start
5、安装nginx 并支支持数字证书
https://www.openssl.org/source/openssl-1.1.0c.tar.gz
http://nginx.org/download/nginx-1.11.7.tar.gz
yum -y install git patch gcc gcc-c++ readline-devel zlib-devel libffi-devel
openssl openssl-devel make autoconf automake libtool bison libxml2
libxml2-devel libxslt-devel libyaml-devel python python-docutils
cmake imake expat-devel libaio libaio-devel bzr ncurses-devel wget
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel
pcre-devel curl-devel libmcrypt libmcrypt-devel
下载安装openssl
cd /tmp
wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
tar -xvf openssl-1.1.0c.tar.gz
cd /tmp/openssl-1.1.0c
./config --openssldir=/usr/local/ssl
make && make install
./config shared --openssldir=/usr/local/ssl
make clean
make && make install
下载安装 nginx
cd /tmp
wget http://nginx.org/download/nginx-1.11.7.tar.gz
groupadd -r nginx
useradd -g nginx -r nginx
tar -xvf nginx-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 && make install
6、nginx 配置文件
修改/etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$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.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$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.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
include /etc/nginx/conf.d/*.conf;
}/*.conf;
}
创建 /etc/nginx/conf.d 文件夹
mkdir -p /etc/nginx/conf.d
添加nginx默认web配置文件
/etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/local/nginx/html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
root /usr/local/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* ^.+.(jpg|jpeg|gif|png|bmp)$ {
access_log off;
root opencart;
expires 30d;
break;
}
}
7、创建nginx 启动脚本 /etc/init.d/nginx
# chkconfig: 2345 10 90
# description: Start and Stop redis
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 "$PIDFILE exists, process is already running or crashed."
else
echo "Starting nginx server..."
$EXEC &
fi
if [ "$?"="0" ]
then
echo "nginx is running..."
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE exists, process is not running."
else
PID=$(cat $PIDFILE)
echo "Stopping..."
kill -9 $PID
PID=$(pidof nginx)
kill -9 $PID
rm -rf /var/run/nginx.pid
sleep 2
while [ -x $PIDFILE ]
do
echo "Waiting for nginx to shutdown..."
sleep 1
done
echo "nginx stopped"
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/nginx {start|stop|restart|force-reload}" >&2
exit 1
esac
8、设置nginx开机启动并启动nginx
chmod +x nginx
chkconfig nginx on
service nginx start
六、安装consul-template 实现服务器自动发现
1、下载consul-template
https://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip
cd /tmp
wget https://releases.hashicorp.com/consul-template/0.16.0/consul-template_0.16.0_linux_amd64.zip
yum -y install unzip
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/haproxy reload"
}
EOF
3、 /opt/haproxy/conf/haproxy.ctmpl 配置
global
log 127.0.0.1 local0
#log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 50000
chroot /opt/haproxy
uid 99
gid 99
daemon
nbproc 2
pidfile /opt/haproxy/run/haproxy.pid
#debug
#quiet
defaults
mode tcp
option dontlognull
option forwardfor
option redispatch
retries 2
balance static-rr
stats enable
stats uri /ha?stats
timeout connect 3000
timeout client 50000
timeout server 50000
listen admin_stat
bind *:8888
mode http
#log global
stats refresh 30s
stats uri /admin?stats
stats realm Haproxy Statistics
stats auth admin:admin
#stats hide-version
frontend www
bind *:80
mode http
acl apache hdr(HOST) apache.zone.com
acl nginx hdr(HOST) nginx.zone.com
use_backend apache.qkazone.com if apache
use_backend nginx.qkazone.com if nginx
backend apache.zone.com
balance roundrobin
mode http
{{range service "apache-php-80"}}
server apache {{.Address}}:{{.Port}} check {{end}}
backend nginx.zone.com
mode http
balance roundrobin
{{range service "nginx-80"}}
server nginx {{.Address}}:{{.Port}} check {{end}}
listen login
bind *:9999
mode tcp
balance roundrobin
#log 127.0.0.1 local0 debug
{{range service "centos7"}}
server ssh {{.Address}}:{{.Port}} check {{end}}
4、配置consul-template haproxy 启动脚本 /etc/init.d/haproxy_ctmpl
#!/bin/bash
# chkconfig: 2345 10 90
# description: Start and Stop redis
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 -v grep | grep "$EXEC -config $CONF" | awk '{print $2}')
if [ -n "$PID" ]
then
echo "haproxy_ctmpl is running..."
else
echo "Starting haproxy_ctmpl server..."
$EXEC -config $CONF > /tmp/haproxy_ctmpl.out 2>&1 &
fi
;;
stop)
PID=$(ps -ef | grep -v grep | grep "$EXEC -config $CONF" | awk '{print $2}')
if [ -n "$PID" ]
then
echo "Stopping..."
kill -9 $PID
sleep 2
else
echo "haproxy_ctmpl exists, process is not running."
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/tmpl {start|stop|restart|force-reload}" >&2
exit 1
esac
5、设置开机启动,启动
chmod +x haproxy_ctmpl
chkconfig haproxy_ctmpl on
service haproxy_ctmpl start
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 -s reload"
}
EOF
7、/etc/nginx/conf.d/nginx_web.ctmpl 配置
upstream apache {
ip_hash;
# Refer: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
# least_conn;
# least_time;
{{range service "apache-php-80"}}
server {{.Address}}:{{.Port}} fail_timeout=0;
{{end}}
keepalive 64;
}
server {
listen 80;
server_name apache.zone.com;
location / {
client_max_body_size 0;
proxy_connect_timeout 300s;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_pass http://apache/;
}
}
upstream nginx {
ip_hash;
# Refer: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
# least_conn;
# least_time;
{{range service "nginx-80"}}
server {{.Address}}:{{.Port}} fail_timeout=0;
{{end}}
keepalive 64;
}
server {
listen 80;
server_name nginx.zone.com;
location / {
client_max_body_size 0;
proxy_connect_timeout 300s;
proxy_send_timeout 900;
proxy_read_timeout 900;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_pass http://nginx/;
}
}
8、配置consul-template nginx启动脚本 /etc/init.d/nginx_ctmpl
#!/bin/bash
# chkconfig: 2345 10 90
# description: Start and Stop redis
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 -v grep | grep "$EXEC -config $CONF" | awk '{print $2}')
if [ -n "$PID" ]
then
echo "haproxy_ctmpl is running..."
else
echo "Starting haproxy_ctmpl server..."
$EXEC -config $CONF > /tmp/nginx_ctmpl.out 2>&1 &
fi
;;
stop)
PID=$(ps -ef | grep -v grep | grep "$EXEC -config $CONF" | awk '{print $2}')
if [ -n "$PID" ]
then
echo "Stopping..."
kill -9 $PID
sleep 2
else
echo "haproxy_ctmpl exists, process is not running."
fi
;;
restart|force-reload)
${0} stop
${0} start
;;
*)
echo "Usage: /etc/init.d/tmpl {start|stop|restart|force-reload}" >&2
exit 1
esac
9、设置开机启动
chmod +x nginx_ctmpl
chkconfig nginx_ctmpl on
service nginx_ctmpl start
七、测试是否自动发现
docker run -ti -d -p :80 eboraas/apache-php
docker run -d -ti -p :80 nginx
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 端口
使用其它机器端口如果其它机器挂了这台宿主机的应用不可被发现