基于阿里云容器服务的微服务实践 - Part 2. Docker Compose

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/54968156 基于阿里云容器服务的微服务实践 - Part 2. Docker Compose作者:chszs,未经博主允许不得转载。
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/54968156

基于阿里云容器服务的微服务实践 - Part 2. Docker Compose

作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs

二、使用Compose定义微服务

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具,它允许在单个文件中定义多个容器应用以及这些应用所需的各种依赖,然后通过单个命令完成执行。Docker Compose在实际工作中非常有价值,随着Docker Compose的不断完善,有成为取代docker run命令启动Docker容器的趋势。使用Compose,开发者可以使用Compose文件配置应用程序的服务。然后,使用单个命令,从配置中创建和启动所有服务。

Docker Compose非常适用于开发,测试和临时环境,以及CI工作流。它的主要特征如下:

  • 单个主机上的多个隔离环境
  • 创建容器时保留卷数据
  • 仅重新创建已发生变更的容器
  • 变量和在环境之间移动组件

Docker Compose使用项目名称来相互隔离环境。开发者可以在多个不同的上下文中使用此项目名称:

  • 在开发主机上,创建单个环境的多个副本
  • 在CI服务器上,为了使构建不会相互干扰,可以将项目名称设置为唯一的内部版本号
  • 在共享主机或开发主机上,可以防止不同的项目使用了相同的服务名所造成的相互干扰

使用Docker Compose基本上有三个步骤:

  1. 定义应用程序的环境Dockerfile,使得它可以在任何地方复制。
  2. 定义组成应用程序的服务docker-compose.yml,以便它们可以在一个隔离的环境中一起运行。
  3. 最后,运行docker-compose up,将启动并运行整个应用程序。

Docker 1.13版引入了v3版的Docker Compose,详见:
https://docs.docker.com/compose/compose-file/#version-3

此版本的改动很少,主要的区别在于引入了deploy属性。Deploy属性允许指定容器的副本、回滚更新、以及重启策略。

本文开发的微服务将会启动一个WildFly应用服务器,WildFly服务器上预部署了一个JavaEE应用,此JavaEE应用可以与Couchbase数据库服务器进行通信,完成应用数据的增删改查等操作。下面先安装Compose。

要安装Compose,步骤如下:

  1. 安装Docker Toolbox。因为Docker Toolbox包含了Docker引擎和Compose,因此对于Mac系统或Windows系统的用户来说,安装Compose只需一步,下面的步骤忽略。
  2. 对于Linux用户来说,先安装Docker引擎
  3. 去Compose的GitHub主页下载发行包,见:https://github.com/docker/compose/releases

    $ curl -L
    https://github.com/docker/compose/releases/download/1.10.0/docker-compose-(unames)(uname -m)” -o /usr/local/bin/docker-compose

  4. 为其赋予可执行权限

    $ chmod +x /usr/local/bin/docker-compose

  5. 测试安装是否正确

    $ docker-compose –version
    docker-compose version: 1.10.0

下面是使用Compose定义的一个例子:

version: '3'
services:
  web:
    image: chszs/couchbase-javaee:travel
    environment:
      - COUCHBASE_URI=db
    ports:
      - 8080:8080
      - 9990:9990
    depends_on:
      - db
  db:
    image: chszs/couchbase:travel
    ports:
      - 8091:8091
      - 8092:8092 
      - 8093:8093 
      - 11210:11210

在上面的Compose文件中,通过db和web属性名定义了两个服务。每一个服务的映像名由image属性进行定义。

映像chszs/couchbase:travel启动Couchbase服务器,并配置它使用Couchbase的REST API,以及载入travel-sample库,这个库是一个大约32KB的JSON文档。

映像chszs/couchbase-javaee:travel启动WildFly应用服务器,并部署应用的war文件。

environment属性定义了应用程序部署到WildFly应用服务器时可以访问的环境变量。COUCHBASE_URI指向数据库服务,这是在应用程序代码中使用。

端口转发则通过ports属性来实现。

