当前位置: 首页 > news >正文

Docker部署springcloud项目(清晰明了)

概述

最近在想做个cloud项目,gitee上找了个模板项目,后端使用到 Nacos、Gateway、Security等技术,需要到 Docker 容器部署,在此总结一下,若有不足之处,望大佬们可以指出。

什么是 Docker

Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

Docker的三大核心概念镜像、容器、仓库

  • 镜像:类似虚拟机的镜像、用俗话说就是安装文件。
  • 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例,可以将其启动、开始、停止、删除、而这些容器都是相互隔离、互不可见的。
  • 仓库:类似代码仓库,是Docker集中存放镜像文件的场所。

部署Spring Cloud项目

实现流程

在这里插入图片描述

Maven 打包插件

  • maven-jar-plugin:打包不会把依赖库给打包进去,解压开里面会发现少了lib(只包括当前模块的jar,不包含依赖jar,无法直接启动)。
  • spring-boot-maven-plugin:会把依赖库一起打包进jar包

我目前项目中配置

<build><!-- 项目名 --><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skipTests>true</skipTests></configuration></plugin></plugins><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource></resources></build>

Linux 中 jar 包分布
在这里插入图片描述
在这里插入图片描述

System 模块

在这里插入图片描述

Dockerfile

FROM java:8MAINTAINER lanysRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone#添加jar包到容器中
ADD maku-cloud-system.jar  maku-cloud-system.jar#暴露端口
EXPOSE 8081ENTRYPOINT ["java", "-server", "-Xms512M", "-Xmx512M", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError", "-jar", "maku-cloud-system.jar" ]

生成镜像

格式:

# docker build -t 镜像名称:版本 .
docker build -t makunet_system:1.0 .

Gateway

在这里插入图片描述

Dockerfile

# 构建镜像,执行命令:【docker build -t makunet:1.0 .】# 网关 docker build -t makunet_gateway:1.0 .
# 后台 docker build -t makunet_system:1.0 .
# 启动compost docker-compose up -d
FROM java:8MAINTAINER lanysRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone#添加jar包到容器中
ADD maku-cloud-gateway.jar  maku-cloud-gateway.jar#暴露端口
EXPOSE 8080ENTRYPOINT ["java", "-server", "-Xms512M", "-Xmx512M", "-Djava.security.egd=file:/dev/./urandom", "-Dfile.encoding=UTF-8", "-XX:+HeapDumpOnOutOfMemoryError", "-jar", "maku-cloud-gateway.jar" ]

生成镜像

docker build -t makunet_gateway:1.0 .

查看生成效果

 docker images

在这里插入图片描述

docker-compose.yml

在这里插入图片描述

version: '3.9'
services:# 服务定义名称maku-cloud-gateway:# 指定镜像名称image: makunet_gateway:1.0# 指定运行服务名称,就是上面container_name: maku-cloud-gateway# 暴露端口ports:- 8080:8080# 挂载解析volumes:- /work/www/maku-cloud/maku-cloud-gateway.jar:/app/app.jar# 服务定义名称maku-cloud-system:# 指定镜像名称image: makunet_system:1.0container_name: maku-cloud-systemvolumes:- /work/www/maku-cloud/maku-cloud-system.jar:/app/app.jar

启动 docker-compose.yml

查看启动是否正常(测试):

compost docker-compose up

启动挂载:

compost docker-compose up -d

开放端口及实现效果

在这里插入图片描述
在这里插入图片描述

拓展

指定 yml 文件配置

Spring Cloud yml 配置文件 一般需要指定 Nacos 中的对应 测试环境(test)、生产环境(prod)需要在 docker-compose.yml 中设置compose变量

docker-compose.yml

maku-cloud-gateway:image: makunet:1.0container_name: maku-cloud-gatewayports:- 8080:8080# 设置环境变量env_file:// 指定当前目录下的 app.env 文件- app.envvolumes:- /work/www/maku-cloud/maku-cloud-gateway.jar:/app/app.jar

app.env

nacos_host=8.134...
nacos_port=88..
nacos_namespace=53b571a0-08c7-4a2d-b094-32dc....
nacos_group=test
activated_properties=test

bootstrap.yml

server:port: 8081spring:application:name: maku-cloud-systemprofiles:active: ${nacos_group:"dev"}cloud:nacos:discovery:server-addr: ${nacos_host:127.0.0.1}:${nacos_port:8848}# 命名空间,默认:publicnamespace: ${nacos_namespace:}service: ${spring.application.name}config:server-addr: ${spring.cloud.nacos.discovery.server-addr}namespace: ${spring.cloud.nacos.discovery.namespace}file-extension: yaml# 指定配置extension-configs:- data-id: datasour...yamlrefresh: true- data-id: comm...yamlrefresh: true
http://www.lryc.cn/news/41422.html

相关文章:

  • 搭建SFTP服务安全共享文件,实现在外远程访问「内网穿透」
  • ChatGPT优化Python代码的小技巧
  • Stm32-使用TB6612驱动电机及编码器测速
  • 【JS】常用js方法
  • Android---动态权限申请
  • 【Linux】环境变量(基本概念 常见环境变量 测试PATH 环境变量相关命令)
  • 安全牛+瑞数信息:《数据安全管控平台应用指南》报告共同发布
  • 【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(6)
  • 论文解读TCPN
  • 性能优化之防抖与节流
  • 数组模拟单链表
  • 蓝桥杯刷题第十四天
  • 面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了
  • Activiti 工作流简介
  • 【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】
  • 【C++】Google编码风格学习
  • JavaScript 中的Promise 函数
  • 学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】
  • 快看!这只猫两次登上 Github Trending !!!
  • Linux->文件系统初识
  • InfluxDB和IotDB介绍与性能对比
  • 计算机体系结构(校验码+总线)
  • JavaWeb《三》Request请求转发与Response响应
  • 断言assert
  • 【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统
  • 详解结构体内存对齐
  • 指针:程序员的望远镜
  • 【python实现学生选课系统】
  • 备受青睐的4D毫米波成像雷达,何以助力高阶自动驾驶落地?
  • 3.20算法题(一) LeetCode 合并两个有序数组