1. 程式人生 > 實用技巧 >docker網路

docker網路

docker run建立Docker容器時,可以用–net選項指定容器的網路模式,Docker有以下4種網路模式:

Ø bridge模式:使--net =bridge指定,預設設定;

Ø host模式:使--net =host指定;

Ø none模式:使--net =none指定;

Ø container模式:使用--net =container:NAME orID指定。

參考:http://www.docker.org.cn/dockerppt/111.html

一:docker 容器的網路基礎

1.docker0:

linux的虛擬網橋

在OSI七層模型中的資料鏈路層

2.Linux虛擬網橋的特點:

可以設定ip地址

相當於擁有一個隱藏的虛擬網絡卡

docker0的地址劃分:

IP:172.17.42.1 子網掩碼:255.255.0.0

MAC:02:42:ac:11:00:00到02:42:ac:11:ff:ff

總共提供了65534個地址

通過veth*與容器通訊

3.安裝網橋管理工具:

yum install bridge-utils -y

brctl show 可以檢視到有一個docker0的網橋裝置,下面有很多介面,每個介面都表示一個啟動的docker容器,因為我在docker上啟動了很多容器,所以interfaces較多,如下所

4.修改docker0地址:

ifconfig docker0 192.168.200.1 netmask 255.255.255.0

然後重啟docker:

service docker restart

建立一個容器,進去之後ifconfig可以看見docker0的ip地址是我們剛才設定的了

5.新增虛擬網橋

brctl addbr br0

ifconfig br0 172.16.1.1 netmask 255.255.0.0(我的宿主機docker0地址是172.17.42.1)

更改docker守護程序的啟動配置(docker1.7按如下方式改):

/etc/sysconfig/docker 中新增

other_args="-b=br0"

重啟docker:service docker restart

ps -ef | grep docker 可以看見br0這個引數

docker run -it centos:6.9 /bin/bash

ifconfig可以看見ip地址是172.16.0.1

也就是說們啟動docker時,在/etc/sysconfig/docker裡修改other_args="-b=br0",在建立docker容器的時候,容器的ip就是172.16.*.*,也就是我們新建立的網橋

二:docker 容器的互聯(相互之間的訪問)

下面用到的映象的dockerfile檔案如下:

cd dockerfile/inter-image

vim dockerfile

FROM centos:7
RUN yum install epel-release -y
RUN yum install nginx -y
RUN sed -i "7s/^/#/g" /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD /bin/bash

docker build -t="inter-image" .

允許所有容器間互聯(也就是訪問)

第一種方法:

例:

(1)基於上面的inter-image映象啟動第一個容器test1

docker run --name test1 -it inter-image

進入到容器裡面啟動nginx:

/usr/sbin/ngnx

Ctrl +p,ctrl+q 退出

(2)基於上面的inter-image映象啟動第二個容器test2

docker run --name test2 -it inter-image

ctrl+p和ctrl+q退出容器

(3)進入到test1容器和test2容器,可以看兩個容器的ip,分別是

172.17.0.20和172.17.0.21

docker exec -it test2 /bin/bash

ping 172.17.0.20 可以看見能ping通test1容器的ip

curl http://172.17.0.20

可以訪問到test1容器的內容

上述方法假如test1容器重啟,那麼在啟動就會重新分配ip地址,所以為了使ip地址變了也可以訪問可以採用下面的方法

允許所有容器間互聯(也就是訪問)

第一種方法:

例:

(1)基於上面的inter-image映象啟動第一個容器test1

docker run --name test1 -it inter-image

進入到容器裡面啟動nginx:

/usr/sbin/ngnx

Ctrl +p,ctrl+q 退出

(2)基於上面的inter-image映象啟動第二個容器test2

docker run --name test2 -it inter-image

ctrl+p和ctrl+q退出容器

(3)進入到test1容器和test2容器,可以看兩個容器的ip,分別是

172.17.0.20和172.17.0.21

docker exec -it test2 /bin/bash

ping 172.17.0.20 可以看見能ping同test1容器的ip

curl http://172.17.0.20

可以訪問到test1容器的內容

上述方法假如test1容器重啟,那麼在啟動就會重新分配ip地址,所以為了使ip地址變了也可以訪問可以採用下面的方法

第二種方法:

可以給容器起一個代號,這樣可以直接以代號訪問,避免了容器重啟ip變化帶來的問題

--link

docker run --link=[CONTAINER_NAME]:[ALIAS] [IMAGE][COMMAND]

例:

1.啟動一個test3容器

docker run --name test3 -it inter-image /bin/bash

啟動nginx:

/usr/sbin/nginx

Ctrl+p和ctrl+q退出或者exit退出

2.啟動一個test5容器,--link做連結,那麼當我們重新啟動test3容器時,就算ip變了,也沒關係,我們可以在test5上ping別名webtest

docker run --name test5 -it --link=test3:webtest inter-image /bin/bash

ctrl+p和ctrl+q退出

3.test3和test5的ip分別是172.17.0.22和172.17.0.24

4.重啟test3容器

docker restart test3

發現ip變成了172.17.0.25

5.進入到test5容器

docker exec -it test5 /bin/bash

ping test3容器的ip別名webtest可以ping通,儘管test3容器的ip變了也可以通

拒絕容器互聯(拒絕容器相互訪問)

docker守護程序的啟動項

--icc=false

修改啟動項的配置檔案

vim /etc/sysconfig/docker

在最後一行新增如下引數:

other_args="-icc=false"

重啟docker容器配置生效,然後分別執行test3,test5,在test5上ping test3的ip(webtest),會發現ping不通