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在调用了,至此,动静分离安装完成。

发表评论

后才能评论