-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathdocker_cloud.docker.txt
438 lines (325 loc) · 18.2 KB
/
docker_cloud.docker.txt
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
┏━━━━━━━━━━━━━━━━━━┓
┃ DOCKER_CLOUD ┃
┗━━━━━━━━━━━━━━━━━━┛
VERSION ==> #1.0.7
SUMMARY ==> #Continuous deployment for Docker, based on (slimmer version of) Docker compose
#Also has CI (automatic build and test)
#Features:
# - deployment:
# - support many cloud providers
# - automatic deploy on IMAGE change or service definition change
# - sequential or parallel deployment
# - placement on node: fewest containers, fewest containers of that service, or 1 per node
# - scaling:
# - can scale number of containers per service
# - operations:
# - can upgrade dockerd
# - easy way to inspect logs or SSH into containers
# - networking:
# - automatically assign domain names linking to hosts
# - automation:
# - CI:
# - automatically build images (like Docker Hub)
# - automatic test (so image is not built if fails)
# - custom hooks
# - webhooks
# - email/Slack notifications
# - others:
# - tags (metadata) on node clusters, nodes, services
PRICING ==> #Like Docker Hub, i.e. must pay for private repos and more parallel builds
WEB APP ==> #There is a web app which allow to do same as CLI
┌────────────────────┐
│ COMMON OPTIONS │
└────────────────────┘
docker-cloud nodecluster create|rm
docker-cloud node upgrade|rm ...
docker-cloud stack
create|update|terminate
docker-cloud
stack|service|container
start|stop|redeploy
docker-cloud service|container
create|set|terminate
--sync #Make command synchronous
docker-cloud repository|
nodecluster|node|stack|action|
trigger
ls
docker-cloud nodecluster
provider|region|az
docker-cloud service|container ps #
-q
--quiet #
┌────────────────┐
│ REPOSITORY │
└────────────────┘
REPOSITORY ==> #Docker registry repository
#Must be logged in, or pass ENVVAR DOCKERCLOUD_USER|PASS
#The CLI only deals with custom registry repositories
docker-cloud repository register #Add custom repository
-u USER
--username USER
-p PASSWORD
--password PASSWORD #Custom repo credential
docker-cloud repository update RPO#Same options as docker-cloud repository register
docker-cloud repository rm REPO #
docker-cloud repository ls #
docker-cloud repository inspect
REPO #
┌─────────────────┐
│ NODECLUSTER │
└─────────────────┘
NODECLUSTER ==> #Group of nodes, i.e. cloud provider, in a specific region, for a specific instance type
docker-cloud nodecluster create
NODECLUSTER_NAME PROVIDER REGION
INSTANCE_TYPE #
--disk NUM #Main partition size, in GB (def: 60)
--aws-vpc-id VPC_ID
--aws-vpc-subnet SUBNET
--aws-vpc-security-group
--aws-iam-instance-profile-name
IAM_INSTANCE_PROFILE_NAME #AWS options
docker-cloud nodecluster rm
NODECLUSTER... #
docker-cloud nodecluster ls #Show: NODECLUSTER_NAME|ID, REGION, NODETYPE, ctime, status, current|target number of nodes
docker-cloud nodecluster inspect
NODECLUSTER... #
docker-cloud nodecluster provider #List all possible provider
docker-cloud nodecluster nodetype #List all provider's available NODETYPE
-p PROVIDER
--provider PROVIDER #
-r REGION
--region REGION #
docker-cloud nodecluster region #List all provider's available regions
-p PROVIDER
--provider PROVIDER #
docker-cloud nodecluster az #List added provider's available Availablity zones
┌──────────┐
│ NODE │
└──────────┘
NODE ==> #Host (e.g. cloud provider's instance)
#Not Swarm mode NODE (although conceptually similar)
docker-cloud node byo #Add node
docker-cloud node rm NODE_ID... #
docker-cloud node ls #Show: NODE_ID, URL, mtime, status, NODECLUSTER
docker-cloud node inspect
NODE_ID... #
┌────────────────┐
│ DEPLOYMENT │
└────────────────┘
DEPLOYMENT ==> #When a stack definition is updated, redeploy to nodeclusters
SCONF.autoredeploy #BOOL (def: false): continuous deployment, i.e. redeploy when image changes in registry
SCONF.sequential_deployment #BOOL (def: false): similar to Swarm "update parallelism"
SCONF.deployment_strategy #Where to place new tasks (similar to Swarm "task mode"):
# - empties_node (def): NODE with fewest CONTAINERs
# - high_availability: NODE with fewest CONTAINERs of that SERVICE
# - every_node: 1 per NODE. Cannot scale (since 1 is max and min)
┌───────────┐
│ SCALE │
└───────────┘
SCONF.target_num_containers #Number of CONTAINERs per SERVICE
docker-cloud nodecluster
create|update ...
docker-cloud service create|update
-t NUM
--target-num-nodes NUM #
docker-cloud service scale
SERVICE... NUM #
┌─────────────┐
│ UPGRADE │
└─────────────┘
docker-cloud node upgrade
NODE_ID... #Upgrade dockerd
┌───────────┐
│ STACK │
└───────────┘
STACK ==> #Set of SERVICE, bound to a specific STACK_FILE
STACK_FILE #Similar to Docker compose file, holding SCONF
SCONF #Trimmed down version of CPSCONF, with CPSCONF.image required
#CPSCONF features not available in SCONF:
# - container_name, depends_on, tmpfs, entrypoint, env_file, extends, external_links, logging,
# log_driver, log_opt, networks, stop_signal, ulimits, volume_driver, cpu_quota, ipc, shm_size
# - CPSCONF.build -> only SCONF.image (required)
#CPSCONF features renamed:
# - docker-compose run --rm -> SCONF.autodestroy "always", "no" or "on-success"
# - "on-success": destroys if container exit code if 0
# - CPSCONF.network_mode -> SCONF.net
# - CPSCONF.scale -> SCONF.target_num_containers NUM
#SCONF features ont available in CPSCONF:
# - nickname STR: only used in web app
# - others documented below
docker-cloud stack create #
-n STACK_NAME
--name STACK_NAME #
-f STACK_FILE
--file STACK_FILE #
docker-cloud stack update STACK_ID#Same options as docker-cloud stack create, except --name
docker-cloud stack terminate
STACK_ID... #Removes
docker-cloud stack ls #Show: STACK_NAME, STACK_ID, status, mtime, deletion time
docker-cloud stack inspect
STACK_ID... #
docker-cloud stack export STACK_ID#Outputs STACK_FILE
-f STACK_FILE
--file STACK_FILE #
┌─────────────┐
│ SERVICE │
└─────────────┘
SERVICE ==> #Conceptually similar to Docker compose services
docker-cloud service create
IMAGE_NAME #
-n SERVICE_NAME
--name SERVICE_NAME #
--cpushares
--memory
--privileged
-r
--run-command
--entrypoint
-p
--publish
--expose
-e
--env
--env-file
--link-service
--autodestroy
--autoredeploy
--autorestart
--role
--sequential
-v
--volume
--volumes-from
--deployment-strategy
--net NET
--pid PID #Same options as STACK_FILE
docker-cloud service set SERVICE #Updates. Same options as create, except: --image IMAGE_NAME, and no --name
docker-cloud service env
add|ls|rm|set|update #Updates ENVVAR
docker-cloud service terminate
SERVICE... #Removes
docker-cloud service ps #Lists. Shows: SERVICE_NAME|ID, status, number of containers, IMAGE, mtime, DNS, STACK
--stack STACK #
--status STATUS #
docker-cloud service inspect
SERVICE... #
┌───────────────┐
│ CONTAINER │
└───────────────┘
CONTAINER ==> #Conceptually similar to Docker container
docker-cloud container terminate
CONTAINER... #Removes
docker-cloud container ps #Lists. Show: CONTAINER_NAME|ID, status, IMAGE, COMMAND, exit code, mtime, URL, NODE, STACK
--service SERVICE #
--status STATUS #
--no-trunc #
docker-cloud container inspect
CONTAINER... #
┌─────────────────────┐
│ CONTAINER STATE │
└─────────────────────┘
docker-cloud
stack|service|container
start|stop
STACK|SERVICE|CONTAINER... #Start|stop [all] SERVICE
docker-cloud
stack|service|container
redeploy
STACK|SERVICE|CONTAINER... #Restart [all] SERVICE
--not-reuse-volumes #Do not reuse data volumes
docker-cloud [stack] up ... #Same as docker-cloud stack create + start
docker-cloud [service] run ... #Same as docker-cloud service create + start
┌──────────────────────────┐
│ CONTAINER INSPECTION │
└──────────────────────────┘
docker-cloud [container] exec
CONTAINER ... #Similar to docker exec ...
docker-cloud
service|container|action
logs SERVICE|CONTAINER|ACTION... #Similar to docker logs but potentially for several containers
-f
--follow
-t NUM
--tail NUM #Like docker logs
┌───────────────────────┐
│ SERVER INSPECTION │
└───────────────────────┘
ACTIONS ==> #Like docker events, but for Docker-cloud central REST API
#Can be cancelled|retried
docker-cloud action ls #Shows: ACTION_ID, type, start|end, target, IP, IP location
-l NUM
--last NUM #
docker-cloud action inspect ACTION#
docker-cloud action cancel|retry
ACTION #
docker-cloud events #Similar to docker events, but for docker-cloud actions
SCONF.roles global #Add ENVVAR DOCKERCLOUD_AUTH to the container, which is HTTP Authenticate credentials to Docker cloud REST API
┌──────────┐
│ TAGS │
└──────────┘
TAGS ==> #Like docker tags, but for NODECLUSTER, SERVICE or NODE
docker-cloud nodecluster
create|update ...
docker-cloud service create
--tag TAG
docker-cloud tag add|rm|ls|set ...#
┌──────────────┐
│ TRIGGERS │
└──────────────┘
TRIGGERS ==> #URL that performs an operation when POST request to it
docker-cloud trigger create SERVIC#
-n TRIGGER_NAME
--name TRIGGER_NAME #
-o OPERATION
--operation OPERATION #Among: redeploy (def), scale_up
docker-cloud trigger rm URL SERVIC#
docker-cloud trigger ls #
EMAIL/SLACK NOTIFICATION ==> #Only through the web app
┌────────────────────────────┐
│ CONTINUOUS INTEGRATION │
└────────────────────────────┘
AUTOMATIC IMAGE BUILD ==> #When Dockerfile is changed on GitHub (like Docker Hub)
#Can push different images according to conditions (e.g. tag, branch), or use different Dockerfiles or build contexts
#Can disable build caching
AUTOMATIC TEST ==> #CI test, run on pull requests
#Use a different Docker compose file: /*.test.yml
#Then:
# - build service named "rut"
# - run CPSCONF.command (which should be a test runner)
# - use exit code 0|1
#If fails, do not co automatic image build
ENVVAR ==> #Set during CI:
# - SOURCE_BRANCH|COMMIT, COMMIT_MSG
# - DOCKER_REPO|TAG, IMAGE_NAME
#Can also set custom ones
HOOKS ==> #Can run scripts, placed in /hooks/[pre|post_]STAGE
#STAGE is: checkout, build, test, push
#Used by automatic image build and automatic test
┌─────────┐
│ DNS │
└─────────┘
DNS ==> #Gives domain names (and sets ENVVAR) linking:
# - to either: NODE (machine), SERVICE (Docker compose SERVICE) or CONTAINER (Docker container)
# - hostname:
# - sub-host:
# - DOCKERCLOUD_NODE_HOSTNAME: HOST_UUID
# - DOCKERCLOUD_SERVICE_HOSTNAME: SERVICE_NAME
# - DOCKERCLOUD_CONTAINER_HOSTNAME: SERVICE_NAME_NUM
# - full host:
# - DOCKERCLOUD_NODE_FQDN: HOSTNAME.node.dockerapp.io
# - DOCKERCLOUD_SERVICE_FQDN: HOSTNAME.STACK.SERVICE_ID.svc.dockerapp.io
# - DOCKERCLOUD_CONTAINER_FQDN: HOSTNAME.STACK.CONTAINER_ID.cont.dockerapp.io
# - path:
# - DOCKERCLOUD_NODE_API_URI: /api/infra/v1/USER/node/HOST_UUID
# - DOCKERCLOUD_SERVICE|CONTAINER_API_URI: /api/app/v1/USER/service|container/SERVICE|CONTAINER_ID/
# - domain name:
# - DOCKERCLOUD_REST_HOST: https://cloud.docker.com
# - DOCKERCLOUS_STREAM_HOST: wss://ws.cloud.docker.com
# - DOCKERCLOUD_IP_ADDRESS
# - URL:
# - DOCKERCLOUD_NODE|SERVICE|CONTAINER_API_URL: https://cloud.docker.com/ + path
┌─────────────────────┐
│ USER MANAGEMENT │
└─────────────────────┘
USER MANAGEMENT ==> #Only through web app