docker 集群 springboot 项目

前言

关于集群的概念以及集群很分布式的关系或者区别,请各位自行百度,道理大家都懂,只要能理解、知道是怎么回事就行。

注:杨千嬅-2019世界巡回演唱会-天津站:2019-12-29,天津体育馆(舒服哦!)

准备

1、准备两个 springboot 项目,端口自定义,笔者这里都是 8081

2、这两个 springboot 项目添加两个测试接口,接口都为 /test/hello,且接口返回结果为

        第一个:Welcome to service one!

        第二个:Welcome to service two!

3、服务器,确保服务器安装 docker、nginx等相关配置,有兴趣的同学可戳这里

        https://blog.youkuaiyun.com/XGLLHZ/article/details/103005816

正文

1、首先将两个项目部署到服务器,部署方法戳这里:https://blog.youkuaiyun.com/XGLLHZ/article/details/103045580,部署完成后查看是否启动成功

docker ps   #查看正常运行的容器列表
若启动正常,则会看到容器端口分别为 3301、3302 的两个容器,先忽略掉端口为 10031 的容器

2、配置 nginx,拉取到 nginx 镜像后先不要创建 nginx 容器,先配置镜像的 nginx.conf文件,然后利用 nginx 镜像启动容器并且挂载 nginx.conf 和 default.conf 文件(实际上是用我们创建的 nginx 配置文件覆盖掉了 nginx 镜像中的配置文件,因为如果要操作镜像中的配置文件则需要进入镜像中,比较麻烦,所以我们将其拿出来)

拉取 nginx 镜像

docker search nginx   #查找 nginx 相关的镜像列表
docker pull nginx:latest   #拉取 nginx 镜像

以终端的方式打开镜像

docker run -i -t nginx /bin/bash   #以终端的方式打开镜像容器
ls -l   #查看镜像内的文件

在 etc 中找到 nginx 的两个配置文件(为什么是两个:因为在 nginx.conf 配置文件中有一行代码,它指向了default.conf,所以有两个)

cat /etc/nginx/nginx.conf   #查看 ningx.conf 中的文件
cat /etc/nginx/conf.d/default.conf   #查看 default.conf 中的文件
然后将这两个文件中的内容考出来

 然后在根目录下创建配置文件(这个随意,但是在哪儿要知道),笔者这里创建的是 config/nginx,里面包含了两个文件,分别是 nginx.conf 和 default.conf,然后将刚才拷贝出来的两个分别粘贴到创建的两个文件夹内。

接下来就是创建 nginx 容器了

docker run --name nginx -d -p 10031:80 
-v /config/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /config/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf 
nginx
# 创建的 nginx 容器端口号是 10031,名称是 nginx
# 然后挂载了两个刚才创建的文件
# 基础镜像是 nginx

 然后查看 刚才创建的 nginx 容器是否正常启动

接下来就是集群了。打开 nginx 的配置文件,进行配置

vim default.conf   #编辑 default.conf 配置文件

# 以下为修改的部分

# 集群服务组 3301、3302分别为两个 springboot 项目所在的容器端口号,
weight 为权重,越大,处理请求所分配的次数就越多
upstream springboots {
    server 服务器外网 ip:3301 weight=1;   
    server 服务器外网 ip:3302 weight=1;   
}

server {
    listen       80;   #nginx监听端口
    server_name  服务器外网 ip;   # 服务名为服务器外网 ip,如果有域名则为域名

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        proxy_pass http://springboots;   #反向代理地址
    }

 

然后重启 nginx、两个项目所在的容器

测试:

访问: 服务器外网ip:10031/api/test/hello

第一次访问:

第二次访问: 

 

然后,就可以开始分布式集群了!!! 

### 在Linux环境中使用Docker部署Spring Boot项目的教程 #### 准备工作 为了确保能够顺利地在Linux环境下的Docker中运行Spring Boot应用程序,需先确认已安装并配置好Docker服务。此外,还需准备好要打包成容器的Spring Boot应用。 #### 创建Spring Boot项目 创建一个新的Spring Boot项目或者利用现有的项目文件夹作为起点。对于已有项目,确保其结构符合Maven或Gradle的标准布局,并且包含`pom.xml`或`build.gradle`构建脚本以及入口类带有`@SpringBootApplication`注解[^2]。 ```java @SpringBootApplication public class DockerApplication { public static void main(String[] args) { SpringApplication.run(DockerApplication.class, args); } } ``` #### 编写Dockerfile 在一个名为`Dockerfile`的新文本文件内定义用于构建镜像所需的指令集。此文件通常位于项目的根目录下: ```dockerfile FROM openjdk:8-jdk-alpine VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 这段代码指定了基于Alpine Linux版本的基础OpenJDK 8映像来执行Java程序;设置了一个临时卷以支持某些类型的日志记录和其他操作系统的特性差异;复制编译后的`.jar`文件到容器内的指定位置;最后设置了启动命令以便于当容器被激活时自动加载并运行该Jar包中的主函数[^4]。 #### 构建与推送Docker镜像 完成上述准备工作之后,在终端窗口进入含有`Dockerfile`的工作空间路径,接着输入如下命令生成自定义标签名的本地私有仓库镜像: ```bash docker build -f ./Dockerfile -t springboot-app . ``` 如果打算分享给他人,则可以考虑将新建立好的镜像推送到公共注册中心(如Docker Hub),这需要提前登录账号并通过特定命名规则标记目标地址: ```bash docker tag springboot-app username/springboot-app:v1 docker push username/springboot-app:v1 ``` #### 运行容器实例 一旦拥有了可用的Docker镜像,便可以通过下面的方式快速拉起一个独立的服务进程: ```bash docker run -d -p 8080:8080 --name my-spring-boot-app springboot-app ``` 这里假设宿主机开放端口8080供外部访问内部Web服务器监听相同编号的位置。参数`-d`表示以后台守护模式开启任务流程;而`--name`则赋予此次会话独一无二的身份标识符方便后续管理维护[^1]。 #### 数据持久化及其他高级选项 考虑到实际应用场景可能涉及到数据库交互或者其他形式的状态保存机制,因此建议采用挂载方式把重要资料存储于物理磁盘而非仅限内存之中。例如,针对两个不同业务模块分别设定对应的上传路径: ```bash mkdir -p /opt/docker-build/yshop-admin && mkdir -p /opt/docker-build/yshop-app docker run ... \ -v /opt/docker-build/yshop-admin:/var/lib/admin-data \ -v /opt/docker-build/yshop-app:/var/lib/app-data ... ``` 这样做的好处在于即使将来更换新的容器也不会丢失之前积累下来的数据资产。另外,还应该关注性能调优方面的话题,比如合理分配CPU核心数、内存大小等资源配额限制措施,从而保障整个集群架构稳定高效运作[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值