forked from docker/docker-py
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
See docker#1086 Signed-off-by: Ben Firshman <[email protected]>
- Loading branch information
Showing
36 changed files
with
3,971 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,26 +1,73 @@ | ||
docker-py | ||
========= | ||
# Docker SDK for Python | ||
|
||
[![Build Status](https://travis-ci.org/docker/docker-py.png)](https://travis-ci.org/docker/docker-py) | ||
|
||
A Python library for the Docker Remote API. It does everything the `docker` command does, but from within Python – run containers, manage them, pull/push images, etc. | ||
A Python library for the Docker API. It lets you do anything the `docker` command does, but from within Python apps – run containers, manage containers, manage Swarms, etc. | ||
|
||
Installation | ||
------------ | ||
## Installation | ||
|
||
The latest stable version is always available on PyPi. | ||
The latest stable version [is available on PyPi](https://pypi.python.org/pypi/docker/). Either add `docker` to your `requirements.txt` file or install with pip: | ||
|
||
pip install docker-py | ||
pip install docker | ||
|
||
Documentation | ||
------------- | ||
## Usage | ||
|
||
[![Documentation Status](https://readthedocs.org/projects/docker-py/badge/?version=latest)](https://readthedocs.org/projects/docker-py/?badge=latest) | ||
Connect to Docker using the default socket or the configuration in your environment: | ||
|
||
[Read the full documentation here](https://docker-py.readthedocs.io/en/latest/). | ||
The source is available in the `docs/` directory. | ||
```python | ||
import docker | ||
client = docker.from_env() | ||
``` | ||
|
||
You can run containers: | ||
|
||
License | ||
------- | ||
Docker is licensed under the Apache License, Version 2.0. See LICENSE for full license text | ||
```python | ||
>>> client.containers.run("ubuntu", "echo hello world") | ||
'hello world\n' | ||
``` | ||
|
||
You can run containers in the background: | ||
|
||
```python | ||
>>> client.containers.run("bfirsh/reticulate-splines", detach=True) | ||
<Container '45e6d2de7c54'> | ||
``` | ||
|
||
You can manage containers: | ||
|
||
```python | ||
>>> client.containers.list() | ||
[<Container '45e6d2de7c54'>, <Container 'db18e4f20eaa'>, ...] | ||
|
||
>>> container = client.containers.get('45e6d2de7c54') | ||
|
||
>>> container.attrs['Config']['Image'] | ||
"bfirsh/reticulate-splines" | ||
|
||
>>> container.logs() | ||
"Reticulating spline 1...\n" | ||
|
||
>>> container.stop() | ||
``` | ||
|
||
You can stream logs: | ||
|
||
```python | ||
>>> for line in container.logs(stream=True): | ||
... print line.strip() | ||
Reticulating spline 2... | ||
Reticulating spline 3... | ||
... | ||
``` | ||
|
||
You can manage images: | ||
|
||
```python | ||
>>> client.images.pull('nginx') | ||
<Image 'nginx'> | ||
|
||
>>> client.images.list() | ||
[<Image 'ubuntu'>, <Image 'nginx'>, ...] | ||
``` | ||
|
||
[Read the full documentation](https://docs.docker.com/sdk/python/) to see everything you can do. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
from .api.client import APIClient | ||
from .models.containers import ContainerCollection | ||
from .models.images import ImageCollection | ||
from .models.networks import NetworkCollection | ||
from .models.nodes import NodeCollection | ||
from .models.services import ServiceCollection | ||
from .models.swarm import Swarm | ||
from .models.volumes import VolumeCollection | ||
from .utils import kwargs_from_env | ||
|
||
|
||
class Client(object): | ||
""" | ||
A client for communicating with a Docker server. | ||
Example: | ||
>>> import docker | ||
>>> client = Client(base_url='unix://var/run/docker.sock') | ||
Args: | ||
base_url (str): URL to the Docker server. For example, | ||
``unix:///var/run/docker.sock`` or ``tcp://127.0.0.1:1234``. | ||
version (str): The version of the API to use. Set to ``auto`` to | ||
automatically detect the server's version. Default: ``1.24`` | ||
timeout (int): Default timeout for API calls, in seconds. | ||
tls (bool or :py:class:`~docker.tls.TLSConfig`): Enable TLS. Pass | ||
``True`` to enable it with default options, or pass a | ||
:py:class:`~docker.tls.TLSConfig` object to use custom | ||
configuration. | ||
user_agent (str): Set a custom user agent for requests to the server. | ||
""" | ||
def __init__(self, *args, **kwargs): | ||
self.api = APIClient(*args, **kwargs) | ||
|
||
@classmethod | ||
def from_env(cls, **kwargs): | ||
""" | ||
Return a client configured from environment variables. | ||
The environment variables used are the same as those used by the | ||
Docker command-line client. They are: | ||
.. envvar:: DOCKER_HOST | ||
The URL to the Docker host. | ||
.. envvar:: DOCKER_TLS_VERIFY | ||
Verify the host against a CA certificate. | ||
.. envvar:: DOCKER_CERT_PATH | ||
A path to a directory containing TLS certificates to use when | ||
connecting to the Docker host. | ||
Args: | ||
version (str): The version of the API to use. Set to ``auto`` to | ||
automatically detect the server's version. Default: ``1.24`` | ||
timeout (int): Default timeout for API calls, in seconds. | ||
ssl_version (int): A valid `SSL version`_. | ||
assert_hostname (bool): Verify the hostname of the server. | ||
environment (dict): The environment to read environment variables | ||
from. Default: the value of ``os.environ`` | ||
Example: | ||
>>> import docker | ||
>>> client = docker.from_env() | ||
.. _`SSL version`: | ||
https://docs.python.org/3.5/library/ssl.html#ssl.PROTOCOL_TLSv1 | ||
""" | ||
timeout = kwargs.pop('timeout', None) | ||
version = kwargs.pop('version', None) | ||
return cls(timeout=timeout, version=version, | ||
**kwargs_from_env(**kwargs)) | ||
|
||
# Resources | ||
@property | ||
def containers(self): | ||
""" | ||
An object for managing containers on the server. See the | ||
:doc:`containers documentation <containers>` for full details. | ||
""" | ||
return ContainerCollection(client=self) | ||
|
||
@property | ||
def images(self): | ||
""" | ||
An object for managing images on the server. See the | ||
:doc:`images documentation <images>` for full details. | ||
""" | ||
return ImageCollection(client=self) | ||
|
||
@property | ||
def networks(self): | ||
""" | ||
An object for managing networks on the server. See the | ||
:doc:`networks documentation <networks>` for full details. | ||
""" | ||
return NetworkCollection(client=self) | ||
|
||
@property | ||
def nodes(self): | ||
""" | ||
An object for managing nodes on the server. See the | ||
:doc:`nodes documentation <nodes>` for full details. | ||
""" | ||
return NodeCollection(client=self) | ||
|
||
@property | ||
def services(self): | ||
""" | ||
An object for managing services on the server. See the | ||
:doc:`services documentation <services>` for full details. | ||
""" | ||
return ServiceCollection(client=self) | ||
|
||
@property | ||
def swarm(self): | ||
""" | ||
An object for managing a swarm on the server. See the | ||
:doc:`swarm documentation <swarm>` for full details. | ||
""" | ||
return Swarm(client=self) | ||
|
||
@property | ||
def volumes(self): | ||
""" | ||
An object for managing volumes on the server. See the | ||
:doc:`volumes documentation <volumes>` for full details. | ||
""" | ||
return VolumeCollection(client=self) | ||
|
||
# Top-level methods | ||
def events(self, *args, **kwargs): | ||
return self.api.events(*args, **kwargs) | ||
events.__doc__ = APIClient.events.__doc__ | ||
|
||
def info(self, *args, **kwargs): | ||
return self.api.info(*args, **kwargs) | ||
info.__doc__ = APIClient.info.__doc__ | ||
|
||
def login(self, *args, **kwargs): | ||
return self.api.login(*args, **kwargs) | ||
login.__doc__ = APIClient.login.__doc__ | ||
|
||
def ping(self, *args, **kwargs): | ||
return self.api.ping(*args, **kwargs) | ||
ping.__doc__ = APIClient.ping.__doc__ | ||
|
||
def version(self, *args, **kwargs): | ||
return self.api.version(*args, **kwargs) | ||
version.__doc__ = APIClient.version.__doc__ | ||
|
||
from_env = Client.from_env |
Oops, something went wrong.