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

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

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

三、设置Docker的Swarm模式

Docker Swarm提供了一个本地集群能力,可以在单个虚拟Docker引擎中运行一组Docker引擎。
这里写图片描述
可以使用下面的命令来初始化Swarm模式:

docker swarm init

这将启动Swarm管理器。默认情况下,管理器阶段也是worker节点,而且可以只配置为管理器节点。
要查看关于单节点集群的信息,可以使用docker info命令:

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 17
Server Version: 1.13.0
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
Swarm: active
 NodeID: 92mydh0e09ba5hx3wtmcmvktz
 Is Manager: true
 ClusterID: v68ikyaff7rdxpaw1j0c9i60s
 Managers: 1
 Nodes: 1
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 3
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
 Node Address: 192.168.65.2
 Manager Addresses:
  192.168.65.2:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.5-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.952 GiB
Name: moby
ID: SGCM:KDRD:G3M7:PZHN:J4RL:VFFR:G2SR:EKD5:JV4J:RL3X:LF7T:XF6V
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 31
 Goroutines: 124
 System Time: 2017-01-27T08:25:58.032295342Z
 EventsListeners: 1
No Proxy: *.local, 169.254/16
Username: chszs
Registry: https://index.docker.io/v1/
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

上面所述的集群只有一个节点,而且这个节点是一个管理器节点。
此外,多主机集群可以使用下面的方法来设置:
https://github.com/docker/labs/blob/master/developer-tools/java/chapters/ch08-aws.adoc

四、部署微服务

微服务可以这样启动:

docker stack deploy --compose-file=docker-compose.yml webapp

输出如下:

Creating network webapp_default
Creating service webapp_web
Creating service webapp_db

WildFly和Couchbase服务在这个节点上启动了,每一个服务都有单个的容器。如果Swarm模式在多个节点上启用,那么容器会分布到这些节点上。
这样会创建一个新的覆盖网络。这允许多个容器在不同的主机上相互通信。
可以使用docker service来验证WildFly服务和Couchbase服务是否正在运行:

ID            NAME        MODE        REPLICAS  IMAGE
a9pkiziw3vgw  webapp_db   replicated  1/1       chszs/couchbase:travel
hr5s6ue54kwj  webapp_web  replicated  1/1       chszs/couchbase-javaee:travel

服务的日志可以使用命令docker service logs if webapp_web来查看:

webapp_web.1.wby0b04t7bap@moby    | =========================================================================
webapp_web.1.wby0b04t7bap@moby    |
webapp_web.1.wby0b04t7bap@moby    |   JBoss Bootstrap Environment
webapp_web.1.wby0b04t7bap@moby    |
webapp_web.1.wby0b04t7bap@moby    |   JBOSS_HOME: /opt/jboss/wildfly
webapp_web.1.wby0b04t7bap@moby    |
webapp_web.1.wby0b04t7bap@moby    |   JAVA: /usr/lib/jvm/java/bin/java
webapp_web.1.wby0b04t7bap@moby    |
webapp_web.1.wby0b04t7bap@moby    |   JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
webapp_web.1.wby0b04t7bap@moby    |
webapp_web.1.wby0b04t7bap@moby    | =========================================================================
. . .
webapp_web.1.wby0b04t7bap@moby    | 23:14:15,811 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 34) WFLYSRV0010: Deployed "airlines.war" (runtime-name : "airlines.war")
webapp_web.1.wby0b04t7bap@moby    | 23:14:16,076 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
webapp_web.1.wby0b04t7bap@moby    | 23:14:16,077 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
webapp_web.1.wby0b04t7bap@moby    | 23:14:16,077 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 98623ms - Started 443 of 691 services (404 services are lazy, passive or on-demand)

要确保等待最后一条日志语句完成显示。

五、访问微服务

尝试访问微服务的10条记录:

curl -v http://localhost:8080/airlines/resources/airline

显示结果如下:

