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
|
# Swarm services
Starting with Engine version 1.12 (API 1.24), it is possible to manage services
using the Docker Engine API. Note that the engine needs to be part of a
[Swarm cluster](swarm.md) before you can use the service-related methods.
## Creating a service
The `Client.create_service` method lets you create a new service inside the
cluster. The method takes several arguments, `task_template` being mandatory.
This dictionary of values is most easily produced by instantiating a
`TaskTemplate` object.
```python
container_spec = docker.types.ContainerSpec(
image='busybox', command=['echo', 'hello']
)
task_tmpl = docker.types.TaskTemplate(container_spec)
service_id = client.create_service(task_tmpl, name=name)
```
## Listing services
List all existing services using the `Client.services` method.
```python
client.services(filters={'name': 'mysql'})
```
## Retrieving service configuration
To retrieve detailed information and configuration for a specific service, you
may use the `Client.inspect_service` method using the service's ID or name.
```python
client.inspect_service(service='my_service_name')
```
## Updating service configuration
The `Client.update_service` method lets you update a service's configuration.
The mandatory `version` argument (used to prevent concurrent writes) can be
retrieved using `Client.inspect_service`.
```python
container_spec = docker.types.ContainerSpec(
image='busybox', command=['echo', 'hello world']
)
task_tmpl = docker.types.TaskTemplate(container_spec)
svc_version = client.inspect_service(svc_id)['Version']['Index']
client.update_service(
svc_id, svc_version, name='new_name', task_template=task_tmpl
)
```
## Removing a service
A service may be removed simply using the `Client.remove_service` method.
Either the service name or service ID can be used as argument.
```python
client.remove_service('my_service_name')
```
## Service API documentation
### Client.create_service
Create a service.
**Params:**
* task_template (dict): Specification of the task to start as part of the new
service. See the [TaskTemplate class](#TaskTemplate) for details.
* name (string): User-defined name for the service. Optional.
* labels (dict): A map of labels to associate with the service. Optional.
* mode (string): Scheduling mode for the service (`replicated` or `global`).
Defaults to `replicated`.
* update_config (dict): Specification for the update strategy of the service.
See the [UpdateConfig class](#UpdateConfig) for details. Default: `None`.
* networks (list): List of network names or IDs to attach the service to.
Default: `None`.
* endpoint_config (dict): Properties that can be configured to access and load
balance a service. Default: `None`.
**Returns:** A dictionary containing an `ID` key for the newly created service.
### Client.inspect_service
Return information on a service.
**Params:**
* service (string): A service identifier (either its name or service ID)
**Returns:** `True` if successful. Raises an `APIError` otherwise.
### Client.remove_service
Stop and remove a service.
**Params:**
* service (string): A service identifier (either its name or service ID)
**Returns:** `True` if successful. Raises an `APIError` otherwise.
### Client.services
List services.
**Params:**
* filters (dict): Filters to process on the nodes list. Valid filters:
`id` and `name`. Default: `None`.
**Returns:** A list of dictionaries containing data about each service.
### Client.update_service
Update a service.
**Params:**
* service (string): A service identifier (either its name or service ID).
* version (int): The version number of the service object being updated. This
is required to avoid conflicting writes.
* task_template (dict): Specification of the updated task to start as part of
the service. See the [TaskTemplate class](#TaskTemplate) for details.
* name (string): New name for the service. Optional.
* labels (dict): A map of labels to associate with the service. Optional.
* mode (string): Scheduling mode for the service (`replicated` or `global`).
Defaults to `replicated`.
* update_config (dict): Specification for the update strategy of the service.
See the [UpdateConfig class](#UpdateConfig) for details. Default: `None`.
* networks (list): List of network names or IDs to attach the service to.
Default: `None`.
* endpoint_config (dict): Properties that can be configured to access and load
balance a service. Default: `None`.
**Returns:** `True` if successful. Raises an `APIError` otherwise.
### Configuration objects (`docker.types`)
#### ContainerSpec
A `ContainerSpec` object describes the behavior of containers that are part
of a task, and is used when declaring a `TaskTemplate`.
**Params:**
* image (string): The image name to use for the container.
* command (string or list): The command to be run in the image.
* args (list): Arguments to the command.
* env (dict): Environment variables.
* dir (string): The working directory for commands to run in.
* user (string): The user inside the container.
* labels (dict): A map of labels to associate with the service.
* mounts (list): A list of specifications for mounts to be added to containers
created as part of the service. See the [Mount class](#Mount) for details.
* stop_grace_period (int): Amount of time to wait for the container to
terminate before forcefully killing it.
#### DriverConfig
A `LogDriver` object indicates which driver to use, as well as its
configuration. It can be used for the `log_driver` in a `ContainerSpec`,
and for the `driver_config` in a volume `Mount`.
**Params:**
* name (string): Name of the logging driver to use.
* options (dict): Driver-specific options. Default: `None`.
#### Mount
A `Mount` object describes a mounted folder's configuration inside a
container. A list of `Mount`s would be used as part of a `ContainerSpec`.
* target (string): Container path.
* source (string): Mount source (e.g. a volume name or a host path).
* type (string): The mount type (`bind` or `volume`). Default: `volume`.
* read_only (bool): Whether the mount should be read-only.
* propagation (string): A propagation mode with the value `[r]private`,
`[r]shared`, or `[r]slave`. Only valid for the `bind` type.
* no_copy (bool): False if the volume should be populated with the data from
the target. Default: `False`. Only valid for the `volume` type.
* labels (dict): User-defined name and labels for the volume. Only valid for
the `volume` type.
* driver_config (dict): Volume driver configuration.
See the [DriverConfig class](#DriverConfig) for details. Only valid for the
`volume` type.
#### Resources
A `Resources` object configures resource allocation for containers when
made part of a `ContainerSpec`.
**Params:**
* cpu_limit (int): CPU limit in units of 10^9 CPU shares.
* mem_limit (int): Memory limit in Bytes.
* cpu_reservation (int): CPU reservation in units of 10^9 CPU shares.
* mem_reservation (int): Memory reservation in Bytes.
#### RestartPolicy
A `RestartPolicy` object is used when creating a `ContainerSpec`. It dictates
whether a container should restart after stopping or failing.
* condition (string): Condition for restart (`none`, `on-failure`, or `any`).
Default: `none`.
* delay (int): Delay between restart attempts. Default: 0
* attempts (int): Maximum attempts to restart a given container before giving
up. Default value is 0, which is ignored.
* window (int): Time window used to evaluate the restart policy. Default value
is 0, which is unbounded.
#### TaskTemplate
A `TaskTemplate` object can be used to describe the task specification to be
used when creating or updating a service.
**Params:**
* container_spec (dict): Container settings for containers started as part of
this task. See the [ContainerSpec class](#ContainerSpec) for details.
* log_driver (dict): Log configuration for containers created as part of the
service. See the [DriverConfig class](#DriverConfig) for details.
* resources (dict): Resource requirements which apply to each individual
container created as part of the service. See the
[Resources class](#Resources) for details.
* restart_policy (dict): Specification for the restart policy which applies
to containers created as part of this service. See the
[RestartPolicy class](#RestartPolicy) for details.
* placement (list): A list of constraints.
#### UpdateConfig
An `UpdateConfig` object can be used to specify the way container updates
should be performed by a service.
**Params:**
* parallelism (int): Maximum number of tasks to be updated in one iteration
(0 means unlimited parallelism). Default: 0.
* delay (int): Amount of time between updates.
* failure_action (string): Action to take if an updated task fails to run, or
stops running during the update. Acceptable values are `continue` and
`pause`. Default: `continue`
|