Docker 학습 노트 7: Docker 네트워크

24530 단어 Docker
네트워크 구성
Docker를 설치하면 기본적으로 세 개의 네트워크가 자동으로 생성됩니다.
$ docker network ls

NETWORK ID          NAME                DRIVER
7fca4eb8c647        bridge              bridge
9f904ee27bf5        none                null
cf03ee007fb4        host                host

Docker 컨테이너는 기본적으로 bridge 네트워크에서 실행됩니다.기본bridge는 자동 서비스 발견을 지원하지 않기 때문에 용기 이름이나 원하는/etc/hosts ping은 실패하지만 사용자 정의bridge 네트워크는 자동 서비스 발견을 지원하며 용기 이름 기반 ping을 사용할 수 있습니다.기본bridge에서 이름과 IP의 연결을 지원하려면 docker run --link 명령을 사용할 수 있습니다.
사용자 정의bridge 네트워크
$ docker network create simple-network

69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a

$ docker network inspect simple-network
[
    {
        "Name": "simple-network",
        "Id": "69568e6336d8c96bbf57869030919f7c69524f71183b44d80948bd3927c87f6a",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.22.0.0/16",
                    "Gateway": "172.22.0.1/16"
                }
            ]
        },
        "Containers": {},
        "Options": {}
    }
]

$ docker network ls

NETWORK ID          NAME                DRIVER
9f904ee27bf5        none                null
cf03ee007fb4        host                host
7fca4eb8c647        bridge              bridge
c5ee82f76de3        isolated_nw         bridge
docker run --network= 옵션을 사용하여 사용자 정의 네트워크에서 컨테이너를 시작합니다.
$ docker run --network=isolated_nw -itd --name=container3 busybox

8c1a0a5be480921d669a073393ade66a3fc49933f08bcc5515b37b8144f6d47c

