Docker (6) Network
1. 四種容器的網路架構:
根據容器網路的開放程度我們可以把它分成四類 [1]。
- Closed containers: 只有 loopback 能用。
- Bridged containers: 比 Closed containers 好一點,可以訪問外部網路。
- Joined containers: 使用其他容器的網路介面。
- Open containers: 使用 host 的網路。
2. Closed containers:
使用 --net none 創建一個 Closed container。
$ sudo docker run \ --net none \ --rm \ alpine \ ip addr
ip addr 告訴我們它只有 lo 能用。
1: lo:mtu 65536 qdisc noqueue state UNKNOWN qlen 1000 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
3. Bridged containers:
使用 --net bridge 創建一個 Bridged container(--net bridge 其實是 Docker 預設值,所以可以忽略)。
$ sudo docker run \ --net bridge \ --rm \ alpine \ ping www.google.com -c 10
4. Publish:
開一個 nginx 容器將其 port 80 綁到主機的 port 80。
-p(--publish) 的格式是 host port:container port。
$ sudo docker run \ -it \ --rm \ -p 80:80 \ nginx
這時你打開瀏覽器輸入 127.0.0.1:80 應該會看到 nginx 畫面。
再試一次,這次綁到主機的 8080。
$ sudo docker run \ -it \ --rm \ -p 8080:80 \ nginx
-p 還有另一個常用的格式是 host ip:host port:container port。
5. Joined containers:
Joined containers 會共享網路。
先開一個 alp1 容器。
$ sudo docker run \ -it \ --rm \ --name alp1 \ --hostname alp1 \ alpine
再開一個 alp2 容器,使用 alp1 網路。
$ sudo docker run \ -it \ --rm \ --net container:alp1 \ --name alp2 \ alpine
不論是 ifconfig 還是 host 你會發現 alp2 是使用 alp1 的網路。
alp2$ cat /etc/hosts xxx.xxx.xxx.xxx alp1
6. Open containers:
創建一個能訪問主機網路的容器。
$ sudo docker run \ --rm \ --net host \ container alpine:latest \ ip addr
Reference:
[1] JEFF NICKOLOFF: Docker in Action-Manning Publications Co.(2016)
留言
張貼留言