irpas技术客

Docker 一键部署 SpringBoot 后端API + MySQL + Redis + Nginx + RabbitMq 服务_Specif1c

irpas 1368

一、前言:

在开发中,频繁部署项目是日常。是不是已经厌倦了各种服务环境的配置?这里将使用 Docker 容器技术一键部署整个项目,只需编写 docker-compose.yml 和 Dockerfile 即可。Docker 你值得拥有!以下是博主自己编写的配置文件,可作参考。


二、前期准备:

1、已经打包成 jar 包的 SpringBoot 项目(假设是一个智慧校园APP的后端API服务) 2、一台装有docker的Linux服务器 (建议使用 Linux)


三、编写 Dockerfile

这里通过编写 webapi-Dockerfile 文件 (不要添加后缀名) 对 SpringBoot 项目构建一个镜像

#-------------- 构建一个 运行 后端API服务 的镜像 -------------- # 镜像仓库拉取一个基于 java8 的镜像 FROM daocloud.io/library/java:8 # 维护作者 LABEL maintainer = "specif1c" # 创建工作目录 RUN mkdir -p /usr/local/campus # 拷贝需要运行的jar包到镜像工作目录中 ADD ./campus-0.0.1-SNAPSHOT.jar /usr/local/campus/campus-0.0.1-SNAPSHOT.jar # 指定程序在容器中的工作环境 (springboot 项目将在容器中的指定目录下启动) WORKDIR /usr/local/campus # 需要暴露的端口 EXPOSE 2022 # 执行 shell 命令 ENTRYPOINT ["java","-jar","campus-0.0.1-SNAPSHOT.jar"]

镜像仓库推荐:https://hub.daocloud.io/


四、编写各个服务的 docker-compose.yml

文件名就叫 docker-compose.yml 无需更改。

以下为 Compose 文件的版本信息所对应的 Docker 版本


docker-compose.yml 文件格式: # 描述 compose 文件版本信息 version: '3' # 定义服务 services: xxxx: (比如以下的 webapi, ngnix等服务,哪个需要用到就写在这里)
1、webapi: # Java 后端API服务配置 webapi: # 基于 webapi-Dockerfile 构建镜像 build: context: . dockerfile: webapi-Dockerfile # 容器名称 container_name: campus-webapi-master # webapi-Dockerfile 构建的镜像 (这里的镜像路径可以自定义) image: xxx.io/campus-webapi:1.0.0 # 端口映射 ports: - 2022:2022 # 目录挂载 volumes: - ./docker_webapi/:/usr/local/campus/ # 环境变量 environment: # 堆内存初始值 - JAVA_OPTS=-Xmx256M # 生产环境运行(SpringBoot项目里面没有区分开发环境和生产环境,这里可以不写) - spring.profiles.active=pro # 设置服务器的默认时区 - TZ=Asia/Shanghai # docker 启动时,服务自启 restart: always # 容器依赖, 配置先启动选项 (填需要依赖的 services 的名字) depends_on: - nginx - mysql - redis - rabbitmq
2、Ngnix: # nginx 服务配置 nginx: container_name: campus-nginx-master # 这里的镜像路径不能自定义,必须是 hub.daocloud 仓库的镜像路径 (下面镜像同理) image: daocloud.io/library/nginx:latest # docker 启动时,服务自启 restart: always # 映射端口 ports: - 80:80 # 目录挂载 volumes: - ./docker_nginx/conf.d:/etc/nginx/conf.d - /tmp/logs:/var/log/nginx

注意此版本 ngnix 的 conf.d 文件夹下没有 default.conf, 所有访问 80 显示不了 Welcome to nginx!, 需要自己在挂载目录 ./docker_nginx/conf.d 加一个 default.conf, 可以到我这篇博客中去复制粘贴:https://blog.csdn.net/haduwi/article/details/115273263


3、MySQL: # MySQL 服务配置 mysql: container_name: campus-mysql-master image: daocloud.io/library/mysql:5.7 # 环境变量 environment: # 数据库名 MYSQL_DATABASE: campus # 数据库密码 MYSQL_ROOT_PASSWORD: xxxx TZ: Asia/Shanghai # 覆盖容器启动后默认执行的命令 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 ports: - 3306:3306 volumes: # 同步本地时间/ - /etc/localtime:/etc/localtime:ro - ./docker_mysql/conf:/etc/mysql/conf.d - ./docker_mysql/data:/var/lib/mysql # 将 ./init 映射到 mysql 容器的 /docker-entrypoint-initdb.d/ 目录,./init 里的sql脚本就会被自动执行了。 - ./init:/docker-entrypoint-initdb.d/ restart: always
4、Redis: # redis 服务配置 redis: container_name: campus-redis-master image: daocloud.io/library/redis:2.8.9 restart: always ports: - 6379:6379 volumes: - ./docker_redis/redis.conf:/usr/local/etc/redis/redis.conf:rw - ./docker_redis/data:/data:rw # 初始化设置密码, 开启AOF持久化 command: redis-server --requirepass xxxx --appendonly yes
5、rabbitmq: # rabbitmq 服务配置 rabbitmq: image: daocloud.io/library/rabbitmq:3.8-management ports: - 5672:5672 - 15672:15672 container_name: campus-rabbitmq-master environment: TZ: Asia/Shanghai # rabbitmq的初始用户名 RABBITMQ_DEFAULT_USER: xxxxx # rabbitmq的初始密码 RABBITMQ_DEFAULT_PASS: xxxxx volumes: - ./docker_rabbit/data:/var/lib/rabbitmq - ./docker_rabbit/log:/var/log/rabbitmq/log
五、上传项目压缩包至服务器

注意:springboot 项目打包之前,记得把 yml 配置文件里面连接中间件的host需要改成容器名, 比如连接 redis 如下:

campus-docker.zip 上传至 Linux 服务器根目录下即可: 解压命令:unzip campus-docker.zip , cd 进入解压后的目录:cd campus-docker , 确保文件没有少。


六、构建并启动服务

① 构建并启动服务命令

docker-compose up -d # 之前没使用过docker,由于需要联网下载对应镜像,构建过程会稍微慢一点,耐心等待~

② 查看服务运行状态

docker ps


以上说明服务全部正常运行,后端服务部署完成!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Docker #一键部署 #springboot #后端API #MySQL #redis