1、tomcat部署 html
1)安裝tomcat服務器(版本是V9.0)nginx
docker search tomcatc++
docker pull tomcatweb
docker images|grep tomcatdocker
mkdir -p ~/tomcat ~/tomcat/test (~/tomcat/webapps ~/tomcat/logs ~/tomcat/conf)tomcat
docker run --name tomcat9 -p 8081:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat:latestbash
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99489935e345 tomcat:latest "catalina.sh run" 26 hours ago Up 9 seconds 0.0.0.0:8081->8080/tcp tomcat9服務器
啓動後便可訪問 192.168.22.152:8081app
2)項目部署。寫一個test1.war,把war包放test目錄curl
[root@localhost ~]# docker exec -it 99489935e345 /bin/bash
root@99489935e345:/usr/local/tomcat# cd webapps/test
root@99489935e345:/usr/local/tomcat/webapps/test# mv test1.war /usr/local/tomcat/webapps
root@99489935e345:/usr/local/tomcat/webapps/test# exit
重啓容器,部署完成,直接訪問應用
[root@localhost ~]# docker restart 99489935e345
3)部署多個服務容器
在上面的基礎上,mkdir -p ~/tomcat/data
[root@localhost ~] cd tomcat
[root@localhost tomcat]# docker run --name tomcat9.0 -p 8082:8080 -v $PWD/data:/usr/local/tomcat/webapps/test -d tomcat:latest
26641576d375ac77fb53a7178d2b3b5234362ad84e3cf7332af32d990829814c
寫一個test1.war,把war包放test目錄
[root@localhost tomcat]# docker exec -it ede8fecfc165 /bin/bash
root@ede8fecfc165:/usr/local/tomcat# cd webapps/test
root@ede8fecfc165:/usr/local/tomcat/webapps/test# mv test1.war /usr/local/tomcat/webapps
[root@localhost ~]# docker restart ede8fecfc165
4)可在192.168.22.151機器作上述一樣操做。
2、安裝nginx(V1.15.3)
參考:https://blog.csdn.net/wangfei0904306/article/details/77623400
說明:nginx日誌目錄 :/var/log/nginx,部署目錄:/usr/share/nginx/html,配置文件:/etc/nginx/nginx.conf,conf.d是一個目錄:/etc/nginx/conf.d,若是要掛載上述目錄與文件,必須先在宿主機建好目錄,並有正確nginx.conf的配置文件(可能已裝的系統中拷貝)。
一、在主192.168.22.151備192.168.22.152機上建立nginx:
mkdir -p ~/nginx/html ~/nginx/logs ~/nginx/conf.d
[root@localhost nginx]# docker run --name nginx1 -p 80:80 -v $PWD/html:/usr/share/nginx/html -v $PWD/nginx.conf:/etc/nginx/nginx.conf:ro -v $PWD/conf.d:/etc/nginx/conf.d -v $PWD/logs:/var/log/nginx -d nginx:latest
e0071d4c3fe43438a0eec11b09b883274209310288000229cf5750a5a793075f
[root@localhost nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0071d4c3fe4 nginx:latest "nginx -g 'daemon ..." 49 seconds ago Up 48 seconds 0.0.0.0:80->80/tcp nginx1
[root@localhost nginx]# docker exec -it e0071d4c3fe4 /bin/bash
root@e0071d4c3fe4:/#
二、配置nginx:
1)在nginx.conf文件下在http{}節點內增長下面內容:
upstream balance{
server 192.168.22.152:8081 weight=5;
server 192.168.22.152:8082 weight=5;
server 192.168.22.151:8083 weight=5;
}
balance這個名字能夠任意,但必定要與conf.d/default.conf中配置的proxy_pass http://balance;名稱一致。
2)在conf.d/default.conf內容屬於http{}節點下的server{}節點,在server{}下面增長:
location / {
proxy_pass http://balance;
}
3)保存,重啓容器
[root@localhost logs]# docker restart e0071d4c3fe4
4)兩臺機分別安裝,操做與配置徹底同樣。
3、安裝keepalived主備
說明:keepalived未安裝在docker上,安裝在宿主機上,兩臺宿主機,IP分別爲192.168.22.151(主),192.168.22.152(備),VIP設爲同網段的192.168.22.158
配置參考:http://www.keepalived.org/doc/installing_keepalived.html
http://www.keepalived.org/manpage.html
https://www.cnblogs.com/lys_013/p/5783107.html
安裝前可對內核升級(不是必須)
[root@localhost ~] yum -y install gcc gcc+ gcc-c++
[root@localhost ~] yum install popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel libnl3-devel net-snmp-devel curl
[root@localhost ~] yum -y install kernel kernel-devel
一、keepalived 安裝
1)選爲yum安裝,分別安裝在192.168.22.151,192.168.22.152兩臺機上
[root@localhost ~]# yum install keepalived (安裝的是版本:V1.3.5)
2)安裝包安裝
[root@localhost ~]# curl --progress http://keepalived.org/software/keepalived-1.2.15.tar.gz | tar xz
[root@localhost keepalived-1.2.15]# ./configure (默認安裝在/usr/local目錄 ,推薦指定安裝目錄:./configure --prefix=/usr/local/keepalived-1.2.15)
[root@localhost keepalived-1.2.15]# make
[root@localhost keepalived-1.2.15]# sudo make install
編譯以後,建立一個init腳本以控制keepalived守護程序。
cp /root/keepalived-1.2.15/keepalived/etc/init.d/keepalived.init /etc/rc.d/init.d/
ln -s /etc/rc.d/init.d/keepalived.init /etc/rc.d/rc3.d/S99keepalived
未操做完。。。
二、配置系統日誌(方便監控運行狀況)
1)修改keepalived的日誌輸入(由於keepalived的日誌輸出在/var/log/message裏面,很差查看,可進行修改)
[root@localhost ~]# vi /etc/sysconfig/keepalived
把KEEPALIVED_OPTIONS="-D" 修改成KEEPALIVED_OPTIONS="-D -d -S 0"
最後設置syslog,修改/etc/rsyslog.conf
最後添加:
# keepalived -S 0
local0.* /var/log/keepalived.log
從新啓動日誌
[root@localhost log]# systemctl restart rsyslog
[root@localhost log]# systemctl restart keepalived
[root@localhost log]# tail keepalived.log
Sep 8 20:51:58 localhost Keepalived_healthcheckers[39423]: Activating healthchecker for service [10.10.10.3]:1358
2)配置主備機/etc/keepalived/keepalived.conf
主機192.168.22.151配置
[root@localhost ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx{ script "killall -0 nginx" interval 1 weight -10 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.22.158 } track_script { chk_nginx } }
備機 192.168.22.152:
[root@localhost ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_nginx{ script "killall -0 nginx" interval 1 weight -10 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP interface eno16777736 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.22.158 } track_script { chk_nginx } }
兩個配置要注意的地方,interface 必定與主機的網卡名稱一致,可經過ifconfig查看主機與備機的網卡名稱
配置完成後,重啓服務:
[root@localhost ~]# systemctl restart keepalived
在master機器上面查看虛擬是否綁定上了
[root@localhost ~]# ip -a addr
[root@localhost ~]# ip -a addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:d7:d9:71 brd ff:ff:ff:ff:ff:ff inet 192.168.22.151/24 brd 192.168.22.255 scope global eno16777736 valid_lft forever preferred_lft forever inet 192.168.22.158/32 scope global eno16777736 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fed7:d971/64 scope link valid_lft forever preferred_lft forever 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN link/ether 02:42:4a:66:2f:c5 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever
並查看主機日誌狀況:
[root@localhost ~]# tail /var/log/keepalived.log Sep 9 17:14:37 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) Transition to MASTER STATE Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) Entering MASTER STATE Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) setting protocol iptable drop rule Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) setting protocol VIPs. Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158 Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eno Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158 Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158 Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158 Sep 9 17:14:38 localhost Keepalived_vrrp[1223]: Sending gratuitous ARP on eno16777736 for 192.168.22.158
備機日誌:
[root@localhost ~]# tail /var/log/keepalived.log Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: IPv4 address = 172.17.0.1 Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: IPv6 address = :: Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: MAC = 02:42:67:b0:b8:e5 Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: is UP Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: MTU = 1500 Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: HW Type = ETHERNET Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: Using LinkWatch kernel netlink reflector... Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: VRRP_Instance(VI_1) Entering BACKUP STATE Sep 9 17:14:56 localhost Keepalived_vrrp[1251]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,1 Sep 9 17:14:56 localhost Keepalived[1249]: Starting VRRP child process, pid=1251
測試界面:
中止主機的keepalived服務,測試備機狀況:
成功轉移。