Couchbase Server:Docker云上手指南

译文
云计算
在今天的文章中,我们将了解Docker Cloud中的各重要概念,并探讨如何利用Couchbase Server承载Docker镜像。

  首先直奔主题,看看Docker Cloud的几大关键性功能:

  • 利用Docker ID进行验证
  • 集成Docker Hub
  • 支持Docker官方库
  • 为Docker Engine提供商用支持
  • 能够利用GUI、API及CLI部署并扩展应用
  • [[167578]]

而在今天的文章中,我们将探讨:

  • Docker Cloud各核心概念
  • 如何创建一个新的Docker Cloud节点
  • 如何安装Docker Cloud CLI
  • 如何创建一项新的Docker Cloud服务
  • 在Docker Cloud中访问Couchbase Server
  • 如何终止Docker Cloud服务与节点

最后,我们还将共享部分Docker Cloud参考文档。

本文将使用Couchbase Server——一套面向Docker镜像的开源、高扩展性、JSON文件数据库。

Docker Cloud简要介绍

下面来看如何在Amazon中利用Docker Cloud运行Docker镜像:

brew install docker-cloud 
 
docker-cloud nodecluster create -t 1 --tag couchbase couchbase-node aws us-west-1 m3.large 
 
docker-cloud service create --tag couchbase -p 8091:8091 -p 8092:8092 -p 8093:8093 -p 11210:11210 arungupta/couchbase 
 
docker-cloud service start {SERVICE_ID} 
 
docker-cloud service inspect {SERVICE_ID} | jq ".container_ports[0].endpoint_uri" | sed 's/tcp/http/g' 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

接着开始具体探讨。

Docker Cloud各核心概念

  • 节点即用于部署及运行应用的各独立Linux主机/虚拟机。用户可配置更多新节点以提升容量。Docker Cloud并不提供托管服务。各节点利用物理服务器、虚拟机或者云服务供应商进行配置。
  • 节点集群属于同类节点的逻辑组。节点集群允许我们通过配置更多节点轻松实现基础设施规模扩展。
  • 服务为来自同一镜像的容器逻辑组。服务能够轻松将应用扩展至各不同节点当中。

Docker Cloud可通过Web、CLI或者REST API进行托管。本文将利用Docker Cloud CLI执行各项命令。

安装Docker Cloud CLI

安装Docker Cloud CLI:

brew install docker-cloud 
 
==> Downloading https://homebrew.bintray.com/bottles/docker-cloud-1.0.2.yosemite.bottle.tar.gz 
 
Already downloaded: /Library/Caches/Homebrew/docker-cloud-1.0.2.yosemite.bottle.tar.gz 
 
==> Pouring docker-cloud-1.0.2.yosemite.bottle.tar.gz 
 
�� /usr/local/Cellar/docker-cloud/1.0.2482 files, 4.1M 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

更为完整的安装操作请参阅“安装CLI”一文。

检查版本:

docker-cloud -v 
 
docker-cloud 1.0.2 
  • 1.
  • 2.
  • 3.

完整的命令内容如下:

usage: docker-cloud [-h] [-v] 
 
{action,container,event,exec,login,node,nodecluster,repository,run,service,stack,tag,trigger,up} 
 
... 
 
Docker Cloud CLI 
 
optional arguments: 
 
-h, --help show this help message and exit 
 
-v, --version show program's version number and exit 
 
Docker Cloud CLI commands: 
 
{action,container,event,exec,login,node,nodecluster,repository,run,service,stack,tag,trigger,up} 
 
action Action-related operations 
 
container Container-related operations 
 
event Get real time Docker Cloud events 
 
exec Run a command in a running container 
 
login Please use "docker login" to log into Docker Cloud 
 
node Node-related operations 
 
nodecluster NodeCluster-related operations 
 
repository Repository-related operations 
 
run Create and run a new service 
 
service Service-related operations 
 
stack Stack-related operations 
 
tag Tag-related operations 
 
trigger Trigger-related operations 
 
up Create and deploy a stack 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.

保存并登录凭证:

docker login 
 
Username: arungupta 
 
