# sim

需求场景

现在我需要用 docker compose 来部署

  • mysql8(3306 端口)username=root,password=123456
  • redis6(无密码,6379端口)、
  • rabbitmq v.3.12.6(5672端口 password: guest,username:guest)、
  • nacos2.2.0(8848端口);

还有4个本地的springboot服务(名称分别为:

  • yuoj-backend-user-service 8102端口、
  • yuoj-backend-question-service 8103端口、
  • yuoj-backend-judge-service8104端口、
  • yuoj-backend-gateway8101端口),每个服务本地目录都有一个Dockerfile,请帮我自动生成dockercompose的yml配置文件,要求这些服务网络能够连通

梳理服务部署表格

服务名称 英文名 端口号 版本号 服务类别
数据库 mysql 3306 v8 环境依赖
缓存 redis 63791 v6 环境依赖
消息队列 rabbitmq 5672,15672 v3.12.6 环境依赖
注册中心 nacos 8848 v2.2.0 环境依赖
网关服务 gateway 8101 java8 业务服务
用户服务 user-service 8102 java8 业务服务
  • docker-compose
version: '3.3'

services:
  dev-nginx: # 服务的名称
    image: nginx:latest # 指定了服务所使用的 Docker 镜像
    env_file: .env
    ports: # 指定了服务的端口映射关系
      - "${NGINX_PORT}:83"
    volumes: # 指定了服务的卷挂载配置
      - ${NGINX_VOLUMES_HTML}:/usr/share/nginx/html
      - ${NGINX_VOLUMES_CONFD}:/etc/nginx/conf.d
      - ${NGINX_VOLUMES_CONF}:/etc/nginx/nginx.conf

  # --------> MY-APP-Server <--------
  my-app:
    build:
      context: ../
      dockerfile: ./.docker/node.dockerfile
    image: my-app
    container_name: my-app
    restart: unless-stopped
    working_dir: /usr/src
    env_file: .env
    ports:
      - ${SERVER_PORT}:4000
    volumes:
      - my-app-volume:/usr
    networks:
      - my-network
    stdin_open: true
    tty: true
  # --------> MY-APP-Server <--------
  rabbitmq:
    image: 'rabbitmq:3.12.6-management'
    container_name: rabbitmq_service
    ports:
      - '5672:5672'
      - '15672:15672' # 管理界面端口
    environment:
      RABBITMQ_DEFAULT_USER: 'guest'
      RABBITMQ_DEFAULT_PASS: 'guest'
  # --------> MY-APP-Server <--------
  nacos:
    image: 'nacos/nacos-server:2.2.0'
    container_name: nacos_service
    ports:
      - '8848:8848'
    environment:
      - MODE=standalone

  # --------> MY-APP-MONGODB <--------
  my-mongo:
    image: mongo:latest
    container_name: my-mongo
    env_file:
      - .env
    environment:
      DB_PASS: ${DB_PASS}
      DB_USER: ${DB_USER}
    restart: always
    networks:
      - my-network
    ports:
      - ${DB_PORT}:27017
    volumes:
      - my-mongodb-volume:/data/db


  # --------> MY-APP-MYSQL <--------
  my-mysql:
    # image: 'mysql:8'
    image: mysql:latest
    container_name: mysql_service
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - '${MYSQL_DB_PORT}:3306'
    volumes:
      - my-mysql-volume:/var/lib/mysql
    networks:
      - my-network
    env_file:
      - .env
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE} # 可选,初始化数据库名
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}


  # --------> MY-APP-REDIS <--------
  my-redis:
    # image: 'redis:6'
    image: "bitnami/redis:latest"
    container_name: my-redis
    user: "root"
    environment:
      ALLOW_EMPTY_PASSWORD: "yes"
    networks:
      - my-network
    env_file:
      - .env
    ports:
      - ${REDIS_PORT}:6379
    restart: unless-stopped
    volumes:
      - ${REDIS_PASS}/my-redis:/bitnami/redis

networks:
  my-network:
    external:
      name: my-network

volumes:
  my-app-volume:
  my-mongodb-volume:
  my-mysql-volume:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117