Docker容器的網路連線

2021-09-07 16:49:28 字數 4869 閱讀 5992

yw1989@ubuntu:~$ ifconfig

docker0 link encap:ethernet hwaddr 02:42:97:61:42:9f

inet addr:172.17.0.1 bcast:0.0.0.0 mask:255.255.0.0inet6 addr: fe80::42:97ff:fe61:429f/64scope:link

up broadcast running multicast mtu:1500 metric:1rx packets:2517 errors:0 dropped:0 overruns:0 frame:0tx packets:2635 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0rx bytes:105967 (105.9 kb) tx bytes:18523253 (18.5mb)

docker的守護程序是通過docker0為docker容器提供網路服務。docker0是linux的虛擬網橋,網橋是資料鏈路層的裝置。通過mac位址(網路裝置的實體地址)對網路進行劃分並且在不同的網路之間傳遞資料。linux的虛禮網橋:1.可以設定ip位址2.相當於乙個虛擬網絡卡。通常來講ip位址是網路層裝置才有的,但是linux的網橋是網路裝置的一種,只要是網路裝置就可以設定ip位址。當虛擬網橋有ip位址之後,linux就可以通過路由表或者ip表規則在網路層定位網橋,這個網絡卡的名字就是虛擬網橋的名字就是docker0。

ip:172.17.42.1,子網掩碼:255.255.0.0,通過子網掩碼可以知道提供了65534個ip位址。docker也會根據ip的範圍為每乙個容器提供mac位址,從而避免mac位址衝突,mac:02:42:ac:11:00:00到02:42:ac:11:ff:ff。docker守護程序在乙個容器啟動時會建立網路的2端,一端是在容器中的網路裝置,另一端是在執行dokcer守護程序的主機上開啟乙個名為veth*的介面用來實現docker0網橋與容器的通訊。

yw1989@ubuntu:~$ sudo apt-get install bridge-utils  :安裝網橋管理工具

root@ubuntu:/# brctl show :檢視網橋

bridge name bridge id stp enabled inte***ces

docker0 8000.02429761429fno veth5ef7f82

root@ubuntu:/# docker run -it --name bridge_1 ubuntu /bin/bash

root@c97b96f74c0a:/# : 建立乙個容器並進來

root@c97b96f74c0a:/# ifconfig : 檢視ip位址

eth0 link encap:ethernet hwaddr 02:42:ac:11:00:03inet addr:172.17.0.3 bcast:0.0.0.0 mask:255.255.0.0inet6 addr: fe80::42:acff:fe11:3/64scope:link

up broadcast running multicast mtu:1500 metric:1rx packets:6542 errors:0 dropped:0 overruns:0 frame:0tx packets:5115 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0rx bytes:25377877 (25.3 mb) tx bytes:281529 (281.5kb)

lo link encap:local loopback

inet addr:127.0.0.1 mask:255.0.0.0inet6 addr: ::1/128scope:host

up loopback running mtu:65536 metric:1rx packets:0 errors:0 dropped:0 overruns:0 frame:0tx packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000rx bytes:0 (0.0 b) tx bytes:0 (0.0b)

有時候不想使用docker0的網橋,需要新增虛禮網橋:

$sudo brctl addbr br0

$sudo ifconfig br0 192.168.100.1 netmask 255.255.255.0更改docker守護程序的啟動配置:

/etc/default/docker中新增docker_ops

-b=br0

重啟docker的守護程序:sudo service docker restart

預設情況下允許所有容器的互聯,可以拒絕容器間的連線和允許特定容器間的連線。

同宿主機下的容器是通過預設網橋連線的,同一宿主機下的容器都是可以連線的,--icc=true

啟動第乙個容器:

$docker run -it --name 容器名1 映象名(已經指定了命令不用在指定命令了)

#nginx : 容器中啟動ngin服務,ctrl+pq 退出容器,保證容器一直執行

啟動第二個容器:

$docker run -it --name 容器名2 映象名(已經指定了命令不用在指定命令了)

$docker attach 容器1

#ifconfig 檢視容器1的位址

#ping 容器2的位址

