今日练习

简介: 本作业旨在掌握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禁止访问

  • 设置后访问正常


相关文章
|
25天前
|
人工智能 监控 API
【小龙虾Ai🦞保姆级】OpenClaw零基础阿里云/本地部署+多Agent开发集群搭建+免费API配置及避坑指南
2026年,AI开发工具的竞争已从“单点能力”转向“群体协同”。独立开发者Elvis的实战案例震撼行业:通过OpenClaw作为编排层,打造由Claude Code、Codex等模型组成的Agent Swarm(智能体集群),实现日均50次代码提交、单日峰值94次提交的惊人效率,30分钟内完成7个PR合并,无需打开编辑器即可交付完整功能。这一架构与Stripe内部的Minions系统异曲同工——以集中式编排层管理并行编码Agent,让个人开发者拥有媲美团队的生产力。
447 3
|
2月前
|
人工智能 数据可视化 安全
2026年新手点点鼠标零基础部署OpenClaw(Clawdbot)及一键接入Telegram教程
在2026年AI自动化办公与跨终端协同需求爆发的当下,OpenClaw(原Clawdbot、Moltbot)凭借“自然语言驱动、多场景适配、零技术门槛、多工具集成”的核心优势,成为新手、个人用户及轻量团队的首选智能AI助手。它无需专业编程基础,就能轻松实现文档处理、联网搜索、代码生成、会议纪要整理、待办同步、多模态解析等多元化办公任务,堪称“全天候在线的AI数字助理”,彻底替代人工完成重复琐碎的办公流程,大幅提升效率。而阿里云针对零基础新手群体,专门优化推出OpenClaw一键部署方案,通过预置专属镜像、自动化配置环境、简化端口与依赖设置,将原本复杂的部署流程全部简化
667 2
|
11天前
|
人工智能 JSON 自然语言处理
OpenClaw 阿里云/本地部署+N8N+ComfyUI 全链路整合实战:AI大脑、自动化引擎、视觉生成一体化指南
在AI工具日益丰富的今天,各类工具相互孤立、数据无法互通、流程需要手动衔接已成为效率提升的核心阻碍。OpenClaw作为AI智能体调度中枢、N8N作为开源工作流自动化引擎、ComfyUI作为主流图像生成节点工具,三者整合可构建“智能理解→流程执行→视觉产出”的完整自动化闭环,实现从文本指令到最终成果的全流程无人干预。本文完整说明三者定位差异、整合原理、2026年阿里云与本地多平台部署步骤、阿里云百炼Coding Plan免费大模型API配置,以及全流程常见问题解决方案,所有命令可直接复制运行,无冗余表述,适合个人与轻量化团队搭建一体化AI生产力系统。
593 0
|
7月前
|
人工智能 API 监控
告别多接口拼凑!阿里云 API 模型聚合实现技术能力协同跃迁
API聚合整合400+国内外AI模型,统一接口、屏蔽差异,降低开发与维护成本,提升效率与系统稳定性,助力开发者高效应对多API调用困境。
748 0
|
4月前
|
关系型数据库 应用服务中间件 nginx
容器化部署引擎Docker
Docker是一种轻量级容器化技术,通过镜像打包应用及依赖,实现跨环境一致部署。它利用沙箱机制隔离容器,解决开发、测试、生产环境差异与组件兼容性问题,相比虚拟机更高效便捷,提升应用交付效率。
容器化部署引擎Docker
|
4月前
|
Kubernetes IDE 应用服务中间件
2.部署篇(开发部署)
本文介绍如何将SpringCloud应用部署到Kubernetes云端,基于EDAS实现快速上云。涵盖集群导入、应用初始化及通过IDE插件高效部署,助力开发者提升发布效率。
|
4月前
|
自然语言处理 监控 搜索推荐
分布式搜索引擎ElasticSearch
Elasticsearch是基于Lucene的开源分布式搜索引擎,支持全文检索、日志分析与实时监控,结合Logstash、Kibana等组成ELK技术栈,广泛应用于搜索、数据分析等领域。
分布式搜索引擎ElasticSearch
|
4月前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
本文详细介绍Nacos作为配置中心的实现原理与实战步骤,涵盖配置管理、热更新、共享配置及优先级规则,并演示Nacos集群搭建与高可用部署,帮助开发者掌握微服务环境下配置的动态管理与服务解耦方案。
Nacos配置中心
|
4月前
|
消息中间件 负载均衡 Linux
RabbitMQ部署指南
本文介绍了RabbitMQ在CentOS7上基于Docker的单机与集群部署方案,涵盖镜像安装、DelayExchange插件配置、普通模式与镜像模式集群搭建,并重点演示了仲裁队列的高可用特性及集群扩容方法,助力构建稳定可靠的消息中间件服务。
RabbitMQ部署指南
|
4月前
|
SQL 容灾 数据库
分布式事务Seata
本章节深入探讨分布式事务问题,涵盖CAP定理与BASE理论,重点讲解Seata框架的XA、AT、TCC及SAGA四种模式原理与实现,并指导搭建高可用TC服务集群,确保微服务架构下的数据一致性与系统可靠性。
分布式事务Seata