使用docker-compose部署spring cloud项目

1,972 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

前言

由于使用spring cloud开发应用后,服务的数量有了明显的增加,这样测试部署的工作量也就增大了,本文介绍使用docker-compose来快速部署测试环境,生成环境使用k8s部署

镜像生成

请查看jib打包spring boot项目生成docker镜像,运行一下命令会自动打包镜像

gradle jibDockerBuild

镜像列表

docker images
REPOSITORY                                                 TAG         IMAGE ID       CREATED             SIZE
registry.cn-hangzhou.aliyuncs.com/f-boot/message-service   1.0.0       25ffab8435a9   About an hour ago   310MB
registry.cn-hangzhou.aliyuncs.com/f-boot/message-service   latest      25ffab8435a9   About an hour ago   310MB
registry.cn-hangzhou.aliyuncs.com/f-boot/sys-service       1.0.0       4a7d54e1d122   About an hour ago   330MB
registry.cn-hangzhou.aliyuncs.com/f-boot/sys-service       latest      4a7d54e1d122   About an hour ago   330MB
registry.cn-hangzhou.aliyuncs.com/f-boot/file-service      1.0.0       0df8ce1486c1   About an hour ago   314MB
registry.cn-hangzhou.aliyuncs.com/f-boot/file-service      latest      0df8ce1486c1   About an hour ago   314MB
registry.cn-hangzhou.aliyuncs.com/f-boot/gateway           1.0.0       bffc69dc5bcc   About an hour ago   320MB
registry.cn-hangzhou.aliyuncs.com/f-boot/gateway           latest      bffc69dc5bcc   About an hour ago   320MB

gateway是网关服务需要暴露外网访问,file、sys、message是具体的微服务

编写docker-compose.yml

version : '3.9'
services:
  minio:
    image: minio/minio
    ports:
      - "9000:9000"
      - "9001:9001"
    networks:
      - feng
    restart: always
    volumes:
      - /home/feng/minio/disk1:/disk1
      - /home/feng/minio/disk2:/disk2
      - /home/feng/minio/disk3:/disk3
      - /home/feng/minio/disk4:/disk4
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    environment:
      - MINIO_ROOT_USER=feng
      - MINIO_ROOT_PASSWORD=F6yXaV4ZbuIPACgprUQ38jEw9nKhWNJo
    command: server /disk{1...4} --console-address ":9001"
  redis:
    image: redis:6.2.6
    ports:
      - "16379:6379"
    networks:
      - feng
    restart: always
    volumes:
      - /home/feng/redis/data:/data
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf
    entrypoint: [
        "redis-server",
        "/usr/local/etc/redis/redis.conf",
    ]
  nacos:
    image: nacos/nacos-server:v2.0.4
    ports:
      - "8848:8848"
    networks:
      - feng
    restart: always
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    env_file:
      - ./nacos_server.env
  sentinel:
    image: bladex/sentinel-dashboard:1.8.0
    ports:
      - "8858:8858"
    networks:
      - feng
    entrypoint: [
        "java",
        "-server",
        "-Djava.security.egd=file:/dev/./urandom",
        "-Dserver.port=8858",
        "-Dcsp.sentinel.api.port=8719",
        "-Dcsp.sentinel.dashboard.server=localhost:8858",
        "-Dproject.name=sentinel-dashboard",
        "-Dsentinel.dashboard.auth.username=feng",
        "-Dsentinel.dashboard.auth.password=feng",
        "-jar",
        "app.jar"
    ]
    restart: always
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    depends_on:
      - nacos
  gateway:
    image: registry.cn-hangzhou.aliyuncs.com/f-boot/gateway:1.0.0
    ports:
      - "8000:8000"
    depends_on:
      - sentinel
      - redis
    networks:
      - feng
    restart: always
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    env_file:
      - ./cloud_nacos.env
  sys:
    image: registry.cn-hangzhou.aliyuncs.com/f-boot/sys-service:1.0.0
    ports:
      - "18080"
    depends_on:
      - sentinel
      - redis
    networks:
      - feng
    restart: always
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    env_file:
      - ./cloud_nacos.env
  message:
    image: registry.cn-hangzhou.aliyuncs.com/f-boot/message-service:1.0.0
    ports:
      - "18081"
    depends_on:
      - sentinel
      - redis
    networks:
      - feng
    restart: always
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    env_file:
      - ./cloud_nacos.env
  file:
    image: registry.cn-hangzhou.aliyuncs.com/f-boot/file-service:1.0.0
    ports:
      - "18082"
    depends_on:
      - sentinel
      - redis
      - minio
    networks:
      - feng
    restart: always
    volumes:
      - /etc/timezone:/etc/timezone
      - /etc/localtime:/etc/localtime
    env_file:
      - ./cloud_nacos.env
networks:
  feng:

运行docker-compose

docker-compose -f ./docker-compose.yml up -d
---结果
Creating network "docker_feng" with the default driver
Creating docker_minio_1    ... done
Creating docker_nacos_1 ... done
Creating docker_redis_1 ... done
Creating docker_sentinel_1 ... done
Creating docker_file_1     ... done
Creating docker_message_1  ... done
Creating docker_sys_1      ... done
Creating docker_gateway_1  ... done

检测是否运行成功

  • 分别查看项目启动日志,使用命令docker-compose logs
 docker-compose logs -f gateway
  • 使用docker-compose ps查看
      Name                     Command               State                              Ports
------------------------------------------------------------------------------------------------------------------------
docker_file_1       java -server -Djava.securi ...   Up      0.0.0.0:49153->18082/tcp,:::49153->18082/tcp
docker_gateway_1    java -server -Djava.securi ...   Up      0.0.0.0:8000->8000/tcp,:::8000->8000/tcp
docker_message_1    java -server -Djava.securi ...   Up      0.0.0.0:49154->18081/tcp,:::49154->18081/tcp
docker_minio_1      /usr/bin/docker-entrypoint ...   Up      0.0.0.0:9000->9000/tcp,:::9000->9000/tcp,
                                                             0.0.0.0:9001->9001/tcp,:::9001->9001/tcp
docker_nacos_1      bin/docker-startup.sh            Up      0.0.0.0:8848->8848/tcp,:::8848->8848/tcp
docker_redis_1      redis-server /usr/local/et ...   Up      0.0.0.0:16379->6379/tcp,:::16379->6379/tcp
docker_sentinel_1   java -server -Djava.securi ...   Up      8719/tcp, 0.0.0.0:8858->8858/tcp,:::8858->8858/tcp
docker_sys_1        java -server -Djava.securi ...   Up      0.0.0.0:49155->18080/tcp,:::49155->18080/tcp
  • 浏览器测试访问http://{ip}:8000/

参考项目