*   Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> GET /airlines/resources/airline HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Server: WildFly/10
< Content-Type: application/octet-stream
< Content-Length: 1402
< Date: Fri, 03 Feb 2017 17:02:45 GMT
< 
* Connection #0 to host localhost left intact
[{"travel-sample":{"country":"United States","iata":"Q5","callsign":"MILE-AIR","name":"40-Mile Air","icao":"MLA","id":10,"type":"airline"}}, {"travel-sample":{"country":"United States","iata":"TQ","callsign":"TXW","name":"Texas Wings","icao":"TXW","id":10123,"type":"airline"}}, {"travel-sample":{"country":"United States","iata":"A1","callsign":"atifly","name":"Atifly","icao":"A1F","id":10226,"type":"airline"}}, {"travel-sample":{"country":"United Kingdom","iata":null,"callsign":null,"name":"Jc royal.britannica","icao":"JRB","id":10642,"type":"airline"}}, {"travel-sample":{"country":"United States","iata":"ZQ","callsign":"LOCAIR","name":"Locair","icao":"LOC","id":10748,"type":"airline"}}, {"travel-sample":{"country":"United States","iata":"K5","callsign":"SASQUATCH","name":"SeaPort Airlines","icao":"SQH","id":10765,"type":"airline"}}, {"travel-sample":{"country":"United States","iata":"KO","callsign":"ACE AIR","name":"Alaska Central Express","icao":"AER","id":109,"type":"airline"}}, {"travel-sample":{"country":"United Kingdom","iata":"5W","callsign":"FLYSTAR","name":"Astraeus","icao":"AEU","id":112,"type":"airline"}}, {"travel-sample":{"country":"France","iata":"UU","callsign":"REUNION","name":"Air Austral","icao":"REU","id":1191,"type":"airline"}}, {"travel-sample":{"country":"France","iata":"A5","callsign":"AIRLINAIR","name":"Airlinair","icao":"RLA","id":1203,"type":"airline"}}]

Docker for Java Developers:
https://github.com/docker/labs/tree/master/developer-tools/java

上面是一个自学动手的实验,可以轻松上手使用Docker。
获取单条资源记录:

curl -v http://localhost:8080/airlines/resources/airline/137

输出结果如下:

*   Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> GET /airlines/resources/airline/137 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Server: WildFly/10
< Content-Type: application/octet-stream
< Content-Length: 131
< Date: Wed, 01 Feb 2017 03:05:02 GMT
<
* Connection #0 to host localhost left intact
{"travel-sample":{"country":"France","iata":"AF","callsign":"AIRFRANS","name":"Air France","icao":"AFR","id":137,"type":"airline"}}

创建一条新资源记录:

curl -v -H "Content-Type: application/json" -X POST -d '{"country":"France","iata":"A5","callsign":"AIRLINAIR","name":"Airlinair","icao":"RLA","type":"airline"}' http://localhost:8080/airlines/resources/airline

输出结果如下:

*   Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> POST /airlines/resources/airline HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 104
>
* upload completely sent off: 104 out of 104 bytes
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Server: WildFly/10
< Content-Type: application/octet-stream
< Content-Length: 117
< Date: Wed, 01 Feb 2017 03:05:18 GMT
<
* Connection #0 to host localhost left intact
{"country":"France","iata":"A5","callsign":"AIRLINAIR","name":"Airlinair","icao":"RLA","id":"19810","type":"airline"}

更新一条资源记录:

curl -v -H "Content-Type: application/json" -X PUT -d '{"country":"France","iata":"A5","callsign":"AIRLINAIR","name":"Airlin Air","icao":"RLA","type":"airline","id": "19810"}' http://localhost:8080/airlines/resources/airline/19810

输出结果如下:

*   Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> PUT /airlines/resources/airline/19810 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 119
>
* upload completely sent off: 119 out of 119 bytes
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Server: WildFly/10
< Content-Type: application/octet-stream
< Content-Length: 118
< Date: Wed, 01 Feb 2017 03:05:41 GMT
<
* Connection #0 to host localhost left intact
{"country":"France","iata":"A5","callsign":"AIRLINAIR","name":"Airlin Air","icao":"RLA","id":"19810","type":"airline"}

删除一条资源记录:

curl -v -X DELETE http://localhost:8080/airlines/resources/airline/19810

输出结果如下:

