应用的容器化部署与负载均衡(docker+nginx)

文章介绍了应用容器化如何通过Docker实现,强调了容器的可移植性和部署便捷性。通过Dockerfile构建镜像,然后运行容器部署应用。同时,讨论了Nginx在负载均衡中的作用,如何配置Nginx进行反向代理和负载分发,确保服务高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用容器化


    应用容器化,不去看网络上通篇八股,笔者个人认为就是将一个应用放到一个能支撑它正常运行的环境中,这个环境可移植,可重复利用。则这个环境就可以理解为容器。
    应用容器化的意义在于可以使应用在不同型号,不同内存大小,不同处理器的计算机上完美移植。无需再考虑繁复的环境配置以及应用部署。制作好镜像后,只需要运行一个容器即可,搭配镜像仓库,则只需要登录镜像仓库,即可方便快捷地将自己的应用部署在计算机上。
    关于容器化的妙用不再赘述,笔者在此处也不过多叙述容器化的原理。此处引用docker容器技术,docker的妙处无以言表,不过多嘴一句,尽量上虚拟机的docker应用,docker的桌面级应用docker desktop只能说又大又烂,慎用。此处笔者电脑为m1芯片,安装不了centos7,因此使用docker desktop。


应用构建镜像并运行容器

dockerfile文件

#
# Package stage
#
FROM tomcat:8-jre8-alpine
WORKDIR /ssfServerDev


COPY /ssfServerDev /usr/local/tomcat/webapps/ssfServerDev
EXPOSE 8080
CMD ["catalina.sh", "run"]

    非maven项目,直接将整个应用包放到容器内的tomcat下的webapps下即可。
而后在同层目录下直接使用docker build命令构建镜像即可

docker build -t ssfserver .

    此为构建好的镜像,通过docker启动容器即可:

docker run --name ssfserver1 -p 8071:8080 -d ssfserver

在这里插入图片描述

    访问0.0.0.0:8071/ssfServerDev/或127.0.0.1:8071/ssfServerDev/或/localhost:8071/ssfServerDev/或192.168.0.107:8071/ssfServerDev/(192.168.0.107亦为本机ip)
在这里插入图片描述

    这里的首页笔者调过,是为后面nginx做负载均衡方便查看。


nginx做负载均衡

    负载均衡在此处的出现,牵扯到另一个业务场景。笔者所在的项目偶有发生这样的情况,某时改的代码未经充分测试,就升级到生产环境,致使生产环境出现短暂不可用的情况,如此一来就会造成生产系统短暂的不可用。
    另一方面,我所在的项目尚未遇到,但也迟早会遇见,即随着项目推广的进行,访问量日益增加,单台应用亦或是单台容器已难以为继,但如果部署另外的应用,对用户来说也不友好,这时nginx的作用就体现出来了。
    nginx的反向代理和负载均衡,可以使用户先行访问nginx服务器,再按照策略分配到各应用上,这样一来,单台应用的不可用,也不会造成应用大面积不可用。
    nginx的安装不做赘述。这里只提及一点,nginx较常见的做法是将配置文件从容器中挂载出来,笔者为保证容器的隔离性,采用现将容器内配置文件复制出来,编辑完成后再复制回容器的做法。具体命令为

#将宿主机文件复制到容器内
docker cp [宿主机文件路径] [CONTAINER ID]:[容器内目标目录路径]
#将容器内文件复制到宿主机
docker cp [CONTAINER ID]:[容器内目标目录路径] [宿主机文件路径]

我的nginx.conf为


user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
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;

    upstream ssfServer{
            # hash &request_uri;
            server 192.168.0.107:8071 weight=6;
            server 192.168.0.107:8081 weight=2;
            server 192.168.0.107:8091 weight=2;
	}
    server {
        listen       80 ;
        server_name  10.88.116.145;
        location  / {
            proxy_pass http://ssfServer;
        }
    }
     
}

    将配置文件复制到容器内部启动nginx,由于刚启动ssfserver1,因此会直接转发到改tomcat上
在这里插入图片描述

另外启动几台容器

docker run --name ssfserver2 -p 8081:8080 -d ssfserver
docker run --name ssfserver3 -p 8091:8080 -d ssfserver

    一般来说,一个集群的容器以三台为最佳,因为当其中某一台机子挂掉之后。
2/3的可用性是高于1/2的,至于3/4,则又需要从成本角度考虑。因而这里部署三台。
在这里插入图片描述

另外,我刚才在nginx的配置文件中是配置了策略的,大致意思是10次访问server1中6次,server2和server3各中2次,当然还有其他诸多策略,不做赘述。
此处放置五次访问的截图。
访问路径为统一为:http://192.168.0.107/ssfServerDev/

1.
2.在这里插入图片描述

3.在这里插入图片描述

4.在这里插入图片描述

5.在这里插入图片描述

基本符合负载配重。
停掉一台应用
在这里插入图片描述

用户无感,仍可正常访问
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值