Centos 8 Docker 内部 nginx 负载spring boot

本文详细介绍了如何使用Docker部署SpringBoot应用和Nginx,包括Dockerfile的编写、镜像的构建与运行、端口映射及Nginx配置,实现了应用的容器化和负载均衡。

前言      

 这篇帖子服务于踩坑的自己,如果这篇帖子对你能起到帮助,那将更又意义。

首选你要又台Linux机器 (本篇帖子为阿里云Centos 8)

安装好Docker环境

docker 安装的方法很多,这里不做赘述,推荐官网查看(docker是个轻量的很好装)

systemctl enable docker#设置开机启动
systemctl disable docker#关闭开机启动

拉取Nginx 

# 拉取 nginx:1.12  如果不指定版本则最新的  更丰富的中间件 https://hub.docker.com
docker pull nginx

下图仅仅关注  nginx latest 即可

 

我拉取了两个nginx 我们用latest那个版本讲解,这里nginx镜像已经搞定,我们先放一放

Dockerfile 生成springboot 项目 自定义镜像

准备一个Spring Boot 的Jar包,分别设置端口 9092 9093 (看你心情搞)

首选你需要准备一个 Dockerfile 文件,我也郁闷为啥非叫“Dockerfile”这个名字,也没后缀,后续等我明白在补充

sp-docker-0.0.1-SNAPSHOT.jar: 这个就是boot 的普通jar。你需要打包两次,分别9092和9093端口,为实现后面负载效果准备

Dockerfile 说明  注意替换你自己的jar包名

#创建文件,或者touch
vim Dockerfile

# 写入

# Docker image for springboot file run
# VERSION 0.0.1
# Author: eangulee
# 基础镜像使用java  如果你用的是别的jdk记得换,另外如果你的虚拟机没安装过jdk镜像,那么等下会自动拉取jdk
FROM java:8
# 作者
MAINTAINER eangulee <lhl>
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD sp-docker-0.0.1-SNAPSHOT.jar app.jar
# 运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

:wq!                                                                                            

把 Dockerfile 和你的jar放在通一个文件夹 

docker build -t boot2 .

build  :构建

-t [镜像名称]

重复动作,更换Jar中的端口,在打一个包, 构建镜像为 boot3, 这样你就又俩镜像了,准备好你会的到如下图结果

启动boot工程

boot 工程的镜像我们已经主备好,那么我们启动这两个工程

# 启动 boot2 镜像
 docker run --name boot2Name -d -p 8082:9092 boot2
# 启动 boot3 镜像
 docker run --name boot3Name -d -p 8083:9093 boot3

--name:容器名称(方便后续进入实例获取他的文件)

-d 后台运行
-p 端口映射

8082 、8083:是宿主机的端口

9092、9093:是你Jar真实端口

--restart=always (本次没有运行,这个表示docker容器在停止或服务器开机之后会自动重新启动)

拓展:

# 查看多有镜像
docker images

# 列举当前运行的容器:
docker ps
# 查询所有容器
docker ps -a

# 检查容器内部信息:
docker inspect [容器名称]

# 停止容器
docker stop [容器名称]
# 重启容器
docker start [容器名称]
# 移除容器
docker rm [容器名称]
 

#杀死所有正在运行的容器: 
docker kill $(docker ps -a -q)
# 删除所有停止的容器: 
docker rm $(docker ps -a -q)

先启动nginx,然后把ngixn配置文件copy到外部

把虚拟机添加安全组:

启动nginx

# 启动nginx 镜像内部
docker run --name mynginx -d -p 8080:80 nginx

访问下试试:

copy 容器内部的nginx文件到外部

# 首先你要把 /home/nginx/conf   log  conf.d 文件夹建立 mkdir 命令
# mynginx 为你刚才启动的容器名称
docker cp mynginx:/etc/nginx/nginx.conf /home/nginx/conf
docker cp mynginx:/var/log/nginx /home/nginx/log
docker cp mynginx:/etc/nginx/conf.d/default.conf /home/nginx/conf/conf.d/

然后停止 容器ngixn

# 停止容器
docker stop mynginx 
# 移除容器  因为下次我还想用   mynginx 名字
docker rm mynginx

修改nginx配置文件

# 修改nginx.conf文件
 vim /home/nginx/conf/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;
    
    upstream app{
	    server app2:9092 max_fails=1 fail_timeout=60s weight=1;
        server app3:9093 max_fails=1 fail_timeout=60s weight=1;
    }
	server {
		 listen       81;
		 listen  [::]:81;
		 server_name  localhost;
	 
		 #charset koi8-r;
		 #access_log  /var/log/nginx/host.access.log  main;
	 
		 location / {
			 proxy_pass http://app;
			 root   /usr/share/nginx/html;
			 index  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   /usr/share/nginx/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           html;
		 #    fastcgi_pass   127.0.0.1:9000;
		 #    fastcgi_index  index.php;
		 #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
		 #    include        fastcgi_params;
		 #}
	 
		 # deny access to .htaccess files, if Apache's document root
		 # concurs with nginx's one
		 #
		 #location ~ /\.ht {
		 #    deny  all;
		 #}
	 }


}

说明:

启动ngixn

# 启动nginx
docker run --name mynginx -p 8080:81 --link boot3Name:app3 --link boot2Name:app2 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/log:/var/log/nginx   -d nginx

访问:

搞定

 

小白上路,希望对您有所帮助!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值