• 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镜像自动完成下载。
    在这里插入图片描述

  • 相关阅读:
    接口性能调优的方法,这有11种,你知道几种?
    2022牛客暑期多校训练营6(ABGIJM)
    洛谷刷题(普及-):车站、拼数、Cantor 表、回文数、进制转换
    android实时投屏软件QtScrcpy
    训练集、验证集、测试集的作用和意义
    k8s--基础--6.1--环境搭建--多master高可用集群
    Linux虚拟机共享文件夹不显示问题终极解决方法
    Mysql事务+redo日志+锁分类+隔离级别+mvcc
    Flowable 之任务分配
    elasticsearch-head安装及详细配置
  • 原文地址:https://blog.csdn.net/qq_36515317/article/details/128176462