【多动手】windows 下使用 docker 启动 Java 服务(docker desktop + wsl)

文章目录

    • [1、安装 docker desktop](#1、安装 docker desktop)
    • [2、windows 安装 wsl](#2、windows 安装 wsl)
    • [3、docker 配置加速镜像源](#3、docker 配置加速镜像源)
    • [4、使用 docker 命令操作服务](#4、使用 docker 命令操作服务)
      • [4.1 启动服务](#4.1 启动服务)
      • [4.2 停止服务](#4.2 停止服务)
      • [4.3 重启服务](#4.3 重启服务)
      • [4.4 停止并删除所有容器](#4.4 停止并删除所有容器)
      • [4.5 重新拉起(重点、常用)](#4.5 重新拉起(重点、常用))
    • 5、服务测试与日志排查

1、安装 docker desktop

建议使用 https://docs.docker.com/desktop/release-notes/#4430 版本

如果安装最新版本安装时可能会被提示 "系统不支持"


注意安装完成后,会提示你重启windows系统,记得保存相关文件后再点击进行重启!!!

博主吃了亏,所以给大家提个醒

cmd 输入 docker --version 查看输出内容,判断是否安装docker成功。

2、windows 安装 wsl

打开 cmd 或者 powershell,输入

cmd 复制代码
wsl --install

等待安装完成。

安装过程大概率会很慢,挂在后台,耐心等待即可。

安装完成后,会让你定义wsl用户名和密码,定义完之后就自动会打开 wsl 的界面。

3、docker 配置加速镜像源

到镜像站中去 pull image 时会出现超时的问题,这种一般都是网络问题,需要配置加速镜像源。

在 setting -> Docker Engine 中新增:

json 复制代码
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://mirror.ccs.tencentyun.com",
    "https://hub-mirror.c.163.com"
  ]
}

4、使用 docker 命令操作服务

启动后端服务之前呢,先梳理下后端服务依赖了哪些外部服务,我这边依赖了 mysql、redis、nacos,所以在启动后端服务之前,需要先使用 docker 启动外部服务,再启动后端业务服务。

这些启动的配置和运行的方式需要写在 yml 配置文件中。这块就不详细展开了,工作中能看懂,和进行调整就行,最佳实践是让 ai 来写~

例子1,外部服务的启动 docker-compose.yml 内容:

yml 复制代码
services:
  mysql:
    image: mysql:8.0
    container_name: flashsale-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Shanghai
    ports:
      - "3306:3306"
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d

  redis:
    image: redis:7.2
    container_name: flashsale-redis
    restart: unless-stopped
    ports:
      - "6379:6379"

  nacos:
    image: nacos/nacos-server:v2.3.2
    container_name: flashsale-nacos
    restart: unless-stopped
    environment:
      MODE: standalone
      NACOS_AUTH_ENABLE: "false"
      JVM_XMS: 256m
      JVM_XMX: 256m
      TZ: Asia/Shanghai
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"

例子2,后端业务服务的 docker-compose.backend.yml 内容:

yml 复制代码
services:
  service-user:
    container_name: flashsale-service-user
    build:
      context: ../flashsale-backend
      dockerfile: ../deploy/docker/Dockerfile.backend
      args:
        JAR_FILE: service-user/target/service-user-1.0.0-SNAPSHOT.jar
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: dev
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
    depends_on:
      - mysql
      - redis
      - nacos
    ports:
      - "9001:9001"
    restart: unless-stopped

  service-product:
    container_name: flashsale-service-product
    build:
      context: ../flashsale-backend
      dockerfile: ../deploy/docker/Dockerfile.backend
      args:
        JAR_FILE: service-product/target/service-product-1.0.0-SNAPSHOT.jar
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: dev
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_product?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
    depends_on:
      - mysql
      - redis
      - nacos
    ports:
      - "9002:9002"
    restart: unless-stopped

  service-inventory:
    container_name: flashsale-service-inventory
    build:
      context: ../flashsale-backend
      dockerfile: ../deploy/docker/Dockerfile.backend
      args:
        JAR_FILE: service-inventory/target/service-inventory-1.0.0-SNAPSHOT.jar
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: dev
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_inventory?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
    depends_on:
      - mysql
      - redis
      - nacos
    ports:
      - "9003:9003"
    restart: unless-stopped

  service-order:
    container_name: flashsale-service-order
    build:
      context: ../flashsale-backend
      dockerfile: ../deploy/docker/Dockerfile.backend
      args:
        JAR_FILE: service-order/target/service-order-1.0.0-SNAPSHOT.jar
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: dev
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/flashsale_order?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: root
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
    depends_on:
      - mysql
      - redis
      - nacos
    ports:
      - "9004:9004"
    restart: unless-stopped

  service-gateway:
    container_name: flashsale-service-gateway
    build:
      context: ../flashsale-backend
      dockerfile: ../deploy/docker/Dockerfile.backend
      args:
        JAR_FILE: service-gateway/target/service-gateway-1.0.0-SNAPSHOT.jar
    environment:
      TZ: Asia/Shanghai
      SPRING_PROFILES_ACTIVE: dev
      SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR: nacos:8848
      SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR: nacos:8848
    depends_on:
      - nacos
      - service-user
      - service-product
      - service-inventory
      - service-order
    ports:
      - "8080:8080"
    restart: unless-stopped

4.1 启动服务

指定多个 compose 配置文件,运行 start命令进行启动服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml start

4.2 停止服务

指定多个 compose 配置文件,运行 stop 命令进行停止服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml stop

4.3 重启服务

指定多个 compose 配置文件,运行 restart 命令进行重启服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml restart

4.4 停止并删除所有容器

指定多个 compose 配置文件,运行 down 命令进行停止并删除服务
docker compose -f docker-compose.yml -f docker-compose.backend.yml down

4.5 重新拉起(重点、常用)

指定多个 compose 配置文件,运行 up -d 命令重新拉起服务(通过现有的镜像创建容器)
docker compose -f docker-compose.yml -f docker-compose.backend.yml up -d

这里需要补充下,后端代码更新了,需要重新发版进行联调,也需要用到该命令,只是需要加下 --build 告诉 docker 要重新构建镜像,但在这之前别忘了重新打包,下面讲下操作步骤:

1、后端服务重新打包

执行mvn clean package -Dskiptests重新打包

2、重新构建镜像并拉起容器

执行 docker compose -f docker-compose.yml -f docker-compose.backend.yml up -d --build

5、服务测试与日志排查

此时进行登录,被提示:用户名或密码不正确

测了好几个密码,admin、admin123,都不正确,索性重新注册个账号了。

在 docker desktop 中进入指定容器内部查看日志:

当然,也可以在本地使用 docker 命令查看指定容器内的日志。

这里演示查看 user 服务容器内的日志。

1、先通过 docker ps 获取容器信息列表

此时能够获取到每个容器的ID和容器名称

2、再通过 docker logs -f 容器名/容器ID 查看指定容器内的日志

命令:docker logs -f 047f20f7af3e 或者 docker logs -f flashsale-service-user

相关推荐
热爱专研AI的学妹2 小时前
DataEyes API:一站式大模型聚合网关,600 + 模型统一调用与负载均衡实战方案
运维·负载均衡
yaaakaaang2 小时前
十三、责任链模式
java·责任链模式
cyber_两只龙宝2 小时前
【Oracle】Oracle之SQL中的单行函数
linux·运维·数据库·sql·云原生·oracle
爱吃烤鸡翅的酸菜鱼2 小时前
【Java】封装位运算通用工具类——用一个整数字段替代几十个布尔列,极致节省存储空间
java·开发语言·设计模式·工具类·位运算·合成复用原则
成都被卷死的程序员2 小时前
RustDesk 自建远程控制服务器部署全记录(含错误排查与最终方案)
运维·服务器
chushiyunen2 小时前
posting替换postman(好像还是不太好用)
windows
菜菜小狗的学习笔记2 小时前
八股(三)Java并发
java·开发语言
overmind2 小时前
oeasy Python 120[专业选修]列表_直接赋值_浅拷贝_shallowcopy_深拷贝_deepcopy
linux·windows·python
小宋0012 小时前
Ubuntu Terminator(多开并行终端工具)
linux·运维·ubuntu
云烟成雨TD2 小时前
Spring AI Alibaba 1.x 系列【10】ReactAgent 工具加载和执行流程
java·人工智能·spring