在Compose定义文件中的depends_on属性用于确保容器的启动顺序。但是,应用程序级的启动就需要容器内运行的应用程序来确保。在本文的场景中,WildFly应用服务器启动相当快,而数据库的启动则需要数秒钟。这意味着部署在WildFly的JavaEE应用程序在一开始的几秒钟内无法与数据库进行通信。因此depends_on属性就派上用场了。它可以确保在应用程序的初始化过程中,所依赖的微服务已启动,而无需考虑再启动顺序。数据库初始化代码应该执行以下检查:

  1. 存储分区存在
  2. Couchbase数据库的查询服务已经可用
  3. Sample库数据已载入

上面的应用程序可以使用docker-compose up -d命令在单个主机上启动,或者是在Docker引擎的集群下以Swarm模式使用docker stack deploy命令启动它。

想继续阅读文本,请看下一篇《基于阿里云容器服务的微服务实践 - Part 3. 容器微服务实践》

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
SQL 数据库 Docker
OBCP实践 - OceanBase Docker 体验
开发者和技术爱好者可以在无需复杂安装配置的情况下迅速搭建OceanBase数据库环境,从而方便地进行功能测试、性能评估或者开发调试等实践活动。同时,由于Docker的便捷性,此方法也支持跨平台部署,使得OceanBase数据库能够在不同的操作系统(如Linux、Windows、macOS)上轻松体验。
73 2
|
1月前
|
SQL 分布式计算 关系型数据库
阿里云E-MapReduce Trino专属集群外连引擎及权限控制踩坑实践
本文以云厂商售后技术支持的角度,从客户的需求出发,对于阿里云EMR-Trino集群的选型,外连多引擎的场景、Ldap以及Kerberos鉴权等问题进行了简要的实践和记录,模拟客户已有的业务场景,满足客户需求的同时对过程中的问题点进行解决、记录和分析,包括但不限于Mysql、ODPS、Hive connector的配置,Hive、Delta及Hudi等不同表格式读取的兼容,aws s3、阿里云 oss协议访问异常的解决等。
|
1月前
|
Kubernetes 开发者 Docker
基于容器技术的微服务架构
基于容器技术的微服务架构
32 0
|
1月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
190 0
|
20天前
|
SQL 存储 API
阿里云实时计算Flink的产品化思考与实践【下】
本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。
110185 9
阿里云实时计算Flink的产品化思考与实践【下】
|
27天前
|
弹性计算 网络协议 关系型数据库
网络技术基础阿里云实验——企业级云上网络构建实践
实验地址:<https://developer.aliyun.com/adc/scenario/65e54c7876324bbe9e1fb18665719179> 本文档指导在阿里云上构建跨地域的网络环境,涉及杭州和北京两个地域。任务包括创建VPC、交换机、ECS实例,配置VPC对等连接,以及设置安全组和网络ACL规则以实现特定服务间的互访。例如,允许北京的研发服务器ECS-DEV访问杭州的文件服务器ECS-FS的SSH服务,ECS-FS访问ECS-WEB01的SSH服务,ECS-WEB01访问ECS-DB01的MySQL服务,并确保ECS-WEB03对外提供HTTP服务。
|
30天前
|
运维 应用服务中间件 调度
微服务容器化的运维
【2月更文挑战第27天】
|
1月前
|
监控 持续交付 Docker
深入浅出:基于Docker的微服务部署实践
【2月更文挑战第26天】在当前软件开发领域,微服务架构与容器化技术成为提升应用可伸缩性、可靠性和开发效率的关键手段。本文将深入探讨如何利用Docker容器技术实现微服务的快速部署与管理,涵盖环境搭建、服务打包、网络配置及持续集成等核心话题。通过实例演示,旨在为开发者提供一套行之有效的微服务部署解决方案。
|
1月前
|
Kubernetes Go 开发者
Go语言与Docker容器结合的实践应用与案例分析
【2月更文挑战第23天】本文通过分析实际案例,探讨了Go语言与Docker容器技术结合的实践应用。通过详细阐述Go语言在容器化环境中的开发优势,以及Docker容器技术在Go应用部署中的重要作用,本文旨在为读者提供Go语言与Docker容器结合的具体实现方法和实际应用场景。
|
1月前
|
云安全 人工智能 安全

相关产品

  • 容器计算服务