diff --git a/content/network/network-tutorial-overlay.md b/content/network/network-tutorial-overlay.md index 48747db4a0..29d29fa85b 100644 --- a/content/network/network-tutorial-overlay.md +++ b/content/network/network-tutorial-overlay.md @@ -12,8 +12,8 @@ For networking with standalone containers, see [Networking with standalone containers](network-tutorial-standalone.md). If you need to learn more about Docker networking in general, see the [overview](index.md). -This topic includes four different tutorials. You can run each of them on -Linux, Windows, or a Mac, but for the last two, you need a second Docker +This page includes the following tutorials. You can run each of them on +Linux, Windows, or a Mac, but for the last one, you need a second Docker host running elsewhere. - [Use the default overlay network](#use-the-default-overlay-network) demonstrates @@ -29,10 +29,6 @@ host running elsewhere. shows how to communicate between standalone containers on different Docker daemons using an overlay network. -- [Communicate between a container and a swarm service](#communicate-between-a-container-and-a-swarm-service) - sets up communication between a standalone container and a swarm service, - using an attachable overlay network. - ## Prerequisites These require you to have at least a single-node swarm, which means that @@ -438,206 +434,6 @@ example also uses Linux hosts, but the same commands work on Windows. $ docker network rm test-net ``` -## Communicate between a container and a swarm service - -In this example, you start two different `alpine` containers on the same Docker -host and do some tests to understand how they communicate with each other. You -need to have Docker installed and running. - -1. Open a terminal window. List current networks before you do anything else. - Here's what you should see if you've never added a network or initialized a - swarm on this Docker daemon. You may see different networks, but you should - at least see these (the network IDs will be different): - - ```console - $ docker network ls - - NETWORK ID NAME DRIVER SCOPE - 17e324f45964 bridge bridge local - 6ed54d316334 host host local - 7092879f2cc8 none null local - ``` - - The default `bridge` network is listed, along with `host` and `none`. The - latter two are not fully-fledged networks, but are used to start a container - connected directly to the Docker daemon host's networking stack, or to start - a container with no network devices. This tutorial will connect two - containers to the `bridge` network. - -2. Start two `alpine` containers running `ash`, which is Alpine's default shell - rather than `bash`. The `-dit` flags mean to start the container detached - (in the background), interactive (with the ability to type into it), and - with a TTY (so you can see the input and output). Since you are starting it - detached, you won't be connected to the container right away. Instead, the - container's ID will be printed. Because you have not specified any - `--network` flags, the containers connect to the default `bridge` network. - - ```console - $ docker run -dit --name alpine1 alpine ash - - $ docker run -dit --name alpine2 alpine ash - ``` - - Check that both containers are actually started: - - ```console - $ docker container ls - - CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES - 602dbf1edc81 alpine "ash" 4 seconds ago Up 3 seconds alpine2 - da33b7aa74b0 alpine "ash" 17 seconds ago Up 16 seconds alpine1 - ``` - -3. Inspect the `bridge` network to see what containers are connected to it. - - ```console - $ docker network inspect bridge - - [ - { - "Name": "bridge", - "Id": "17e324f459648a9baaea32b248d3884da102dde19396c25b30ec800068ce6b10", - "Created": "2017-06-22T20:27:43.826654485Z", - "Scope": "local", - "Driver": "bridge", - "EnableIPv6": false, - "IPAM": { - "Driver": "default", - "Options": null, - "Config": [ - { - "Subnet": "172.17.0.0/16", - "Gateway": "172.17.0.1" - } - ] - }, - "Internal": false, - "Attachable": false, - "Containers": { - "602dbf1edc81813304b6cf0a647e65333dc6fe6ee6ed572dc0f686a3307c6a2c": { - "Name": "alpine2", - "EndpointID": "03b6aafb7ca4d7e531e292901b43719c0e34cc7eef565b38a6bf84acf50f38cd", - "MacAddress": "02:42:ac:11:00:03", - "IPv4Address": "172.17.0.3/16", - "IPv6Address": "" - }, - "da33b7aa74b0bf3bda3ebd502d404320ca112a268aafe05b4851d1e3312ed168": { - "Name": "alpine1", - "EndpointID": "46c044a645d6afc42ddd7857d19e9dcfb89ad790afb5c239a35ac0af5e8a5bc5", - "MacAddress": "02:42:ac:11:00:02", - "IPv4Address": "172.17.0.2/16", - "IPv6Address": "" - } - }, - "Options": { - "com.docker.network.bridge.default_bridge": "true", - "com.docker.network.bridge.enable_icc": "true", - "com.docker.network.bridge.enable_ip_masquerade": "true", - "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", - "com.docker.network.bridge.name": "docker0", - "com.docker.network.driver.mtu": "1500" - }, - "Labels": {} - } - ] - ``` - - Near the top, information about the `bridge` network is listed, including - the IP address of the gateway between the Docker host and the `bridge` - network (`172.17.0.1`). Under the `Containers` key, each connected container - is listed, along with information about its IP address (`172.17.0.2` for - `alpine1` and `172.17.0.3` for `alpine2`). - -4. The containers are running in the background. Use the `docker attach` - command to connect to `alpine1`. - - ```console - $ docker attach alpine1 - - / # - ``` - - The prompt changes to `#` to indicate that you are the `root` user within - the container. Use the `ip addr show` command to show the network interfaces - for `alpine1` as they look from within the container: - - ```console - # ip addr show - - 1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1 - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 - inet 127.0.0.1/8 scope host lo - valid_lft forever preferred_lft forever - inet6 ::1/128 scope host - valid_lft forever preferred_lft forever - 27: eth0@if28: mtu 1500 qdisc noqueue state UP - link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff - inet 172.17.0.2/16 scope global eth0 - valid_lft forever preferred_lft forever - inet6 fe80::42:acff:fe11:2/64 scope link - valid_lft forever preferred_lft forever - ``` - - The first interface is the loopback device. Ignore it for now. Notice that - the second interface has the IP address `172.17.0.2`, which is the same - address shown for `alpine1` in the previous step. - -5. From within `alpine1`, make sure you can connect to the internet by - pinging `google.com`. The `-c 2` flag limits the command two two `ping` - attempts. - - ```console - # ping -c 2 google.com - - PING google.com (172.217.3.174): 56 data bytes - 64 bytes from 172.217.3.174: seq=0 ttl=41 time=9.841 ms - 64 bytes from 172.217.3.174: seq=1 ttl=41 time=9.897 ms - - --- google.com ping statistics --- - 2 packets transmitted, 2 packets received, 0% packet loss - round-trip min/avg/max = 9.841/9.869/9.897 ms - ``` - -6. Now try to ping the second container. First, ping it by its IP address, - `172.17.0.3`: - - ```console - # ping -c 2 172.17.0.3 - - PING 172.17.0.3 (172.17.0.3): 56 data bytes - 64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.086 ms - 64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.094 ms - - --- 172.17.0.3 ping statistics --- - 2 packets transmitted, 2 packets received, 0% packet loss - round-trip min/avg/max = 0.086/0.090/0.094 ms - ``` - - This succeeds. Next, try pinging the `alpine2` container by container - name. This will fail. - - ```console - # ping -c 2 alpine2 - - ping: bad address 'alpine2' - ``` - -7. Detach from `alpine1` without stopping it by using the detach sequence, - `CTRL` + `p` `CTRL` + `q` (hold down `CTRL` and type `p` followed by `q`). - If you wish, attach to `alpine2` and repeat steps 4, 5, and 6 there, - substituting `alpine1` for `alpine2`. - -8. Stop and remove both containers. - - ```console - $ docker container stop alpine1 alpine2 - $ docker container rm alpine1 alpine2 - ``` - -Remember, the default `bridge` network is not recommended for production. To -learn about user-defined bridge networks, continue to the -[next tutorial](network-tutorial-standalone.md#use-user-defined-bridge-networks). - ## Other networking tutorials - [Host networking tutorial](network-tutorial-host.md)