docker實戰系列之docker網絡

bridge模式

當Docker進程啓動時,會在主機上建立一個名爲docker0的虛擬網橋,此主機上啓動的Docker容器會鏈接到這個虛擬網橋上。虛擬網橋的工做方式和物理交換機相似,這樣主機上的全部容器就經過交換機連在了一個二層網絡中。從docker0子網中分配一個 IP 給容器使用,並設置 docker0 的 IP 地址爲容器的默認網關。在主機上建立一對虛擬網卡veth pair設備,Docker 將 veth pair 設備的一端放在新建立的容器中,並命名爲eth0(容器的網卡),另外一端放在主機中,以vethxxx這樣相似的名字命名,並將這個網絡設備加入到 docker0 網橋中。docker

bridge模式是 docker 的默認網絡模式,不寫–net參數,就是bridge模式。使用docker run -p時,docker 實際是在iptables作了DNAT規則,實現端口轉發功能。可使用iptables -t nat -vnL查看。bash

下面先建立一個新的 Docker 網絡。網絡

docker network create -d bridge my-net
-d 參數是指定docker網絡類型.
複製代碼

運行一個容器並鏈接到新建的my-net網絡.測試

docker run -it --name test1 --network my-net busybox sh
複製代碼

打開新的終端,再運行一個容器並加入到my-net網絡ui

docker run  -it --name test2 --network my-net busybox sh

複製代碼

再打開一個新的終端查看容器信息spa

docker container ls
複製代碼

在兩個容器之間互pingcode

ping test1
ping test2
複製代碼

用ping來測試鏈接,它會解析成對端的ip進程

host模式

若是啓動容器的時候使用host模式,那麼這個容器將不會得到一個獨立的Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出本身的網卡,配置本身的 IP 等,而是使用宿主機的 IP 和端口。可是,容器的其餘方面,如文件系統、進程列表等仍是和宿主機隔離的。ip

創建兩臺以網絡模式爲主機模式的主機路由

docker run -itd  --net=host --name test3 busybox
docker run -itd  --net=host --name test4 busybox

進入到容器中
docker  exec -it test3 /bin/bash
docker  exec -it test4 /bin/bash

查看網絡信息
ifconfig 
route -n
複製代碼

container模式

這個模式指定新建立的容器和已經存在的一個容器共享一個 Network Namespace,而不是和宿主機共享。新建立的容器不會建立本身的網卡,配置本身的 IP,而是和一個指定的容器共享 IP、端口範圍等。一樣,兩個容器除了網絡方面,其餘的如文件系統、進程列表等仍是隔離的。

建一個container模式的容器
docker run -itd --net=container:test1 --name test5 busybox

進入到容器
docker exec -it test5 /bin/bash
docker exec -it test1 /bin/bash

查看網絡信息
ifconfig
route -n

複製代碼

none模式

使用none模式,Docker 容器擁有本身的 Network Namespace,可是,並不爲Docker 容器進行任何網絡配置。也就是說,這個 Docker 容器沒有網卡、IP、路由等信息。須要咱們本身爲 Docker 容器添加網卡、配置 IP 等。

創建一個none模式的容器
docker run -itd --net=none --name test6 busybox

進入到容器中去
docker exec -it test6 sh

查看網絡信息
ifconfig
route -n
複製代碼
相關文章
相關標籤/搜索