使用docker-compose编排微服务

上篇 使用Maven构建微服务的Docker镜像 写了如何构建微服务的镜像及运行镜像。但往往我们整个微服务架构中会有几十个甚至几百个微服务,我们不可能都使用手动去启停,那样效率很低,维护量也很大。

因此我们需要一个自动化的工具帮助我们管理容器。本篇使用的是docker-compose

安装

Compose 支持 Linux、macOS、Windows 10 三大平台.

Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,甚至能够直接在 Docker 容器中运行。

我是Centos 7因此我使用的是二进制包的形式安装。使用如下命令进行安装:

$ sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

安装完成后检查docker-compose版本OK就好了

[root@HJWDEV ~]# docker-compose -v
docker-compose version 1.23.1, build b02f1306

编排微服务

使用docker-compose编排微服务大致步骤如下:

1、编写各服务的Dockerfile

2、编写docker-compose.yml 定义组成应用程序的服务及各服务的依赖,网络配置等

3、运行docker-compose up命令,启动并运行整个项目

本例项目源码使用之前做过的项目,把Eureka,provider-user,consumer-movie进行编排。源码查看:microservice-discovery-eurekamicroservice-simple-provider-usermicroservice-simple-consumer-movie

目录结构如下:

├─.idea
│  ├─inspectionProfiles
│  └─libraries
├─microservice-discovery-eureka
│  ├─src
│  │  └─main
│  │      ├─java
│  │      │  └─com
│  │      │      └─hjwzyy
│  │      │          └─META-INF
│  │      └─resources
|  └─Dockerfile
|  └─pom.xml
├─microservice-simple-consumer-movie
│  ├─src
│  │  └─main
│  │      ├─java
│  │      │  └─com
│  │      │      └─hjwzyy
│  │      │          ├─contorllers
│  │      │          └─pojo
│  │      └─resources
│  │          ├─static
│  │          └─templates
|  └─Dockerfile
|  └─pom.xml
├─microservice-simple-provider-user
│  ├─src
│  │  └─main
│  │      ├─java
│  │      │  └─com
│  │      │      └─hjwzyy
│  │      │          ├─contorllers
│  │      │          ├─dao
│  │      │          └─pojo
│  │      └─resources
|  └─Dockerfile
|  └─pom.xml
├─ docker-compose.yml
├─ pom.xml

Dockerfile

这三个微服务的Dockerfile文件如何编写可以参考前面的博客:使用Maven构建微服务的Docker镜像 这里不再赘述。

docker-compose.yml

docker-compose.yml 文件的编写是关键。

version: '2'			# docker-compose 版本
services:
    eureka:				# 服务名
        build:
          context: ./microservice-discovery-eureka								# Dockerfile 文件所在路径
          dockerfile: Dockerfile											   # Dockerfile 文件名
          args:
            JAR_FILE: target/microservice-discovery-eureka-0.0.1-SNAPSHOT.jar	   # 构建参数传递
        ports:																  # 开放端口
          - "8761:8761"
    microservice-simple-provider-user:
        build:
          context: ./microservice-simple-provider-user
          dockerfile: Dockerfile
          args:
            JAR_FILE: target/microservice-simple-provider-user-0.0.1-SNAPSHOT.jar
        ports:
          - "8010:8010"
    microservice-simple-consumer-movie:
        build:
          context: ./microservice-simple-consumer-movie
          dockerfile: Dockerfile
          args:
            JAR_FILE: target/microservice-simple-consumer-movie-0.0.1-SNAPSHOT.jar
        ports:
          - "8011:8011"
        depends_on:																# 依赖
          - microservice-simple-provider-user

以上是使用最简单的方式进行配置。

build : 使用 build 并指定Dockerfile ,docker-compose 会根据Dockerfile 构建镜像。这里使用了args 传入了Dockerfile 构建镜像时需要的参数,前面通过 maven 构建镜像时,这个参数是从pom文件中传入的。这里的构建不通过 maven ,因此需要单独在docker-compose.yml 中传入args,否则会由于缺少参数而构建镜像失败。

depends_on : 表示这个服务依赖于某个服务,如microservice-simple-consumer-movie 是依赖 microservice-simple-provider-user 的,provider 启动了,consumer 才能访问到数据。因此如果配置了依赖的服务,docker-compose 会先启动被依赖的服务。

启动

上面的步骤做完之后,就可以启动Docker-compse了。只需要简单的一条命令:

docker-compose up

docker-compose 会根据docker-compose.yml 配置的内容进行镜像的构建并启动。

docker-compose 配置

