接上一篇《阿里云容器服务 Docker 与微服务实战》。
更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏
在阿里云上部署一个完整的 JavaEE 微服务应用通常需要一个比较复杂的过程,但如果结合 Docker 技术,则只需简单的几个步骤即可搞定。本文主要讲述怎样利用 Docker 来简化微服务应用的创建和部署。
使用 Compose 定义微服务
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,它允许在单个文件中定义多个容器应用以及这些应用所需的各种依赖,然后通过单个命令完成执行。Docker Compose 在实际工作中非常有价值,随着 Docker Compose 的不断完善,有成为取代 docker run 命令启动 Docker 容器的趋势。使用 Compose,开发者可以使用 Compose 文件配置应用程序的服务。然后,使用单个命令,从配置中创建和启动所有服务。
Docker Compose 非常适用于开发,测试和临时环境,以及 CI 工作流。它的主要特征如下:
- 单个主机上的多个隔离环境
- 创建容器时保留卷数据
- 仅重新创建已发生变更的容器
- 变量和在环境之间移动组件
Docker Compose 使用项目名称来相互隔离环境。开发者可以在多个不同的上下文中使用此项目名称:
- 在开发主机上,创建单个环境的多个副本
- 在 CI 服务器上,为了使构建不会相互干扰,可以将项目名称设置为唯一的内部版本号
- 在共享主机或开发主机上,可以防止不同的项目使用了相同的服务名所造成的相互干扰
使用 Docker Compose 基本上有三个步骤:
- 定义应用程序的环境 Dockerfile,使得它可以在任何地方复制。
- 定义组成应用程序的服务 docker-compose.yml,以便它们可以在一个隔离的环境中一起运行。
- 最后,运行 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 安装步骤
- 安装 Docker Toolbox。因为 Docker Toolbox 包含了 Docker 引擎和 Compose,因此对于 Mac 系统或 Windows 系统的用户来说,安装 Compose 只需一步,下面的步骤忽略。
- 对于 Linux 用户来说,先安装 Docker 引擎
去 Compose 的 GitHub 主页下载发行包,见:https://github.com/docker/compose/releases$ curl -L “https://github.com/docker/compose/releases/download/1.10.0/docker-compose-(uname−s)−(uname -m)” -o /usr/local/bin/docker-compose
- 为其赋予可执行权限
$ chmod +x /usr/local/bin/docker-compose
- 测试安装是否正确
$ 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 属性就派上用场了。它可以确保在应用程序的初始化过程中,所依赖的微服务已启动,而无需考虑再启动顺序。数据库初始化代码应该执行以下检查:
- 存储分区存在
- Couchbase 数据库的查询服务已经可用
- Sample 库数据已载入
上面的应用程序可以使用 docker-compose up -d 命令在单个主机上启动,或者是在 Docker 引擎的集群下以 Swarm 模式使用 docker stack deploy 命令启动它。
总结
本章主要讲了 Docker Compose 的特征、安装、例子等。下一章我们将介绍 Docker 的部署,访问,启动,停止、删除等内容。传送门《阿里云容器服务 Docker 的部署、启动、删除实践》。
【注:本文源自网络文章资源,由站长整理发布】