• DockerCompose安装、使用 及 微服务部署实操


    1 什么是DockerCompose

    DockerCompose是基于Compose文件帮助我们快速的部署分布式应用。
    解决容器需手动一个个创建和运行的问题!
    在这里插入图片描述

    Compose文件本质上是一个文本文件,其通过指令定义集群中的每个容器如何运行。
    我们可以将其看做是将多个docker run命令写到一个文件,只是语法上稍有差异。
    DockerCompose的详细语法参考官网
    示例:

    version: "3.8"
     services:
      mysql:
        image: mysql:5.7
        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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    如上所示,其中包含两个容器:

    1. mysql:基于mysql:5.7镜像构建的容器,并且挂载了两个目录
    2. web:基于docker build临时构建的镜像容器,映射端口为8090

    2 安装DockerCompose

    2.1 下载并安装

    # linux下安装命令
    curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
    • 1
    • 2

    注:下载有些慢,需耐心等一等

    2.2.修改文件权限

    # 修改权限
    chmod +x /usr/local/bin/docker-compose
    
    • 1
    • 2

    修改权限后效果图:
    在这里插入图片描述

    2.3Base自动补全命令:

    # 补全命令
    curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    
    • 1
    • 2

    如果这里出现错误,需要修改自己的hosts文件:

    echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
    
    • 1

    3 部署微服务集群

    步骤如下:

    3.1 新建cloud-demo目录,进入该目录创建文件: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"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    可以看到,其中包含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临时构建的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    3.2 修改自己的项目,将数据库、nacos地址等均命名为docker-compose中的服务名

    因为微服务将来要部署为docker容器,而容器之间互联不是通过IP地址,而是通过容器名。这里我们将order-service、user-service、gateway服务的配置文件中的mysql、nacos地址都修改为基于容器名(容器名为services的下一级所定义)的访问。

    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服务地址
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    3.3 使用maven打包工具,将项目中的每个微服务都打包为app.jar。

    为了方便我们将Dockerfile中的jar包名称均命名为app.jar,因此我们的每个微服务都需要用这个名称。

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

    
      
      app
      
        
          org.springframework.boot
          spring-boot-maven-plugin
        
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.4 将打包好的app.jar拷贝到cloud-demo中的每一个对应的子目录中,在子目录中创建文件:Dockerfile并写入下列内容:
    FROM java:8-alpine
    COPY ./app.jar /tmp/app.jar
    ENTRYPOINT java -jar /tmp/app.jar
    
    • 1
    • 2
    • 3
    3.5 部署

    将cloud-demo上传至服务器任意目录下,进入cloud-demo目录,然后运行下面的命令

    docker-compose up -d
    
    • 1

    由图可见,执行命令后,nacos\mysql镜像自动完成下载。
    在这里插入图片描述

  • 相关阅读:
    基于JAVA的学校图书管理系统(Swing+GUI)
    Java单例模式之总有你想不到的知识
    Selenium原理深度解析
    Unity之ShaderGraph如何实现光边溶解
    定时器的理论和使用
    29.Python面向对象(二)【类:主要讲初始化方法__init__,垃圾回收,继承&多继承,方法重写,super()函数】
    计算机毕设 SpringBoot+Vue幼儿园管理系统 幼儿园信息管理系统 智慧幼儿园管理系统Java Vue MySQL数据库 远程调试 代码讲解
    11. Jvm运行机制
    MySQL半同步复制源码解析
    R语言 |一些常用的数据整理的技巧(二)
  • 原文地址:https://blog.csdn.net/qq_36515317/article/details/128176462