$docker attach 容器2

//容器1 的位址來訪問1提供的nginx服務。服務可以正常訪問。

停止容器並且重新起來的時候ip位址發生了變化。所以容器的ip位址是乙個不可靠的連線。

--link : 指定容器名和代號,就可以通過代號來訪問容器。就避免了因為ip位址變化帶來的影響。docker會自動修改別名和ip的位址的對映。

$docker run --link=[container_name]:[alias] [image] [command]

$docker run -it --name yw3 --link=cct1:webtest3 yw

#ping webtest3 :ping 容器的別名

拒絕所有容器的互聯:--icc=false

修改docker的配置檔案:$sudo vim /etc/default/docker,需要重啟docker的服務$sudo service docker restart。

重啟3個容器:docker restart c1 c2 c3

允許特定容器的訪問:--icc=false --iptables=true --link (--icc=false表示拒絕訪問,--iptables=true允許特定容器的訪問, --link允許訪問的位址)

$sudo vim /etc/default/docker

檔案最後新增docker_opts=」--icc=false --iptables=true

」重啟docker的服務$sudo service docker restart。

重啟3個容器:docker restart c1 c2 c3

$docker run -it --name yw3 --link=cct4:webtest4 yw

容器與外部網路的訪問:ip_forward,iptables,允許埠對映訪問,限制ip訪問容器。

ip_forward:是linux系統中的乙個變數,他的值決定了系統是否會**流量,docker守護程序的預設引數中也有ip_forward選項,預設是true,使用這個預設值時docker會在守護程序啟動時將系統的ip_forward設定為1,也就是允許流量**,可以使用系統自帶的工具檢視資料**是否開啟,$sysctl net.ipv4.conf.all.forwarding

首先通過ps命令檢視docker是否已經執行了:

$ps -ef |grep docker

檢視ip_forward:

yw1989@ubuntu:~$ sudo sysctl net.ipv4.conf.all.forwarding

net.ipv4.conf.all.forwarding = 1: 已經被置為了1

iptables:是與linux核心整合的包過濾防火牆系統,幾乎所有的linux發行版都會包含iptables功能。

iptables包含了圖中所給出的功能,圖給出了在iptables中網路的資料報是如何傳遞的。

每乙個大的方框就是iptables中的乙個鏈(chain),每乙個鏈就是資料處理的乙個環節,在每個環節中又包含了不同的操作,prerouting就包含了nat,mangle,raw這3種操作。當乙個資料報進入網絡卡時首先進入了prerouting鏈,如果資料報的目的是本機ip會進入下面的input鏈,然後交給本機處理。處理完之後發出,經過output鏈,然後達到postrouting鏈。當資料的目的地不是本機會經過forward鏈然後經過postrouting鏈發出。

iptables不同的層級:

1.表(table): 鏈中的nat,mangle,raw,filter就是

2.鏈(chain):資料處理中的不同環節,不同階段

3.規則(rule):每個鏈下的操作

filter表中包含的鏈:input,output,forward

iptables可以配置特定ip訪問特定容器。docker依賴了iptables這個防火牆設定來提供容器的訪問限制。

docker容器的網路連線

樓主因為剛開始學docker,如果這個時候就接觸大量的概念 理論知識 肯定會反感的 咱們先來實踐 sudo apt get install y bridge utils 這個命令安裝乙個網橋管理程式.首先解決一下在容器中好多命令whereis 不到的情況 先說一下問題 樓主使用 root syx v...

docker容器間的網路連線

bridge network 相關命令 容器間的連線方式目前了解到的有兩種。legacy linking 使用容器名進行連線,實際上它建立了乙個橋接的網路,在這個網路裡,容器之間可以相互通訊。bridge network 這種方式建立了乙個自定義的橋接網路,它的型別是isolated network...

Docker 內部之間的網路連線

1.1 docker networking 可以將容器連線到不同的宿主機器上。1.2 通過 docker networking 連線的容器可以在無需更新連線的情況下,對停止 啟動或者重啟容器。而使用docker link 可能需要修改一些配置,或者重啟相應的容器來維護docker之間的連線。1.3 ...