只需三步:1.docker内部安装jdk
执行命令:docker pull openjdk:8u92-jdk-alpine,推荐使用--alpine因为他只有50MB左右,可以根据这个地址找到各种镜像Docker Hub
2.编写docker-compose应用文件
执行vi docker-compose-env.yml
version: '3.8'
services:
mysql:
image: mysql:5.7
container_name: mysql
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #覆盖容器启动后默认执行的启动mysql命令
restart: always #关机或者重启机器时,docker同时重启容器,一般mysql服务可以这么设置,保持服务一直都在
environment:
MYSQL_ROOT_PASSWORD: root #设置root帐号密码
ports:
- 3306:3306
volumes:
- /mydata/mysql/data/db:/var/lib/mysql #数据文件挂载
- /mydata/mysql/data/conf:/etc/mysql/conf.d #配置文件挂载
- /mydata/mysql/log:/var/log/mysql #日志文件挂载
redis:
image: redis:5.0
container_name: redis
restart: always
command: redis-server --requirepass 123456 --appendonly yes
volumes:
- /mydata/redis/data:/data #数据文件挂载
ports:
- 6379:6379
nacos:
image: nacos/nacos-server:2.0.3
container_name: nacos
restart: always
environment:
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql
volumes:
- /mydata/nacos/logs/:/home/nacos/logs
- /mydata/nacos/conf/application.properties:/home/nacos/conf/application.properties
ports:
- "8848:8848"
sentinel:
image: bladex/sentinel-dashboard:1.8.0
container_name: sentinel-dashboard
command: nohup java -Dserver.port=9207 -Dcsp.sentinel.dashboard.server=localhost:9207 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar &
restart: always
mqnamesrv:
image: apache/rocketmq:4.9.3
container_name: mqnamesrv
restart: always
ports:
- 9876:9876
volumes:
- /mydata/rocketmq/logs:/home/rocketmq/rocketmq-4.9.3/logs
- /mydata/rocketmq/store:/home/rocketmq/rocketmq-4.9.3/store
command: sh mqnamesrv
environment:
JAVA_OPT: -server -Xms256m -Xmx256m
broker:
image: apache/rocketmq:4.9.3
container_name: rmqbroker
restart: always
privileged: true
ports:
- 10909:10909
- 10911:10911
- 10912:10912
volumes:
- /mydata/rocketmq/logs:/home/rocketmq/rocketmq-4.9.3/logs
- /mydata/rocketmq/store:/home/rocketmq/rocketmq-4.9.3/store
- /mydata/rocketmq/conf/broker.conf:/home/rocketmq/rocketmq-4.9.3/conf/broker.conf
command: sh mqbroker -n mqnamesrv:9876 -c /home/rocketmq/rocketmq-4.9.3/conf/broker.conf
environment:
JAVA_OPT_EXT: -server -Xms256m -Xmx256m -Xmn128m
depends_on:
- mqnamesrv
console:
image: styletang/rocketmq-console-ng
container_name: rocketmq-console-ng
restart: always
ports:
- 8076:8080
depends_on:
- mqnamesrv
environment:
- JAVA_OPTS= -Dlogging.level.root=info -Drocketmq.namesrv.addr=mqnamesrv:9876
- Dcom.rocketmq.sendMessageWithVIPChannel=false
有两个配置文件需要挂载一个是nacos的application.properties
nacos的配置文件需要改的地方
另外一个是rocketmq的broker.conf
执行命令:docker-compose -f docker-compose-env.yml up -d
3.编写docker-compose服务文件
将我们的服务ruoyi-mq的配置文件xxxx.yml连接地址修改为容器名(来源于docker-compose-application的external_links)
# Spring
spring:
application:
# 应用名称
name: ruoyi-mq
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: nacos:8848
namespace: 0c17cef6-42e0-469b-a5f9-
group: dev
config:
# 配置中心地址
server-addr: nacos:8848
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
namespace: 0c17cef6-42e0-469b-a5f9-6b206c
group: dev
编写Dockerfile文件
# 基于哪个镜像
From openjdk:8u92-jdk-alpine
# 复制文件到容器
ADD ruoyi-mq.jar /app.jar
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=dev"]
执行:vi docker-compose-application.yml
version: '3.8'
services:
ruoyi-mq:
image: ruoyi-mq:0.0.1 #指定镜像名称
build: ./zdxy-mq #指定Dockfile所在路径
container_name: ruoyi-mq #指定启动容器名称
ports:
- 9206:9206
volumes:
- /etc/localtime:/etc/localtime:ro #同步宿主机与容器时间,ro代表readonly只读
environment:
- JAVA_TOOL_OPTIONS=-Xmx256m -Xms128m -XX:MaxMetaspaceSize=256m
external_links: #访问不在同一个compose文件管理的服务需要用external_links,前提是这些服务都在同一个网络下才能正常访问
- nacos:nacos #可以用nacos这个域名访问nacos服务
- mysql:db #可以用db这个域名访问mysql服务
- redis:redis
- mqnamesrv:mqnamesrv
- broker:broker
执行:docker-compose -f docker-compose-application.yml up -d
我给大家看一下我的文件目录结构
注意:安装应用时会出现启动问题一般是因为volumes格式:挂载目录:docker文件目录
挂载目录文件是你准备好的文件或者目录一定要存在,docker文件目录一定也要存在,这个时候就有人说了,我都还没启动怎么知道有没有,我想说的是相同应用不同的版本docker的文件目录也可能不一样,如果有需要要先用docker安装一下,提前预知路径。