Docker5️⃣编排(Compose)

  • docker run:创建一个容器并运行。

  • 微服务项目中的组件非常多,手动逐个创建容器的操作十分繁琐。

    image-20210731180921742

1、Docker Compose

Docker Compose:编排多容器分布式部署的工具。

  • 基于 Compose 文件,快速部署分布式应用。

  • Compose 文件通过指令,定义集群中的每个容器的创建和运行。

    (相当于多个 docker run 操作的合集)

    version: "版本"
    services:
      容器1:
    	配置
      容器2:
    	配置
      ...
    

示例:部署一个 web 应用,包括 MySQL 和 web 容器。

  • mysql:基于 mysql:5.7.25 镜像构建的容器,挂载了 data 目录

  • web:基于 docker build 临时构建的镜像容器,映射端口 8090

    version: "3.8"
    services:
      mysql:
        image: mysql:5.7.25
        environment:
         MYSQL_ROOT_PASSWORD: 123 
        volumes:
         - "/tmp/mysql/data:/var/lib/mysql"
      web:
        build: .
        ports:
         - "8090:8090"
    

2、安装

  1. 下载:切换到 /usr/local/bin/ 目录下

    curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    
  2. 文件权限:增加可执行权限

    chmod +x /usr/local/bin/docker-compose
    
  3. 设置:Base 自动补全命令

    # 修改hosts文件
    echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
    # 补全命令
    curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    

3、部署微服务集群

创建一个文件夹 cloud-demo 用于部署微服务集群。

  1. 编写文件

  2. 修改微服务配置

  3. 将微服务应用打 jar 包,拷贝到 cloud-demo 对应子目录

  4. 将 cloud-demo 上传到服务器,部署

3.1、文件

3.1.1、compose 文件

包含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目录,其中有我提前准备好的数据
  • userserviceorderservicegateway:都是基于Dockerfile临时构建的

    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"
    

3.1.2、Dockerfile 文件

FROM java:8-alpine
COPY ./app.jar /tmp/app.jar
ENTRYPOINT java -jar /tmp/app.jar

3.2、微服务配置

docker 容器之间通过容器名互联,而不是通过 IP 地址。

将 order-service、user-service、gateway 服务的 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服务地址

3.3、jar 包

打包

微服务应用名称,需要与 Dockerfile 中的 jar 包名称对应。

  1. 修改 pom.xml 中的打包名称:

    <build>
      <!-- 服务打包的最终名称 -->
      <finalName>app</finalName>
      <plugins>
    	...
      </plugins>
    </build>
    
  2. 打包:Maven clean,Maven package

  3. 拷贝:每个微服务的 app.jar 放到与服务名称对应的子目录。

3.4、部署

  1. 将 cloud-demo 文件夹上传到服务器的任意目录。

  2. 切换到 cloud-demo 文件夹,部署

    docker-compose up -d
    
posted @ 2022-06-01 15:45  Jaywee  阅读(86)  评论(0编辑  收藏  举报

👇