基于阿里云容器服务的微服务实践 - 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搭建和管理企业级网站应用
目录
相关文章
|
20天前
|
Docker 容器
进入Docker容器中
进入Docker容器中
34 2
|
28天前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2天前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
9天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
12 0
|
17天前
|
Kubernetes 网络协议 Docker
Docker 容器的DNS
Docker 容器的DNS
23 1
|
20天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
45 1
|
23天前
|
弹性计算 缓存 Kubernetes
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
弹性容器实例是阿里云的云服务器产品,使用弹性容器实例之后,用户无需管理底层 ECS 服务器,只需要提供打包好的镜像,即可运行容器,与阿里云容器服务无缝对接并仅为容器实际运行消耗的资源付费。本文介绍了阿里云弹性容器实例的、功能特性、产品优势及应用场景。
什么是阿里云弹性容器实例?弹性容器实例优势及应用场景介绍
|
24天前
|
关系型数据库 MySQL 数据库
使用Docker搭建MySQL数据库服务
本文介绍了如何使用Docker搭建MySQL数据库服务。首先,通过`docker pull mysql:5.7`命令拉取MySQL 5.7镜像,然后运行`docker run`命令创建并启动容器。接着,使用`docker exec`进入容器并创建MySQL用户及授权。最后,通过MySQL客户端如Navicat测试连接,验证安装成功。Docker简化了MySQL的部署和管理,确保环境一致性。
37 0
|
25天前
|
监控 数据可视化 虚拟化
Docker容器常用命令笔记分享
Docker容器常用命令笔记分享
50 2
|
30天前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
188 0

相关产品

  • 容器计算服务