In this feature:
network
and service
become first class objects in the Docker UInetwork
and service
objects are globally significant and provides multi-host container connectivity nativelyservice
object, Docker now provides out of the box simple Service Discovery for containers running in a networkThis is an experimental feature. For information on installing and using experimental features, see the experimental feature overview.
Usage: docker network [OPTIONS] COMMAND [OPTIONS] [arg...] Commands: create Create a network rm Remove a network ls List all networks info Display information of a network Run 'docker network COMMAND --help' for more information on a command. --help=false Print usage
The docker network
command is used to manage Networks.
To create a network, docker network create foo
. You can also specify a driver if you have loaded a networking plugin e.g docker network create -d <plugin_name> foo
$ docker network create foo aae601f43744bc1f57c515a16c8c7c4989a2cad577978a32e6910b799a6bccf6 $ docker network create -d overlay bar d9989793e2f5fe400a58ef77f706d03f668219688ee989ea68ea78b990fa2406
docker network ls
is used to display the currently configured networks
$ docker network ls NETWORK ID NAME TYPE d367e613ff7f none null bd61375b6993 host host cc455abccfeb bridge bridge aae601f43744 foo bridge d9989793e2f5 bar overlay
To get detailed information on a network, you can use the docker network info
command.
$ docker network info foo Network Id: aae601f43744bc1f57c515a16c8c7c4989a2cad577978a32e6910b799a6bccf6 Name: foo Type: null
If you no longer have need of a network, you can delete it with docker network rm
$ docker network rm bar bar $ docker network ls NETWORK ID NAME TYPE aae601f43744 foo bridge d367e613ff7f none null bd61375b6993 host host cc455abccfeb bridge bridge
Docker daemon supports a configuration flag --default-network
which takes configuration value of format DRIVER:NETWORK
, where, DRIVER
represents the in-built drivers such as bridge, overlay, container, host and none. or Remote drivers via Network Plugins. NETWORK
is the name of the network created using the docker network create
command When a container is created and if the network mode (--net
) is not specified, then this default network will be used to connect the container. If --default-network
is not specified, the default network will be the bridge
driver. Example : docker -d --default-network=overlay:multihost
Usage: docker service COMMAND [OPTIONS] [arg...] Commands: publish Publish a service unpublish Remove a service attach Attach a backend (container) to the service detach Detach the backend from the service ls Lists all services info Display information about a service Run 'docker service COMMAND --help' for more information on a command. --help=false Print usage
Assuming we want to publish a service from container a0ebc12d3e48
on network foo
as my-service
we would use the following command:
$ docker service publish my-service.foo ec56fd74717d00f968c26675c9a77707e49ae64b8e54832ebf78888eb116e428 $ docker service attach a0ebc12d3e48 my-service.foo
This would make the container a0ebc12d3e48
accessible as my-service
on network foo
. Any other container in network foo
can use DNS to resolve the address of my-service
This can also be acheived by using the --publish-service
flag for docker run
:
docker run -itd --publish-service db.foo postgres
db.foo
in this instance means “place the container on network foo
, and allow other hosts on foo
to discover it under the name db
”
We can see the current services using the docker service ls
command
$ docker service ls SERVICE ID NAME NETWORK PROVIDER ec56fd74717d my-service foo a0ebc12d3e48
To remove the a service:
$ docker service detach a0ebc12d3e48 my-service.foo $ docker service unpublish my-service.foo
There is a lot to talk about the native multi-host networking and the overlay
driver that makes it happen. The technical details are documented under https://github.com/docker/libnetwork/blob/master/docs/overlay.md. Using the above experimental UI docker network
, docker service
and --publish-service
, the user can exercise the power of multi-host networking.
Since network
and service
objects are globally significant, this feature requires distributed states provided by the libkv
project. Using libkv
, the user can plug any of the supported Key-Value store (such as consul, etcd or zookeeper). User can specify the Key-Value store of choice using the --kv-store
daemon flag, which takes configuration value of format PROVIDER:URL
, where PROVIDER
is the name of the Key-Value store (such as consul, etcd or zookeeper) and URL
is the url to reach the Key-Value store. Example : docker -d --kv-store=consul:localhost:8500
Send us feedback and comments on #14083 or on the usual Google Groups (docker-user, docker-dev) and IRC channels.