Password: 
 
Email: arun.gupta@gmail.com 
 
WARNING: login credentials saved in /Users/arungupta/.docker/config.json 
 
Login Succeeded 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

创建新的Docker Cloud节点

根据云服务供应商相关说明链接利用Docker Cloud Web UI注册您的云供应商证书。目前支持Amazon、Digital Ocean、Azure等主流供应商。

利用单一节点创建一套节点集群:

docker-cloud nodecluster create -t 1 --tag couchbase couchbase-node aws us-west-1 m3.large 
 
42a34e04-02e1-47be-bf87-ec06e0e0b604 
  • 1.
  • 2.
  • 3.

此节点拥有一个节点(-t 1),且使用标签“couchbase” (--tag couchbase)。最后四条参数分别代表节点集群名称(couchbase-node)、供应商(aws)、区域(us-west-1)以及节点类型(m3.large)。

此节点集群中的每个节点都将分配有标签,并用于随后将服务指定至特定节点或者节点集群。

此节点集群的运行状态如下:

docker-cloud nodecluster inspect 42a34e04-02e1-47be-bf87-ec06e0e0b604 | jq 
 
{ 
 
"disk"60, 
 
"uuid""42a34e04-02e1-47be-bf87-ec06e0e0b604", 
 
"tags": [ 
 
{ 
 
"name""couchbase" 
 
} 
 
], 
 
"current_num_nodes"1, 
 
"region""/api/infra/v1/region/aws/us-west-1/", 
 
"target_num_nodes"1, 
 
"state""Deployed", 
 
"node_type""/api/infra/v1/nodetype/aws/m3.large/", 
 
"resource_uri""/api/infra/v1/nodecluster/42a34e04-02e1-47be-bf87-ec06e0e0b604/", 
 
"destroyed_datetime"null, 
 
"provider_options": {}, 
 
"nodes": [ 
 
"/api/infra/v1/node/5c4c78e0-71c9-4420-9a1d-fdb04a35d1de/" 
 
], 
 
"deployed_datetime""Tue, 15 Mar 2016 17:18:17 +0000", 
 
"nickname""couchbase-node", 
 
"dockercloud_action_uri""", 
 
"name""couchbase-node" 
 
} 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.

Cloud.docker.com的仪表板更新如下:

亦可查看更多关于各个节点的具体信息:

创建一项新的Docker Cloud服务

创建一项Docker Cloud服务:

docker-cloud service create -p 8091:8091 -p 8092:8092 -p 8093:8093 -p 11210:11210 arungupta/couchbase 
 
834343fd-b1d5-4d66-a2cd-69d27a471658 
  • 1.
  • 2.
  • 3.

如果存在多个节点集群,则可使用--tag将一项服务分配至一套节点集群。

docker-cli#10字段旨在确保多个端口可通过-p 8091-8093:8091-8093格式进行公开。

这里使用的Docker镜像为arungupta/couchbase。此镜像基于Docker Hub上的官方couchbase镜像,且针对不同服务进行了预配置。

启动该Docker Cloud服务:

docker-cloud service start 834343fd-b1d5-4d66-a2cd-69d27a471658 
 
834343fd-b1d5-4d66-a2cd-69d27a471658 
  • 1.
  • 2.
  • 3.

更新后的仪表板如下:

获取该Docker Cloud服务日志:

