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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
첫 번째 Docker for Mac참고 , 나는 옆에 있는 Mac에 Docker를 설치하고 컨테이너를 세워 보고 싶다. Docker Hub를 처음 사용할 때는 계정을 만들어야 합니다. Docker.dmg을 실행하면 Docker가 설치됩니다. Dock...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.