将基于spring boot的微服务部署到Docker
建议先看一下最后注意事项,因为部署时要修改源码配置信息再打包。
老师布置了大作业要把自己写的微服务部署一下,于是就有了这篇来记录我将微服务部署到docker上的流程。
本项目使用spring boot框架,MySQL5.7,nacos,并全部部署在Docker上。
1. 打包工程
因为使用的Maven,所以点一下Maven的package就可以很方便的将工程打包。我一共写了三个微服务,所以打包了三个jar包。按照习惯将打包好的jar包分别放到自己目录下的deploy文件夹中。
2. 制作Docker镜像
创建Dockerfile文件并将其放入jar包所在的文件夹中。
Dockerfile内容如下:
每个Dockerfile都大同小异。
完成后打开命令行,进入Dockerfile所在文件夹,输入 docker build -t 镜像名 .
后回车即可。记得命令最后还有一个“.”。
如此反复,将所有微服务都制作成docker镜像。
3. 建立docker network
因为该项目使用了MySQL数据库与nacos服务治理,所以当二者不在项目容器集群中时需要network搭一个“桥”来连接。
创建network命令: docker network create --driver bridge aliment-network
4. 编写docker-compose.yml文件
mysql-docker-compose.yml:
version: '3'
services:
mysql-5:
image: mysql:5.7
container_name: mysql-5
environment:
- "MYSQL_ROOT_PASSWORD=root"
ports:
- 3357:3306
networks:
default:
external:
name: aliment-network
docker-compose.yml:
version: '3'
services:
nacos-server:
image: nacos/nacos-server:1.4.2
container_name: nacos-server
environment:
MODE: standalone
ports:
- 8848:8848
food-up-down-msg:
image: food-up-down-msg
container_name: food-up-down-msg
ports:
- 8083:8083
depends_on:
- food-msg-management
- nacos-server
food-platform-management:
image: food-platform-management
container_name: food-platform-management
ports:
- 8082:8082
depends_on:
- nacos-server
food-msg-management:
image: food-msg-management
container_name: food-msg-management
ports:
- 8081:8081
depends_on:
- nacos-server
networks:
default:
external:
name: aliment-network
在这里我将mysql的端口映射为3357,实际的端口为3306.所有容器的network均为aliment-network。
5. 运行docker-compose
在docker-compose所在文件夹位置,命令行输入docker-compose.exe -f mysql-docker-compose.yml up -d
创建mysql容器。输入docker-compose.exe -f docker-compose.yml up -d
创建微服务容器集群。
到这里基本就完成了微服务部署到Docker的操作。
6. 注意事项
微服务配置连接nacos时记得将localhost换位nacos的容器名。因为此时nacos与微服务均在docker中,localhost是本地宿主机的地址,更换后才能连接到。
spring.cloud.nacos.config.server-addr=nacos-server:8848
同理,连接MySQL的配置也要从spring.datasource.url=jdbc:mysql://localhost:3357/
改为
spring.datasource.url=jdbc:mysql://mysql-5:3306/
不但localhost要改,端口号也要该,因为3357是对外界的端口映射,3306才是内界的端口号。