$ docker network inspect isolated_nw
[
    {
        "Name": "isolated_nw",
        "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "8c1a0a5be480921d669a073393ade66a3fc49933f08bcc5515b37b8144f6d47c": {
                "EndpointID": "93b2db4a9b9a997beb912d28bcfc117f7b0eb924ff91d48cfa251d473e6a9b08",
                "MacAddress": "02:42:ac:15:00:02",
                "IPv4Address": "172.21.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

Docker Engine swarm 모드를 사용하여 네트워크 덮어쓰기
swarm 모드의 관리 노드에서 만든 덮어쓰기 네트워크는 집단에서 서비스가 필요한 노드에만 사용할 수 있으며 덮어쓰기 네트워크를 사용할 때 관리 노드는 자동으로 덮어쓰기 네트워크를 서비스 작업을 실행하는 노드까지 확장합니다.
덮어쓰기 네트워크를 만들고 swarm에서 노드를 관리하는 서비스를 만들려면 다음과 같이 하십시오.
# Create an overlay network `my-multi-host-network`.
$ docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  my-multi-host-network

400g6bwzd68jizzdx5pgyoe95

# Create an nginx service and extend the my-multi-host-network to nodes where
# the service's tasks run.
$ docker service create --replicas 2 --network my-multi-host-network --name my-web nginx

716thylsndqma81j6kkkb5aus

swarm에 사용되는 덮어쓰기 네트워크는 docker run 집단의 일부분이 아닌 용기에 사용할 수 없습니다.
swarm 그룹 만들기
1. swarm 마스터를 만듭니다.
 $ docker-machine create \
 -d virtualbox \  --swarm --swarm-master \  --swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \  --engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \  --engine-opt="cluster-advertise=eth1:2376" \  mhs-demo0

2. 다른 호스트를 만들고 swarm 클러스터에 추가합니다.
 $ docker-machine create -d virtualbox \
     --swarm \      --swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \      --engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \      --engine-opt="cluster-advertise=eth1:2376" \    mhs-demo1

3. 시스템을 확인하고 모든 호스트가 부팅되어 있는지 확인합니다.
$ docker-machine ls

 NAME         ACTIVE   DRIVER       STATE     URL                         SWARM
 default      -        virtualbox   Running   tcp://192.168.99.100:2376
 mh-keystore  *        virtualbox   Running   tcp://192.168.99.103:2376
 mhs-demo0    -        virtualbox   Running   tcp://192.168.99.104:2376 mhs-demo0 (master)
 mhs-demo1    -        virtualbox   Running   tcp://192.168.99.105:2376 mhs-demo0

덮어쓰기 네트워크 만들기
1. docker 환경을 swarm 호스트로 설정합니다.
$ eval $(docker-machine env --swarm mhs-demo0)

docker-machine의 --swarm 로고를 사용하여 docker 명령을 단독 swarm 정보로 제한합니다.
2. docker info 명령을 사용하여 이 swarm을 확인합니다.
 $ docker info

 Containers: 3
 Images: 2
 Role: primary
 Strategy: spread
 Filters: affinity, health, constraint, port, dependency
 Nodes: 2
 mhs-demo0: 192.168.99.104:2376
 └ Containers: 2
 └ Reserved CPUs: 0 / 1
 └ Reserved Memory: 0 B / 1.021 GiB
 └ Labels: executiondriver=native-0.2, kernelversion=4.1.10-boot2docker, operatingsystem=Boot2Docker 1.9.0 (TCL 6.4); master : 4187d2c - Wed Oct 14 14:00:28 UTC 2015, provider=virtualbox, storagedriver=aufs
 mhs-demo1: 192.168.99.105:2376
 └ Containers: 1
 └ Reserved CPUs: 0 / 1
 └ Reserved Memory: 0 B / 1.021 GiB
 └ Labels: executiondriver=native-0.2, kernelversion=4.1.10-boot2docker, operatingsystem=Boot2Docker 1.9.0 (TCL 6.4); master : 4187d2c - Wed Oct 14 14:00:28 UTC 2015, provider=virtualbox, storagedriver=aufs
 CPUs: 2
 Total Memory: 2.043 GiB
 Name: 30438ece0915

3. 네트워크 구축overlay:
 $ docker network create --driver overlay --subnet=10.0.9.0/24 my-net
--subnet 인자를 사용하는 것을 강력히 권장합니다. 지정하지 않으면 docker 수호 프로세스가 자동으로 서브넷을 선택하고 이미 존재하는 네트워크와 중복될 수 있습니다.
4. 테스트 네트워크 실행 중:
 $ docker network ls

 NETWORK ID          NAME                DRIVER
 412c2496d0eb        mhs-demo1/host      host
 dd51763e6dd2        mhs-demo0/bridge    bridge
 6b07d0be843f        my-net              overlay
 b4234109bd9b        mhs-demo0/none      null
 1aeead6dd890        mhs-demo0/host      host
 d0bb78cbe7bd        mhs-demo1/bridge    bridge
 1c0eb8f69ebb        mhs-demo1/none      null

5. 각 에이전트로 한 번에 전환하고 네트워크를 나열합니다.
 eval $(docker-machine env mhs-demo0)

 $ docker network ls

 NETWORK ID          NAME                DRIVER
 6b07d0be843f        my-net              overlay
 dd51763e6dd2        bridge              bridge
 b4234109bd9b        none                null
 1aeead6dd890        host                host

 $ eval $(docker-machine env mhs-demo1)

 $ docker network ls

 NETWORK ID          NAME                DRIVER
 d0bb78cbe7bd        bridge              bridge
 1c0eb8f69ebb        none                null
 412c2496d0eb        host                host
 6b07d0be843f        my-net              overlay

네트워크에서 애플리케이션을 실행합니다.
1. swarm 주인에게 환경을 가리킵니다.
 $ eval $(docker-machine env --swarm mhs-demo0)

2. mhs-demo0 인스턴스에서 Nginx 웹 서비스를 시작합니다.
 $ docker run -itd --name=web --network=my-net --env="constraint:node==mhs-demo0" nginx

3. mhs-demo1 인스턴스에서 BusyBox 인스턴스를 실행하고 Nginx 서비스의 홈 페이지 내용을 가져옵니다.
 $ docker run -it --rm --network=my-net --env="constraint:node==mhs-demo1" busybox wget -O- http://web

 Unable to find image 'busybox:latest' locally
 latest: Pulling from library/busybox
 ab2b8a86ca6c: Pull complete
 2c5ac3f849df: Pull complete
 Digest: sha256:5551dbdfc48d66734d0f01cafee0952cb6e8eeecd1e2492240bf2fd9640c2279
 Status: Downloaded newer image for busybox:latest
 Connecting to web (10.0.0.2:80)
 
 <html>
 <head>
 <title>Welcome to nginx!title>
 <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } style>
 head>
 <body>
 <h1>Welcome to nginx!h1>
 <p>If you see this page, the nginx web server is successfully installed and
 working. Further configuration is required.p>

 <p>For online documentation and support please refer to
 <a href="http://nginx.org/">nginx.orga>.<br/>
 Commercial support is available at
 <a href="http://nginx.com/">nginx.coma>.p>

 <p><em>Thank you for using nginx.em>p>
 body>
 html>
 -                    100% |*******************************|   612   0:00:00 ETA

외부의 연결성을 검사하다
다중 호스트 네트워크에 연결된 컨테이너는 자동으로 docker_gwbridge 네트워크에 연결됩니다.이 네트워크는 컨테이너가 그룹 외부에 외부 링크를 가지도록 허용합니다.
1. swarm 에이전트로 환경 전환:
 $ eval $(docker-machine env mhs-demo1)

2. 나열된 네트워크를 통해docker_gwbridge 네트워크를 확인합니다.
 $ docker network ls

 NETWORK ID          NAME                DRIVER
 6b07d0be843f        my-net              overlay
 dd51763e6dd2        bridge              bridge
 b4234109bd9b        none                null
 1aeead6dd890        host                host
 e1dbd5dff8be        docker_gwbridge     bridge

3. swarm 주상에서 1, 2단계 반복:
 $ eval $(docker-machine env mhs-demo0)

 $ docker network ls

 NETWORK ID          NAME                DRIVER
 6b07d0be843f        my-net              overlay
 d0bb78cbe7bd        bridge              bridge
 1c0eb8f69ebb        none                null
 412c2496d0eb        host                host
 97102a22e8d2        docker_gwbridge     bridge

4. Nginx 컨테이너의 네트워크 인터페이스를 테스트합니다.
 $ docker exec web ip addr

 1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default
 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
 22: eth0:  mtu 1450 qdisc noqueue state UP group default
 link/ether 02:42:0a:00:09:03 brd ff:ff:ff:ff:ff:ff
 inet 10.0.9.3/24 scope global eth0
     valid_lft forever preferred_lft forever
 inet6 fe80::42:aff:fe00:903/64 scope link
     valid_lft forever preferred_lft forever
 24: eth1:  mtu 1500 qdisc noqueue state UP group defaMacvlan Network Driver¶
ult
 link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff
 inet 172.18.0.2/16 scope global eth1
     valid_lft forever preferred_lft forever
 inet6 fe80::42:acff:fe12:2/64 scope link
     valid_lft forever preferred_lft forever

좋은 웹페이지 즐겨찾기