Docker动静网站分离实战
1)基于DOCKER虚拟化平台,创建1台Nginx WEV,同时创建2台Tomcat容器,最终实现Nginx负载均衡Tomcat集群,发布Jforum WEB论坛。实现用户通过互联网可以访问Jforum论坛,实现动静分离。
2)修改镜像源为阿里源
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}
EOF
重启docker进程
[root@localhost ~]# pkill docker
[root@localhost ~]# ps -ef|grep docker
root 2212 1930 0 08:22 pts/0 00:00:00 grep --color=auto docker
[1]+ Done nohup /usr/local/docker/dockerd
[root@localhost ~]# nohup /usr/local/docker/dockerd &
[1] 2214
nohup: ignoring input and appending output to ‘nohup.out’
[root@localhost ~]# ps -ef|grep docker
root 2214 1930 4 08:23 pts/0 00:00:00 /usr/local/docker/dockerd
root 2221 2214 2 08:23 ? 00:00:00 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
root 2359 1930 0 08:23 pts/0 00:00:00 grep --color=auto docke
下载nginx和tomcat镜像
[root@localhost ~]# docker pull nginx
[root@localhost ~]# docker pull tomcat
下载jforum软件包
[root@localhost ~]# wget https://pan.cnbugs.com/DevOps/001_Docker/jforum-2.5.0.war
创建docker容器对应的数据目录
[root@localhost ~]# mkdir -p /data/webapps/www
启动容器,首先关闭selinux,否则会报错
[root@localhost ~]# sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
[root@localhost ~]# setenforce 0
启动nginx容器
[root@localhost ~]# docker run -itd -p 80:80 -v /data/webapps/www/:/usr/share/nginx/html --name=nginx --privileged nginx:latest
使用for循环启动两台tomcat容器
[root@localhost ~]# for i in `seq 1 2`;do docker run -itd -p 808$i:8080 --name=tomcat$i --privileged -v /data/webapps/www/:/usr/local/tomcat/webapps/ROOT/ tomcat:latest ;done
查看容器IP地址
[root@localhost ~]# for i in $(docker ps -aq);do docker inspect $i|grep -aiE ipaddr|tail -1|grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}";done
172.17.0.4
172.17.0.3
172.17.0.2
查看tomcat的IP地址
[root@localhost ~]# for i in $(docker ps -a|grep tomcat|awk '{print $1}');do docker inspect $i|grep -aiE ipaddr|tail -1|grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}";done
172.17.0.4
172.17.0.3
进入nginx容器删除配置文件的空行和注释(两种方法)
[root@localhost ~]# awk '!/#/' default.conf|awk '!/^$/'
[root@localhost ~]# docker exec -it nginx bash
root@5bd6c4d5b800:/# sed -i -e '/#/d' -e '/^$/d' /etc/nginx/conf.d/default.conf
复制一份配置文件到本地
[root@localhost ~]# docker cp nginx:/etc/nginx/conf.d/default.conf .
修改配置文件内容如下,加入upstream负载均衡模块
upstream tomcat_web {
server 172.17.0.3:8080 weight=100 max_fails=2 fail_timeout=15;
server 172.17.0.4:8080 weight=100 max_fails=2 fail_timeout=15;
}
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://tomcat_web;
proxy_set_header host $host;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
拷贝修改好的配置文件到容器中
[root@localhost ~]# docker cp default.conf nginx:/etc/nginx/conf.d/default.conf
重启nginx进程
[root@localhost ~]# docker exec nginx nginx -s reload
2021/05/15 13:14:51 [notice] 52#52: signal process started
访问测试

可以看到,成功负载到tomcat服务,因为目前没有数据,所以显示404错误
拷贝war包到数据目录下
[root@localhost ~]# cp /root/jforum-2.5.0.war /data/webapps/www/
安装unzip为了解压war包
[root@localhost ~]# yum install unzip -y
解压war包
[root@localhost ~]# cd /data/webapps/www/
[root@localhost www]# unzip /data/webapps/www/jforum-2.5.0.war
重启tomcat容器
[root@localhost ~]# for i in `docker ps -a|grep tomcat|awk '{print $1}'`;do docker restart $i;done
04c5ed7c76b4
17da79fe9326
再次访问测试

成功进入安装页面。
在企业生产环境中,Nginx通常用于发布静态网页,使用其高性能的
nginx配置文件增加
location ~ .*\.(htm|html|js|css|txt|png|jpg|jpef|gif)$
{
root /usr/share/nginx/html;
expires 30d;
}
重新拷贝nginx配置文件到容器并重启nginx服务
[root@localhost ~]# docker cp default.conf nginx:/etc/nginx/conf.d/default.conf[root@localhost ~]#
[root@localhost ~]# docker exec nginx nginx -s reload
动静分离测试,随便访问个不存的图片查看

从图中可以看出访问不存在的图片是nginx在调用而不是tomcat在调用了,至此,动静分离安装完成。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。