1.初识DockerCompose
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:
version: "3.8"
services:
mysql:
image: mysql:5.7.25 # mysql镜像名称
environment:
MYSQL_ROOT_PASSWORD: 123 #mysql登入密码
volumes:
- "/tmp/mysql/data:/var/lib/mysql" #数据卷挂载
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf" #数据卷挂载
web:
build: .
ports:
- "8090:8090" #端口映射
上面的Compose文件就描述一个项目,其中包含两个容器:
- mysql:一个基于
mysql:5.7.25镜像构建的容器,并且挂载了两个目录 - web:一个基于
docker build临时构建的镜像容器,映射端口时8090
其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。
2.部署微服务集群
实现思路:
① 编写一个项目文件夹,里面写好docker-compose文件

docker-compose.yml文件内容如下:
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "$PWD/mysql/data:/var/lib/mysql"
- "$PWD/mysql/conf:/etc/mysql/conf.d/"
userservice:
build: ./user-service
orderservice:
build: ./order-service
gateway:
build: ./gateway
ports:
- "10010:10010"
=============================================
可以看到,其中包含5个service服务:
nacos:作为注册中心和配置中心
image: nacos/nacos-server: 基于nacos/nacos-server镜像构建
environment`:环境变量
MODE: standalone:单点模式启动
ports:端口映射,这里暴露了8848端口
mysql:数据库
image: mysql:5.7.25:镜像版本是mysql:5.7.25
environment`:环境变量
MYSQL_ROOT_PASSWORD: 123:设置数据库root账户的密码为123
volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
userservice、orderservice、gateway:都是基于Dockerfile临时构建的
② 启动nacos微服务
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server:1.4.1
注意: nacos微服务启动之后一定要重启自身和网关,否则在后续微服务会报错“failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried:”
命令如下:
docker restart nacos
systemctl restart firewalld.service
③ linux默认不给docker-compose挂载的数据卷读写的权限,需要关闭selinux,mysql的数据卷才可以挂载成功
vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
重启虚拟机
④ 通过docker inspect查看容器的ip,修改自己的cloud-demo项目,将子项目nacos地址改为容器ip
⑤ 使用maven打包工具,将项目中的每个微服务都打包为app.jar
⑥ 将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中
⑦ 将cloud-demo上传至虚拟机,利用 docker-compose up -d 来部署
注意:
-
通过
docker logs -f xxx及时查看日志信息 -
错误1:查看微服务报错
failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried:解决方案:先重启nacos,再重启防火墙
systemctl restart firewalld.service, -
错误2:查看mysql日志
permission denied原因分析:linux默认禁止docker-compose挂载数据卷,所以需要给予权限
解决方案:修改文件
vim /etc/sysconfig/selinux,将SELINUX=enforcing 改为 SELINUX=disabled,重启虚拟机 -
错误3:
Access denied for user 'root'@'172.17.0.3' (using password: YES)解决方案:mysql密码错误,目前课前资料给的mysql密码设定的是123
-
错误4:
Unable to start docker Container from docker-compose “unknown flag: iidfile”解决方案:docker-compose版本太高了,需要降下来
Dockerfile文件:
FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar
application.yml文件内容:
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
打包
<build>
<!-- 服务打包的最终名称 -->
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
部署
进入cloud-demo目录,然后运行下面的命令:
docker-compose up -d
本文介绍了如何使用Docker Compose部署微服务集群,包括编写docker-compose.yml文件、启动服务、权限调整及常见错误解决方案。重点讲解了如何配置MySQL、Nacos等服务,并分享了部署步骤和注意事项。

1572

被折叠的 条评论
为什么被折叠?