Docker-compose 的具体用法 及 yml 文件的具体配置可以参考 : https://docker_practice.gitee.io/compose/compose_file.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker Compose和Kubernetes(简称k8s)都是容器编排工具,但它们有以下区别: 1. 功能复杂度不同:Kubernetes是一种强大的容器编排工具,它提供了高可用性、自动伸缩、服务发现、负载均衡、存储管理等丰富的功能,可以部署大规模的容器化应用程序。而Docker Compose则更加简单,它只能用于在单个主机上定义和运行多个容器应用。 2. 部署对象不同:Docker Compose只能部署单个主机上的多个容器应用,而Kubernetes可以部署跨多个主机的容器应用,实现更大规模的应用程序。 3. 部署方式不同:Docker Compose使用的是“声明式”方式定义和运行多个容器应用,它通过编写docker-compose.yml文件来定义容器应用之间的依赖关系和启动顺序。而Kubernetes则采用“控制器”和“副本集”来管理容器应用,可以自动监控和维护应用程序的状态。 4. 社区支持不同:Kubernetes是由Google开源并维护的,得到了广泛的社区支持和贡献,其生态系统也相对成熟。而Docker Compose则由Docker公司维护,社区支持相对较少,但因为其简单易用而被广泛使用。 总之,Docker Compose适用于简单的单机容器应用场景,而Kubernetes则适用于复杂的分布式容器应用场景。 ### 回答2: Docker Compose和Kubernetes(简称为K8s)是用于管理容器化应用程序的工具。尽管它们都用于容器编排,但它们在设计目标、架构和使用方式上有一些区别。 Docker Compose是一个用于定义和运行多个Docker容器的工具。它通过一个YAML文件来描述应用程序的服务、网络和存储等组件。使用Docker Compose可以方便地在单个主机上定义和处理容器之间的关系。它适用于本地开发环境和小型应用场景,简化了本地开发和测试过程。然而,Docker Compose对于处理大型分布式系统以及容器的自动伸缩和动态调度方面的支持相对较弱。 Kubernetes是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。它使用类似于Docker Compose的YAML文件来定义应用程序的组件,但其范围更广,可以管理多个主机上的容器。Kubernetes具有强大的容器编排和管理功能,可以自动分配资源、实现服务发现和负载均衡,保证应用程序的高可用性和容错性。它适用于大规模、复杂的微服务架构和容器化应用程序。 总结而言,Docker Compose适合本地开发和简单应用场景,而Kubernetes适合大规模部署和复杂应用场景。Docker Compose更加轻量简单,而Kubernetes更强大而复杂,具有更多的自动化和可扩展性。选择哪个工具取决于应用的规模和要求。有时候,这两个工具也可以结合使用使用Docker Compose来开发和测试,然后将其转换为Kubernetes部署。 ### 回答3: Docker Compose和Kubernetes(简称k8s)是两种不同的容器编排工具,用于管理和部署容器化应用程序。以下是它们之间的区别: 1. 范围和复杂性:Docker Compose是一个单主机编排工具,适用于小型和中型应用程序的单节点部署。它使用YAML文件定义应用程序服务和它们的配置,并通过命令行工具实现应用程序的构建和管理。相比之下,Kubernetes是一个集群管理系统,用于部署和管理多个容器化应用程序。它具有更高的可扩展性和容错性,并具备自我修复和自动伸缩的特性。 2. 网络和存储:Docker Compose提供了简便的网络和存储配置选项,适用于单主机部署。它使用Docker网络和卷来实现应用程序内的通信和持久化存储。而Kubernetes则提供了更高级的网络和存储功能,支持负载均衡、服务发现和动态卷分配等特性,适用于多主机集群环境。 3. 自动化和管理:Kubernetes具有更高级的自动化管理功能,包括自动故障恢复和自动扩展等特性。它可以根据容器的资源需求和负载情况进行自动伸缩,并自动重新启动失败的容器。而Docker Compose则需要手动管理应用程序的生命周期和故障恢复。 4. 生态系统和集成:Kubernetes作为一个完整的容器编排平台,拥有庞大的生态系统和广泛的集成支持。它具备与各种云提供商、监控工具、日志记录系统等集成的能力。对于需要在多云环境上部署应用程序的企业来说,Kubernetes是一个更加强大和灵活的解决方案。相比之下,Docker Compose的集成选项较少,更适用于简单的本地开发和测试环境。 综上所述,Docker Compose适用于单主机环境下的简单应用程序部署,而Kubernetes则适用于复杂的多主机集群环境,具备更高级的自动化和管理功能。选择使用哪个工具取决于应用程序的规模和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值