Docker-Compose

本文介绍了如何使用Docker Compose部署微服务集群,包括编写docker-compose.yml文件、启动服务、权限调整及常见错误解决方案。重点讲解了如何配置MySQL、Nacos等服务,并分享了部署步骤和注意事项。

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 来部署

注意:

  1. 通过docker logs -f xxx及时查看日志信息

  2. 错误1:查看微服务报错failed to req API:/nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried:

    解决方案:先重启nacos,再重启防火墙systemctl restart firewalld.service

  3. 错误2:查看mysql日志permission denied

    原因分析:linux默认禁止docker-compose挂载数据卷,所以需要给予权限

    解决方案:修改文件vim /etc/sysconfig/selinux,将SELINUX=enforcing 改为 SELINUX=disabled,重启虚拟机

  4. 错误3: Access denied for user 'root'@'172.17.0.3' (using password: YES)

    解决方案:mysql密码错误,目前课前资料给的mysql密码设定的是123

  5. 错误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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值