docker-cloud service logs 834343fd-b1d5-4d66-a2cd-69d27a471658 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:04.826000846Z Starting Couchbase Server -- Web UI available at http://:8091 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.832855273Z * Trying 127.0.0.1... 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.833816400Z % Total % Received % Xferd Average Speed Time Time Time Current 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.834647384Z Dload Upload Total Spent Left Speed 
 
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 127.0.0.1 (127.0.0.1) port 8091 (#0) 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835659864Z > POST /pools/default HTTP/1.1 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835705633Z > User-Agent: curl/7.40.0-DEV 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835764766Z > Host: 127.0.0.1:8091 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835808491Z > Accept: */* 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835849972Z > Content-Length: 36 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835890805Z > Content-Type: application/x-www-form-urlencoded 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.835951739Z > 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.836153748Z } [36 bytes data] 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.836431490Z * upload completely sent off: 36 out of 36 bytes 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838702601Z < HTTP/1.1 200 OK 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838831946Z < Server: Couchbase Server 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838882039Z < Pragma: no-cache 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838929456Z < Date: Mon, 14 Mar 2016 22:54:19 GMT 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838944199Z < Content-Length: 0 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838973658Z < Cache-Control: no-cache 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.838984780Z < 
 
100 36 0 0 100 36 0 5643 --:--:-- --:--:-- --:--:-- 6000 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.839338450Z * Connection #0 to host 127.0.0.1 left intact 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.843462008Z * Trying 127.0.0.1... 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.844335715Z % Total % Received % Xferd Average Speed Time Time Time Current 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845478686Z Dload Upload Total Spent Left Speed 
 
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 127.0.0.1 (127.0.0.1) port 8091 (#0) 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845676061Z > POST /node/controller/setupServices HTTP/1.1 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845729619Z > User-Agent: curl/7.40.0-DEV 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845805193Z > Host: 127.0.0.1:8091 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845858410Z > Accept: */* 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845911479Z > Content-Length: 26 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.845986653Z > Content-Type: application/x-www-form-urlencoded 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.846040578Z > 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.846312512Z } [26 bytes data] 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.846561659Z * upload completely sent off: 26 out of 26 bytes 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847024846Z < HTTP/1.1 200 OK 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847082032Z < Server: Couchbase Server 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847157246Z < Pragma: no-cache 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847211690Z < Date: Mon, 14 Mar 2016 22:54:19 GMT 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847266024Z < Content-Length: 0 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847344403Z < Cache-Control: no-cache 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.847411160Z < 
 
100 26 0 0 100 26 0 6056 --:--:-- --:--:-- --:--:-- 8666 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.849284426Z * Connection #0 to host 127.0.0.1 left intact 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.853702443Z * Trying 127.0.0.1... 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.853890120Z % Total % Received % Xferd Average Speed Time Time Time Current 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.853943309Z Dload Upload Total Spent Left Speed 
 
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 127.0.0.1 (127.0.0.1) port 8091 (#0) 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854112174Z > POST /settings/web HTTP/1.1 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854169870Z > User-Agent: curl/7.40.0-DEV 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854223412Z > Host: 127.0.0.1:8091 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854278756Z > Accept: */* 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854335649Z > Content-Length: 50 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854391073Z > Content-Type: application/x-www-form-urlencoded 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854447141Z > 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.854683623Z } [50 bytes data] 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.855024680Z * upload completely sent off: 50 out of 50 bytes 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859378932Z < HTTP/1.1 200 OK 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859530830Z < Server: Couchbase Server 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859611527Z < Pragma: no-cache 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859794083Z < Date: Mon, 14 Mar 2016 22:54:19 GMT 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859848224Z < Content-Type: application/json 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859912932Z < Content-Length: 39 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859957829Z < Cache-Control: no-cache 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859972017Z < 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.859986584Z { [39 bytes data] 
 
100 89 100 39 100 50 6060 7770 --:--:-- --:--:-- --:--:-- 8333 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.860221103Z * Connection #0 to host 127.0.0.1 left intact 
 
couchbase-d96eed5d-1 | 2016-03-14T22:54:19.860730000Z {"newBaseUri":"http://127.0.0.1:8091/"}/entrypoint.sh couchbase-server 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.

日志的输出结果来自被回调以配置Couchbase服务器的Couchbase REST API。

在Docker Cloud内访问Couchbase Server

检查Docker Cloud服务以获取公开的容器端口:

docker-cloud service inspect 834343fd-b1d5-4d66-a2cd-69d27a471658 | jq ".container_ports" 
 
[ 
 
{ 
 
"protocol""tcp", 
 
"outer_port"8091, 
 
"inner_port"8091, 
 
"port_name""unknown", 
 
"published"true, 
 
"endpoint_uri""tcp://couchbase-d96eed5d.834343fd.svc.dockerapp.io:8091/" 
 
}, 
 
{ 
 
"protocol""tcp", 
 
"outer_port"8092, 
 
"inner_port"8092, 
 
"port_name""unknown", 
 
"published"true, 
 
"endpoint_uri""tcp://couchbase-d96eed5d.834343fd.svc.dockerapp.io:8092/" 
 
}, 
 
{ 
 
"protocol""tcp", 
 
"outer_port"8093, 
 
"inner_port"8093, 
 
"port_name""unknown", 
 
"published"true, 
 
"endpoint_uri""tcp://couchbase-d96eed5d.834343fd.svc.dockerapp.io:8093/" 
 
}, 
 
{ 
 
"protocol""tcp", 
 
"outer_port"11210, 
 
"inner_port"11210, 
 
"port_name""unknown", 
 
"published"true, 
 
"endpoint_uri""tcp://couchbase-d96eed5d.834343fd.svc.dockerapp.io:11210/" 
 
} 
 
] 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.

更具体地讲,Couchbase Web Console的URI可整理为:

docker-cloud service inspect 834343fd-b1d5-4d66-a2cd-69d27a471658 | jq ".container_ports[0].endpoint_uri" | sed 's/tcp/http/g' 
 
"http://couchbase-d96eed5d.834343fd.svc.dockerapp.io:8091/" 
  • 1.
  • 2.
  • 3.

利用http://couchbase-d96eed5d.834343fd.svc.dockerapp.io:8091/访问Couchbase Web Console即可查看其登录界面。输入 Administrator与password。

Couchbase Web Console如下所示:

终止Docker Cloud服务与节点

检查当前正在运行的各Docker Cloud服务:

docker-cloud service ps 
 
NAME UUID STATUS #CONTAINERS IMAGE DEPLOYED PUBLIC DNS STACK 
 
couchbase-d96eed5d 834343fd ▶ Running 1 arungupta/couchbase:latest 26 minutes ago couchbase-d96eed5d.834343fd.svc.dockerapp.io 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

终止该服务:

docker-cloud service terminate couchbase-d96eed5d 
 
834343fd-b1d5-4d66-a2cd-69d27a471658 
  • 1.
  • 2.
  • 3.

检查节点列表:

docker-cloud node ls 
 
UUID FQDN LASTSEEN STATUS CLUSTER DOCKER_VER 
 
a8059155 a8059155-390c-42db-9fb1-3b1bd3fb222c.node.dockerapp.io 1 minute ago ▶ Deployed couchbase-node 1.9.1-cs2 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

终止该节点:

docker-cloud node rm a8059155 
 
a8059155-390c-42db-9fb1-3b1bd3fb222c 
  • 1.
  • 2.
  • 3.

 原文标题:Couchbase Server: Getting Started With Docker Cloud

 【51CTO.com独家译稿,合作站点转载请注明来源】

责任编辑:xinxiaoliang 来源: 51CTO
相关推荐

2021-01-26 08:37:18

MobXVueReact

2024-01-29 00:36:50

Backstage设施工具

2014-06-24 09:41:56

Android Stu教程

2017-05-17 14:46:22

容器DockerLinux

2014-01-22 10:00:10

Android SDKAndroid开发

2021-11-26 09:40:37

EclipseIDEA开发

2013-12-04 13:27:56

Android SDK项目

2013-12-04 14:44:41

Android SDK用户交互

2013-12-26 15:40:33

Android SDK项目

2014-06-06 14:25:03

iOS 8SwiftWWDC2014

2013-12-26 15:14:38

Android SDK运行调试

2012-08-01 17:39:17

2021-01-19 06:16:05

前端Babel 技术热点

2013-12-26 14:52:52

Android SDK物理设备

2013-12-26 15:47:59

Android SDK应用程序

2013-12-04 14:29:18

Android SDK应用程序

2013-11-27 10:12:11

2013-12-26 15:26:48

Android SDKActivity生命周期

2013-12-04 15:11:03

Android SDK应用程序

2014-03-16 09:21:39

Android开发Android SDK
点赞
收藏

51CTO技术栈公众号