docker學習筆記 docker網路配置

2022-08-03 14:36:10 字數 3886 閱讀 2425

本文主要介紹docker預設的網路行為。其中,包含建立的預設網路型別和如何建立使用者自定義網路。

預設網路:當我們安裝docker後,它會自動建立3個網路,我們也可以通過docker network命令來檢視(在此就不附圖了)

注意:這3個網路是被docker內建的。當我們執行乙個容器需要制定的網路的時候,就可以通過--network引數來指定我們的容器連線到某乙個被指定的網路。

1,bridge網路:預設連線docker0這個網橋(brctl命令在centos中可以使用,yum  install bridge-utils來安裝)

啟動並且執行乙個容器(test1)

從上圖我們可以看到test1容器已經獲取了乙個位址為:172.17.0.2的位址。它和主機的docker0的介面位址是在同乙個網路,並且將主機docker0的介面位址設定成為了閘道器(可以使用route  -n來檢視)

返回物理主機上檢視網橋docker0,這時候我麼可以看到已經多了乙個介面。可以使用:brctl  show  docker0來檢視

bridge模式的網路特點:1,使用乙個linux bridge,預設為docker0,。

2,使用veth對,一頭在容器的網路namespace中,另一頭則在docker0上。

3,該模式下docker container不具有乙個公有的ip 。因為,宿主機的ip位址與veth pair 的ip位址不在同乙個網段內。

4,docker採用nat的方式,將容器內部的服務監聽的埠與宿主機的某乙個埠(port)進行「繫結」,使得宿主機以外的世界可以主動將網路報文傳送到容器內部。

5,外界訪問容器內的服務時,需要訪問宿主機的ip和埠。

6,nat模式由於是在三層網路上實現的手段。所以,它會影響網路的傳輸效率。

7,容器擁有獨立、隔離的網格線,可以讓容器和宿主機一位的世界通過nat建立通訊

效果圖:

在物理主機上檢視iptables的nat表,我們可以看到postrouting鏈中做了位址偽裝。masquerade動作,這樣容器就可以通過源位址轉換成nat訪問外部網路

使用iptables  -t  nat  -vnl 來檢視

顯示詳細的網絡卡資訊:docker network  inspect  bridge顯示bridge的網路情況

2,none網路模式

none模式它不會為docker容器建立任何網路環境,更不會為容器建立網路介面。docker容器若是採用none網路模式,容器內部只能使用loopback網路裝置不會再有其他網路資源。只能使用127.0.0.1的本機網路

例子:啟動乙個容器並且設定為none網路

docker run  -it -d  --network  none   --name test2 cnetos7:new002  /bin/bash

進入容器,並且檢視網路情況:docker exec  -it test2 /bin/bash 

3,host網路模式

host網路模式並沒有為容器建立乙個隔離的網路環境。此時docke容器會和host宿主機共用乙個網路namespace。簡單的說,此時docker的ip位址就是宿主機etho的ip位址

例子:我們在一台10.0網段的機器上用host模式啟動乙個含有web應用的docker容器,並且監聽80埠。當我們在docker容器內執行任何類似於ifconfig命令檢視網路環境時,我們看到的全部是宿主機上的資訊。反觀點說,當外界訪問容器中的應用時,可以直接使用10.0網段。不用任何的nat轉換。在容器中,如檔案系統和程序列表等它還是和宿主機隔離的

4,container模式

指定乙個新建立的容器或者說和乙個已經存在的容器共享乙個network  namespace。它並不是和宿主機共享。container模式是乙個特別的網路模式,兩個容器之間不存在網路隔離,但是卻又和其他容器以及宿主機等存在網路隔離。

注意:由於兩個容器要共享乙個network  namespace 。因此,需要注意埠的衝突情況,不然第二個容器將會被無法啟動

思考:以上等內容,均可以實現容器內部和外部網路進行通訊。那麼,如何讓外部網路來訪問容器呢?

一:外部訪問容器

當容器執行一些網路應用時需要被外部網路訪問,可以使用-p或者-p來引數來指定埠對映

注意:使用-p時,docker會隨機對映乙個埠到容器內部。

-p則需要指定對映埠,並且在乙個指定埠只可以繫結乙個容器。若想繫結多個埠,則可以多次標記-p

例子: docker run  -d -p 8000:80  --name  web-test2  httpd(主機的8000埠和容器web-test2的80埠做了對映。外部訪問時,只需要加宿主機的ip位址和8000埠號。就可以訪問到容器內部的80埠)

同理,我們也可以對映到指定位址的指定埠

例子:宿主機網絡卡配置192.168.1.102

對映指定位址的任意埠

例子:繫結192.168.1.100的任意埠到容器的80埠,本地主機會自動分配乙個埠,--name為啟動容器指定乙個容器名

注:不僅可以繫結tcp埠,也可以繫結udp埠

例子:docker  run   -d  -p  127.0.0.1:5000:5000/udp  --name db4  commit:v1

檢視對映埠配置:docker  port   web-test002(容器名)

docker容器埠對映實際上就是在iptables的nat表中新增dnat規則

二:使用者自定義網路

我們可以使用使用者自定義的橋接網路來控制容器之間的通訊。同時,依舊可以啟用容器名稱和ip位址的dns自動解析。

docker預設提供了用於建立這些網路的預設網路驅動程式。在此,我們可以自動建立的有網路模式有:bridge network 、overlay network、macvlan network、 network plugin和remote  network

當然了,我們也可以根據自身需要建立盡可能多的網路。並且,可以讓其在任何給定的時間將容器連線到0個或者多個網路。甚至,還可以在不重新啟動容器的情況下連線或者斷開網路中的執行容器。當容器連線到多個網路時,它的外部連線是通過第乙個非內部網路提供。bridge  network是docker中最常見的網路型別。

例子:建立乙個bridge網路

docker  network create  --driver  bridge isolated_nw(網路名字)

檢視網路詳細情況:docker  network  inspect  isolated——nw(網路名字)

檢視網路是否存在:docker   network ls

啟動乙個容器然後將其加入新建立的網路:

docker run -it'd  --network  isolated_nw(網路名)--那麼 web002   httpd

注:加入自己建立的網路容器必須在同乙個主機上。網路中的每個容器都可以立即與網路中的其他容器通訊。但是網路本身是將容器與外部網路隔離開的

使用者自定義的網橋網路中,不支援linking。可以這個網路中公開和發布容器埠,也就是expose and  publish。在單一主機上執行乙個相對小的網路,使用橋接網路是有效果的。但是,要想建立乙個大的網路,則需要通過overlay網路實現

docker學習筆記1 docke環境的檢視

本文的操作是在ubuntu作業系統下的。一 環境檢查 當登入乙個安裝了docker的機器後,首先我們要檢查下docker環境如何。1 命令 docker v 上述命令返回安裝的docker的版本資訊,返回的資訊可能如下 docker version 1.9.1,build a34a1d5 說明 執行...

Docker學習收藏系列(一) 認識Docker

1 docker 是乙個軟體平台,讓您可以快速構建 測試和部署應用程式。docker 將軟體打包成名為容器的標準化單元,這些單元具有執行軟體所需的所有功能,包括庫 系統工具 和執行時。使用 docker,您可以將應用程式快速部署和擴充套件到任何環境中,並且知道您的 將執行。2 docker工作原理 ...

Docker系列四 使用UI管理docker容器

一 什麼是portainer?docker pull portainer portainer三 執行portainer portainer執行方式有以下兩種方式 1 單機版執行 如果僅有乙個docker宿主機,則可使用單機版執行,執行以下命令就可以啟動了 docker run d p 9000 90...