今日练习

简介: 本作业旨在掌握Docker部署微服务中间件及完整工程的流程,涵盖Nacos、MySQL、耗材中心、医生站与网关服务的安装、配置、容器化构建与访问验证,结合Dockerfile和docker-compose实现多服务协同。

作业目标

  • 掌握Docker对于常见微服务中间件的安装、部署、运行
  • 掌握Docker对于微服务的安装,尤其是陌生的一个工程从数据库->工程->访问

工程介绍

工程结构图

技术架构图

物理部署图


环境准备

  • 通过docker images、docker ps -a指令确保本地无任何镜像、运行中的容器,如有借助
  • docker rmi -f 镜像,删除镜像
  • docker rm -f 容器,删除容器
  • mysql涉及的表结构语句,数据库:doctor_station,建表语句: 📎doctor_station.sql
  • 今日所有镜像文件上传路径:/tmp/docker,需在tmp下手动创建docker文件夹
cd /tmp
mkdir docker

题目一

目标

完成Docker环境下Nacos服务部署、启动、访问验证

提示

  • 去dockerhub官网找到Nacos,查看拉取、启动指令,启动完成后浏览器验证

参考答案

  • dockerhub查看服务拉取指令:docker pull nacos/nacos-server

  • /tmp/docker路径下,执行docker pull指令

  • 查看官网启动指令,并调整如下:
  • 官网 Quick Start
docker run --name nacos-quick -e MODE=standalone -p 8849:8848 -d nacos/nacos-server:2.0.2
  • 调整指令如下:
  • 修改登录用户名:nacos,密码默认是nacos不用修改
  • 修改宿主机暴露端口:8848
  • 修改镜像名称:当前使用latest,不用声明
docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server
  • 访问验证


题目二

目标

完成Docker环境下MySQL服务部署、启动、访问验证,并完成表结构、数据导入

提示

  • 参照dockerhub官网完成mysql安装
  • 本地Navicat等可视化工具连接后,完成表结构、数据的导入

参考答案

  • dockerhub查看服务拉取指令:docker pull mysql

  • /tmp/docker路径下,执行docker pull指令

  • 官网查看启动指令,并调整如下:
  • 官网 Quick Start
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  • 修改如下,并执行启动
  • 修改用户名
  • 修改密码
  • 修改镜像名称
docker run --name root -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
  • 启动后,客户端连接访问

  • 注意:此时安装的latest版本比较高,部分可视化工具可能链接不是
  • 导入环境准备中的表结构语句,如下:


题目三(*)

目标

完成Docker环境下耗材中心服务部署、启动、访问验证

提示

  • mysql服务、nacos需更改原来的localhost为对应ip
  • 需创建对应的Dockerfile、docker-compose.yml,其中docker-compose.yml不要重复定义nacos、mysql,避免重复启动
  • nacos配置文件需同步过来:inventoryservice-dev.yaml
inventory:
 stopStartTime: 2023-10-01 23:59:59
 stopEndTime: 2023-10-02 02:00:00
  • 为保证访问,前期可以在docker-compose.yml中暴露此服务端口,以验证是否部署成功
  • 日志查看路径:/var/lib/docker/containers/容器ID-json.log,如启动失败可以在这里查看错误原因,如我最初没有同步nacos配置文件

参考答案

  • 修改application.yml、bootstrap.yml,这里更改了IP【注意你自己的需调整成自己的】
server:
  port: 8081
spring:
  application:
    name: inventoryservice # 库存服务
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.206.129:3306/doctor_station?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
    username: root
    password: root
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
  • pom.xml增加构建信息
<build>
    <!-- 服务打包的最终名称 -->
    <finalName>inventory</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 执行maven-clean-package,编译打包,在target中找到上述finalName名称的jar
  • 新建:Dockerfile,并与inventory.jar放在文件夹:inventory中
FROM java:8-alpine
COPY ./inventory.jar /tmp/inventory.jar
ENTRYPOINT java -jar /tmp/inventory.jar
  • 新建:docker-compose.yml,放在文件夹:doctor-station中
