Docker 정리 노트 (2)
10752 단어 필기
[ZW@docker ~]# ifconfig | grep -C5 docker0
docker0: flags=4099 mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:53ff:fef6:4154 prefixlen 64 scopeid 0x20
ether 02:42:53:f6:41:54 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
docker 네트워크 메커니즘:
[ZW@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
84b330d92923 bridge bridge local
f70243acdd4c host host local
ed7f69c4a866 none null local
docker는 가상 기회를 시작하여 로컬에서 네트워크 장치를 비우고, 절반은 가상 장치에, 절반은 docker0에 꽂아서 통신을 완성합니다.ifconfig는 가상 카드를 볼 수 있고 iplink show는 다른 절반의 카드를 볼 수 있다(즉 가상 기기에서 보는eth0).
[ZW@docker ~]# docker container start web && ifconfig | grep veth
web
vethfa4b6f6: flags=4163 mtu 1500
kvm 외부에서 가상 기기에 접근하는 방법은nat 전송이나 브리지(내가 함부로 말한 것)만 가능하고 docker는 실제 기기나 다른 가상 기기와 네트워크 공간을 공유하는 방식으로 진행할 수 있다. 즉, A 가상 기기는 mount user pid가 있고 B도 독립된 mount user pid가 있으며 AB 또는 AB 진짜 기기는 네트워크 UTS ipc를 공유한다.(즉 연맹식 네트워크, 개방식 네트워크(open container)) 그래서 docker는 이런 몇 가지 네트워크를 가질 수 있다. 1.none: 통신이 필요 없는 외딴섬 네트워크2.bridge: 브리지 네트워크 (docker 기본 네트워크 방식) 3.joinded: 연맹 네트워크 A기 B기 4.open container: 호스트 공유 네트워크 A, B 팩시밀리, (컨소시엄 네트워크의 확장)
docker 네트워크 설정: 런 용기에서 네트워크 방식을 지정할 수 있습니다.
[ZW@docker ~]# docker container run --help | grep network
--network string Connect a container to a
network (default "default")
네트워크bridge,host,none의 네트워크 정보를 볼 수 있습니다
[ZW@docker ~]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "dacbc276f6b07d734709317892d66abb045f88f0ff38fbbb5f8c78773ce36549",
"Created": "2018-10-28T11:05:07.769121664+08:00",
"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,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"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": {}
}
]
확장 IP 명령: centos에서 네트워크 이름 공간 "IP"명령을 수동으로 조작할 수 있습니다.
[root@localhost ~]# rpm -qf /sbin/ip
iproute-3.10.0-74.el7.x86_64
[root@localhost ~]# ip netns help
Usage: ip netns list
ip netns add NAME #
ip netns set NAME NETNSID
ip [-all] netns delete [NAME]
ip netns identify [PID]
ip netns pids NAME
ip [-all] netns exec [NAME] cmd ... #
ip netns monitor
ip netns list-id
네트워크 이름 공간을 수동으로 추가할 수 있습니다.
[root@localhost ~]# ip netns add r1
[root@localhost ~]# ip netns add r2
[root@localhost ~]# ip netns list
r2
r1
또한 생성된 이름 공간에서 명령을 실행할 수 있습니다. 기본적으로 Lo 로컬 NIC는 하나만 표시됩니다.
[root@localhost ~]# ip netns exec r1 ifconfig -a
lo: flags=8 mtu 65536
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
iplink 명령은 이름 공간에 네트워크 카드 쌍을 만들 수 있습니다.
[root@localhost ~]# ip link help
Usage: ip link add [link DEV] [ name ] NAME
...
수동으로 NIC 쌍을 만들려면 다음과 같이 하십시오.
[root@localhost ~]# ip link add name eth1.1 type veth peer name veth1.2
#name type peer
[root@localhost ~]# ip link
5: [email protected]: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether ce:ac:2e:6d:73:43 brd ff:ff:ff:ff:ff:ff
6: [email protected]: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether ee:47:86:a6:b9:1b brd ff:ff:ff:ff:ff:ff
ip set 수동으로 할 수 있습니다
[root@localhost ~]# ip link set dev veth1.2 netns r1
[root@localhost ~]# ip link
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:02:de:1c brd ff:ff:ff:ff:ff:ff
3: virbr0: mtu 1500 qdisc noqueue state DOWN mode DEFAULT qlen 1000
link/ether 52:54:00:0b:9b:e5 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT qlen 1000
link/ether 52:54:00:0b:9b:e5 brd ff:ff:ff:ff:ff:ff
6: eth1.1@if5: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether ee:47:86:a6:b9:1b brd ff:ff:ff:ff:ff:ff link-netnsid 0
[root@localhost ~]# ip netns exec r1 ifconfig -a
lo: flags=8 mtu 65536
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
veth1.2: flags=4098 mtu 1500
ether ce:ac:2e:6d:73:43 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
IP 링크 명령으로 이름을 변경할 수도 있습니다.
[root@localhost ~]# ip netns exec r1 ip link set dev veth1.2 name eth0
[root@localhost ~]# ip netns exec r1 ifconfig -a
eth0: flags=4098 mtu 1500
ether ce:ac:2e:6d:73:43 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=8 mtu 65536
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
현재 양쪽에 모두 네트워크 카드가 있으니 주소로 활성화할 수 있습니다.
[root@localhost ~]# ifconfig eth1.1 192.168.0.1/24 up
[root@localhost ~]# ip netns exec r1 ifconfig eth0 192.168.0.3/24
[root@localhost ~]# ping 192.168.0.3
PING 192.168.0.3 (192.168.0.3) 56(84) bytes of data.
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 192.168.0.3: icmp_seq=2 ttl=64 time=0.076 ms
마찬가지로 숙성 호스트의 네트워크 카드를 r2에 옮겨 r1r2로 통신하게 하고 네트워크 명칭 공간, 네트워크 카드의 조합을 통해 네트워크 환경을 모의할 수 있다.
네 가지 네트워크:none:lo만 있고 외부와 통신하지 않는다bridged:반은 용기에 있고 반은docker0교에 있고 다리에 있다.(기본값)joined: A 컨테이너와 B 컨테이너 연합식,open container: 실제 컴퓨터 네트워크 공간을 직접 공유
--network -h --dns dns:
[root@docker ~]# docker run --name t1 -it --network bridged - -dns 8.8.8.8 --rm busybox:latest
hosts 파일에 주입 가능 – add-host
[root@docker ~]# docker run --name t1 -it -h t1 --add-host www.baidu.com:1.1.1.1 busybox:latest
용기 안의 주소는 내부 네트워크이기 때문에 네트워크는 도달할 수 없습니다. 우리는 그것을 폭로해야 합니다. - P: dnat 변환을 하면
[root@docker ~]# docker run --name t1 -it -p 80 --rm nginx:1.14-alpine
[root@docker ~]# docker port t1
80/tcp -> 0.0.0.0:32769
[root@docker ~]# iptables -t nat -vnL | grep dpt
0 0 MASQUERADE tcp -- * * 172.17.0.2 172.17.0.2 tcp dpt:80
1 60 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:32768 to:172.17.0.2:80
용기 주소를 실제 기기의 32768 포트에 비추는 것을 볼 수 있습니다.
- 실제 컴퓨터에 비치는 ip의 포트를 직접 지정할 수도 있습니다.
docker run --name t1 -it -p 192.168.64.100:5555:80 --rm nginx:1.14-alpine
[root@docker ~]# docker port t1
80/tcp -> 192.168.64.100:5555
Joined container 컨테이너두 컨테이너는 독립된 PID, USER.MOUNT 공유 NETWORK, IPC, UTS
시작할 때 - 네트워크 유형 지정: A 컨테이너 중:
docker run --name b1 -it --rm busybox:latest
B 용기 중;
docker run --name b2 --network container:b1 -it --rm busybox:latest
용기에ifconfig를 제거하면 두 용기가 공용 네트워크 공간을 사용할 수 있습니다.
공유 호스트(직접 노출 포트),
docker run --name b2 --network host -it --rm busybox:latest
docker0 수정하기;docker0 다리의 네트워크 속성 정보를 사용자 정의합니다:/etc/docker/daemon.json 파일
{
"bip": "192.168.1.5/24",
"fixed-cidr": "10.20.0.0/16",
"fixed-cidr-v6": "2001:db8::/64",
"mtu": 1500,
"default-gateway": "10.20.1.1",
"default-gateway-v6": "2001:db8:abcd::89",
"dns": ["10.20.1.2","10.20.1.3"]
}
dockerd 데몬의 C/S입니다. 기본적으로 Unix Socket 형식의 주소만 수신합니다./var/run/docker.sock;TCP 소켓을 사용하는 경우 vim/etc/docker/daemon.json:
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
수동으로 네트워크 브리지 만들기;
ip link set dev docker network create -d bridge --subnet 172.26.0.0/16 --gateway 172.26.0.1 mybr0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
static 간단한 설명static 방법은 일반적으로 정적 방법이라고 부른다. 정적 방법은 어떠한 대상에 의존하지 않고 접근할 수 있기 때문에 정적 방법에 있어this는 없다. 왜냐하면 그 어떠한 대상에도 의존하지 않기 때문이다. 대상이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.