mirror of https://github.com/docker/docker-py.git
178 lines
5.2 KiB
Markdown
178 lines
5.2 KiB
Markdown
# Using Networks
|
|
|
|
## Network creation
|
|
|
|
With the release of Docker 1.9 you can now manage custom networks.
|
|
|
|
|
|
Here you can see how to create a network named `network1` using
|
|
the `bridge` driver
|
|
|
|
```python
|
|
docker_client.create_network("network1", driver="bridge")
|
|
```
|
|
|
|
You can also create more advanced networks with custom IPAM configurations.
|
|
For example, setting the subnet to `192.168.52.0/24` and gateway address
|
|
to `192.168.52.254`
|
|
|
|
```python
|
|
ipam_pool = docker.utils.create_ipam_pool(
|
|
subnet='192.168.52.0/24',
|
|
gateway='192.168.52.254'
|
|
)
|
|
ipam_config = docker.utils.create_ipam_config(
|
|
pool_configs=[ipam_pool]
|
|
)
|
|
|
|
docker_client.create_network("network1", driver="bridge", ipam=ipam_config)
|
|
```
|
|
|
|
By default, when you connect a container to an overlay network, Docker also
|
|
connects a bridge network to it to provide external connectivity. If you want
|
|
to create an externally isolated overlay network, with Docker 1.10 you can
|
|
create an internal network.
|
|
|
|
```python
|
|
|
|
docker_client.create_network("network1", driver="bridge", internal=True)
|
|
```
|
|
|
|
## Container network configuration
|
|
|
|
In order to specify which network a container will be connected to, and
|
|
additional configuration, use the `networking_config` parameter in
|
|
`Client.create_container`. Note that at the time of creation, you can
|
|
only connect a container to a single network. Later on, you may create more
|
|
connections using `Client.connect_container_to_network`.
|
|
|
|
|
|
```python
|
|
networking_config = docker_client.create_networking_config({
|
|
'network1': docker_client.create_endpoint_config(
|
|
ipv4_address='172.28.0.124',
|
|
aliases=['foo', 'bar'],
|
|
links=['container2']
|
|
)
|
|
})
|
|
|
|
ctnr = docker_client.create_container(
|
|
img, command, networking_config=networking_config
|
|
)
|
|
|
|
```
|
|
|
|
## Network API documentation
|
|
|
|
### Client.create_networking_config
|
|
|
|
Create a networking config dictionary to be used as the `networking_config`
|
|
parameter in `Client.create_container_config`
|
|
|
|
**Params**:
|
|
|
|
* endpoints_config (dict): A dictionary of `network_name -> endpoint_config`
|
|
relationships. Values should be endpoint config dictionaries created by
|
|
`Client.create_endpoint_config`. Defaults to `None` (default config).
|
|
|
|
**Returns** A networking config dictionary.
|
|
|
|
```python
|
|
|
|
docker_client.create_network('network1')
|
|
|
|
networking_config = docker_client.create_networking_config({
|
|
'network1': docker_client.create_endpoint_config()
|
|
})
|
|
|
|
container = docker_client.create_container(
|
|
img, command, networking_config=networking_config
|
|
)
|
|
```
|
|
|
|
|
|
### Client.create_endpoint_config
|
|
|
|
Create an endpoint config dictionary to be used with
|
|
`Client.create_networking_config`.
|
|
|
|
**Params**:
|
|
|
|
* aliases (list): A list of aliases for this endpoint. Names in that list can
|
|
be used within the network to reach the container. Defaults to `None`.
|
|
* links (list): A list of links for this endpoint. Containers declared in this
|
|
list will be [linked](https://docs.docker.com/engine/userguide/networking/work-with-networks/#linking-containers-in-user-defined-networks)
|
|
to this container. Defaults to `None`.
|
|
* ipv4_address (str): The IP address of this container on the network,
|
|
using the IPv4 protocol. Defaults to `None`.
|
|
* ipv6_address (str): The IP address of this container on the network,
|
|
using the IPv6 protocol. Defaults to `None`.
|
|
* link_local_ips (list): A list of link-local (IPv4/IPv6) addresses.
|
|
|
|
**Returns** An endpoint config dictionary.
|
|
|
|
```python
|
|
endpoint_config = docker_client.create_endpoint_config(
|
|
aliases=['web', 'app'],
|
|
links=['app_db'],
|
|
ipv4_address='132.65.0.123'
|
|
)
|
|
|
|
docker_client.create_network('network1')
|
|
networking_config = docker_client.create_networking_config({
|
|
'network1': endpoint_config
|
|
})
|
|
container = docker_client.create_container(
|
|
img, command, networking_config=networking_config
|
|
)
|
|
```
|
|
### docker.utils.create_ipam_config
|
|
|
|
Create an IPAM (IP Address Management) config dictionary to be used with
|
|
`Client.create_network`.
|
|
|
|
|
|
**Params**:
|
|
|
|
* driver (str): The IPAM driver to use. Defaults to `'default'`.
|
|
* pool_configs (list): A list of pool configuration dictionaries as created
|
|
by `docker.utils.create_ipam_pool`. Defaults to empty list.
|
|
|
|
**Returns** An IPAM config dictionary
|
|
|
|
```python
|
|
ipam_config = docker.utils.create_ipam_config(driver='default')
|
|
network = docker_client.create_network('network1', ipam=ipam_config)
|
|
```
|
|
|
|
### docker.utils.create_ipam_pool
|
|
|
|
Create an IPAM pool config dictionary to be added to the `pool_configs` param
|
|
in `docker.utils.create_ipam_config`.
|
|
|
|
**Params**:
|
|
|
|
* subnet (str): Custom subnet for this IPAM pool using the CIDR notation.
|
|
Defaults to `None`.
|
|
* iprange (str): Custom IP range for endpoints in this IPAM pool using the
|
|
CIDR notation. Defaults to `None`.
|
|
* gateway (str): Custom IP address for the pool's gateway.
|
|
* aux_addresses (dict): A dictionary of `key -> ip_address` relationships
|
|
specifying auxiliary addresses that need to be allocated by the
|
|
IPAM driver.
|
|
|
|
**Returns** An IPAM pool config dictionary
|
|
|
|
```python
|
|
ipam_pool = docker.utils.create_ipam_pool(
|
|
subnet='124.42.0.0/16',
|
|
iprange='124.42.0.0/24',
|
|
gateway='124.42.0.254',
|
|
aux_addresses={
|
|
'reserved1': '124.42.1.1'
|
|
}
|
|
)
|
|
ipam_config = docker.utils.create_ipam_config(pool_configs=[ipam_pool])
|
|
network = docker_client.create_network('network1', ipam=ipam_config)
|
|
```
|