*   Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> DELETE /airlines/resources/airline/19810 HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Connection: keep-alive
< X-Powered-By: Undertow/1
< Server: WildFly/10
< Content-Type: application/octet-stream
< Content-Length: 136
< Date: Wed, 01 Feb 2017 03:05:57 GMT
<
* Connection #0 to host localhost left intact
{"travel-sample":{"country":"France","iata":"A5","callsign":"AIRLINAIR","name":"Airlin Air","icao":"RLA","id":"19810","type":"airline"}}

六、删除微服务

可以使用docker stack rm webapp命令来移除微服务:

Removing service webapp_web
Removing service webapp_db
Removing network webapp_default

七、总结

尽管在阿里云的产品系列中还没看到Docker容器服务产品,但这并不代表就不能在阿里云上部署和实施容器类的服务和应用。实际上,阿里云提供了一个Docker市场,通过阿里云的Docker市场,开发者可以方便地进行Docker容器的创建、分享、下载和评价。而对于Dockerhub官方的镜像,阿里云的Docker市场还提供了镜像加速服务,让开发者可以更快地下载和使用这些来自官方的Docker镜像。借助阿里云虚拟主机,我们可以在单台或多台主机上搭建和部署多个Docker容器,每个Docker容器上又部署各种各样的业务服务。通过这些业务服务,构建我们的微服务生态系统。

至此,本系列文章已全部结束。另两篇文章见:
基于阿里云容器服务的微服务实践 - Part 2. Docker Compose
基于阿里云容器服务的微服务实践 - Part 1. 微服务与Docker

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: tpm-rev-2.0-part-3-commands-01.38.pdf 是一个文档,讨论了 Trusted Platform Module(TPM)版本2.0的命令。TPM是一种硬件安全模块,可用于在计算机系统中保护关键信息的安全性。该文档详细介绍了不同的命令,如读写命令、生成密钥命令、缓存命令、实体命令等。通过了解这些命令,用户可以了解如何使用TPM保护他们的数据和系统。 TPM命令可以通过应用程序接口(API)或命令行界面(CLI)使用。该文档列出了每个命令的语法和参数,并提供了示例代码和输出。此外,该文档还涵盖了TPM的状态和错误代码,以及可用于查询和控制TPM功能的附加命令。 该文档是面向开发人员和系统管理员的,适合已经有一定计算机知识基础的读者。阅读该文档可以帮助用户了解TPM如何工作,以及如何在他们的系统中使用它。使用TPM可以提高系统的安全性,保护用户的敏感信息和数据。 ### 回答2: tpm-rev-2.0-part-3-commands-01.38.pdf 是一份文档,其中包含了 TPM(Trusted Platform Module,可信平台模块)2.0 的指令集。TPM是一种安全芯片,可以用于保护计算机系统的安全,例如通过加密和数字签名来防止篡改、仿冒和恶意软件攻击。该文档包含了命令、响应码、数据输入输出等信息,以帮助开发人员了解和实现TPM的功能。一些命令涉及到密钥生成、证书颁发、数据加密和认证等方面,可以用于构建各种安全应用。同时,文档也描述了TPM的错误代码和执行结果,以便开发人员诊断和解决问题。需要注意的是,由于该文档针对TPM 2.0版本,因此在实际应用中可能需要根据具体情况进行相应的调整和修改。总之,该文档对于想要开发并应用TPM的个人或组织来说是一个非常重要的参考资料。 ### 回答3: tpm-rev-2.0-part-3-commands-01.38.pdf这个文档是TPM(Trusted Platform Module)2.0的命令文档,该文档提供了TPM 2.0的命令集,这些命令用于与TPM交互和控制TPM主板的行为。文档涵盖了许多命令,包括管理命令和普通命令,这些命令用于执行诸如生成加密密钥、认证、加密和解密等功能。 该文档主要涉及到命令的部分和结构,文档中清晰地描述了每个命令的作用和用法,使开发人员和系统管理员可以更好地了解TPM 2.0的功能和应用。知道这些命令可以帮助用户将TPM 2.0集成到其系统中,并可确保系统的安全性。 总体而言,tpm-rev-2.0-part-3-commands-01.38.pdf文档是TPM 2.0的一个重要资源,它提供了详细的信息和指导,使用户可以轻松地在其系统中集成TPM,并充分利用TPM 2.0的安全功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值