SpringCloud学习十二(Docker-Compose微服务集群部署和Docker镜像仓库)

SpringCloud学习十二(Docker-Compose微服务集群部署和Docker镜像仓库)

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!

1、初识Docker-Compose

之前的配置mysql的配置【作为下面代码的参考】

docker run \
  --name mysql \	
  -e MYSQL_ROOT_PASSWORD=1234 \
  -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \
  -v /tmp/mysql/data:/var/lib/mysql \
  -p 3306:3306 \
  -d \
  mysql:latest

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:

version: "3.8"
 services:
  mysql:
    image: mysql:5.7.25
    environment:
     MYSQL_ROOT_PASSWORD: 123 
    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的详细语法参考官网:https://docs.docker.com/compose/compose-file/

其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。

下载和上传docker-compose都在上两篇的安装中有说到

2、部署微服务集群

需求:将之前学习的cloud-demo微服务集群利用DockerCompose部署

实现思路

① 查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件

version: "3.2"

services:
  nacos:
    image: nacos/nacos-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: 1234
    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:latest:镜像版本是mysql:latest
    • environment:环境变量
      • MYSQL_ROOT_PASSWORD: 1234:设置数据库root账户的密码为1234
    • volumes:数据卷挂载,这里挂载了mysql的data、conf目录,其中有我提前准备好的数据
  • userserviceorderservicegateway:都是基于Dockerfile临时构建的

② 修改自己的cloud-demo项目,将数据库、nacos地址都命名为docker-compose中的服务名

mysql、nacos为部署的服务名

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服务地址

③ 使用maven打包工具,将项目中的每个微服务都打包为app.jar

接下来需要将我们的每个微服务都打包。因为之前查看到Dockerfile中的jar包名称都是app.jar,因此我们的每个微服务都需要用这个名称。

可以通过修改pom.xml中的打包名称来实现,每个微服务都需要修改:

<build>
  <!-- 服务打包的最终名称 -->
  <finalName>app</finalName>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

打包统一在父工厂中使用打包工具,会默认的将所有子过程一并打包的,如果是一个一个的打包就会出现错误

④ 将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中

⑤ 将cloud-demo上传至虚拟机,利用docker-compose up -d 来部署

先进入到当前上传的文件夹,然后执行命令

# 构建部署项目,后台运行
docker-compose up -d
# 查看镜像
docker ps
# 查看运行的日志
docker-compose logs -f

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IRWeRvDi-1653900062425)(images/docker/22、构建部署.png)]

第一次构建会比较慢,需要联网下载相关的依赖

如果在查看日志的时候出现报错,可能是以为启动顺序的问题导致的,可以使用如下语句完成重启

docker-compose restart gateway userservice orderservice

项目部署发布之后就可以使用虚拟机的ip拼接网关来进行访问数据了

Docker镜像仓库

搭建查看上连篇的安装

镜像仓库推送前需要把仓库地址配置搭配docker访问的daemon.json文件中,被docker信任

1、搭建私有镜像仓库

构建

docker-compose up -d

查看日志

docker-compose logs -f

访问仓库地址【ip地址:8080】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SrTjFpiz-1653900062426)(images/docker/24、私有仓库.png)]

2、向镜像仓库推送镜像

推送镜像到私有镜像服务必须先tag,步骤如下:

① 重新tag本地镜像,名称前缀为私有仓库的IP地址:IP地址:8080/【必须的】

docker tag nginx:latest 192.168.150.101:8080/nginx:1.0 

② 推送镜像

docker push 192.168.150.101:8080/nginx:1.0 

③ 拉取镜像

docker pull 192.168.150.101:8080/nginx:1.0 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2m8YVmA-1653900062426)(images/docker/image-20220530163314218.png)]

猜你喜欢

转载自blog.csdn.net/baidu_39378193/article/details/125049476
今日推荐