version: "3.2"
services:
  inventoryservice:
    build: ./inventory
    ports:
      - "8081:8081"
  • 上述整体目录结构目前如下:
  • doctor-station
  • inventory
  • Dockerfile
  • inventory.jar
  • docker-compose.yml
  • 上传整个文件夹,到:/tmp/docker/
  • 执行启动命令: docker-compose up -d

  • postman请求验证:


题目四

目标

完成Docker环境下医生站部署、启动、访问验证

提示

同题目二提示

参考答案

  • 修改doctor-service配置文件
  • application.yml
server:
  port: 8088
spring:
  application:
    name: doctorservice
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.206.129:3306/doctor_station?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
    username: root
    password: root
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
feign:
  client:
    config:
      default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
        loggerLevel: BASIC #  日志级别
  httpclient:
    enabled: true # 开启feign对HttpClient的支持
    max-connections: 200 # 最大的连接数
    max-connections-per-route: 50 # 每个路径的最大连接数
  • bootstrap.yml
spring:
  application:
    name: doctorservice # 服务名称
  profiles:
    active: test # 当前使用test环境
  cloud:
    nacos:
      server-addr: 192.168.206.129:8848
      config:
        file-extension: yaml # 文件后缀名
  • pom文件增加构建信息,并打包
<build>
    <!-- 服务打包的最终名称 -->
    <finalName>doctor</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 创建Dockerfile
FROM java:8-alpine
COPY ./doctor.jar /tmp/doctor.jar
ENTRYPOINT java -jar /tmp/doctor.jar
  • 修改docker-compose.yml,追加doctor相关信息
version: "3.2"
services:
  doctorservice:
    build: ./doctor
    ports:
      - "8088:8088"
  inventoryservice:
    build: ./inventory
    ports:
      - "8081:8081"
  • 上述整体目录结构目前如下:
  • doctor-station
  • inventory
  • Dockerfile
  • inventory.jar
  • doctor
  • Dockerfile
  • doctor.jar
  • docker-compose.yml

  • 上传doctor到doctor-station文件夹下,重新上传:docker-compose.yml
  • 停止原inventory服务:docker rm -f,并删除已有的镜像
  • 执行语句重启整个微服务:docker-compose up -d。注意一定是重新构建两个才可以,否则删除镜像、容器后重新启动

  • postman测试验证,启动构建完成后稍等一下再访问,可以通过查看日志是否启动成功再决定是否访问


题目五

目标

完成Docker环境下网关服务部署、启动、访问验证

提示

  • 参照作业二完成部署,但是此时暴露端口只暴露网关,其余都不暴露

参考答案

  • 修改配置文件:application.yml
server:
  port: 10010 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: 192.168.206.129:8848 # nacos地址
    gateway:
      routes: # 网关路由配置
        - id: inventory-service # 路由id,自定义,只要唯一即可
          uri: lb://inventoryservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/inventory/** # 这个是按照路径匹配,只要以/user/开头就符合要求
        - id: doctor-service # 路由id,自定义,只要唯一即可
          uri: lb://doctorservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/doctor/** # 这个是按照路径匹配,只要以/user/开头就符合要求
  • pom文件增加构建信息,并打包
<build>
    <!-- 服务打包的最终名称 -->
    <finalName>gateway</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 创建Dockerfile
FROM java:8-alpine
COPY ./gateway.jar /tmp/gateway.jar
ENTRYPOINT java -jar /tmp/gateway.jar
  • 修改:docker-compose.yml文件,注意端口
version: "3.2"
services:
  doctorservice:
    build: ./doctor
  inventoryservice:
    build: ./inventory
  gateway:
    build: ./gateway
    ports:
      - "10010:10010"
  • 上传gateway,重新上传:docker-compose.yml文件,整体结构如下

  • 删除容器、镜像,并重启

  • 重启:docker-compose up -d

  • postman验证
  • 不设置权限,403禁止访问

  • 设置后访问正常


相关文章
|
13天前
|
数据采集 人工智能 安全
|
8天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
663 4
|
8天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
350 164
|
7天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
359 155