DOCKER-1-4-容器網路
1.使用ip命令,檢視相關包是否安裝,沒有安裝的話進行安裝(這裡不操作演示了)。通過netns新增r1和r2兩個網路名稱空間,但此時是沒有網絡卡的。通過exec在r1中執行ifconfig指令,沒有輸出,因為沒有網絡卡。加-a引數檢視r1和r2,只有迴環測試。
2.新增一堆veth裝置veth1.1和veth1.2,veth裝置是成對出現的。將其中一個裝置veth1.2挪到網路名稱空間r1中。再次檢視宿主機node3發現只有裝置veth1.1。同時,可以把r1空間中的veth1.2重新命名為eth0。注意:這時的裝置是還沒有啟用的。給宿主機上的裝置veth1.1設定網路地址並激活。給網路名稱空間r1中的eth0設定網路地址並激活。veth1.1嘗試與eth0進行ping通訊,可以通訊。
3.將veth1.1移到r2空間,預設是沒有啟用的狀態。為veth1.1設定ip地址並激活。確認狀態後,嘗試ping r1空間中的eth0,發現網路是通的。
4.執行一個容器busybox-t1,映象busybox:latest,注意預設是latest,指令預設是/bin/sh。--rm引數可以設定退出時自動刪除容器。通過--network 指明網路為bridge,這個和不指明時一樣的,因為預設就是bridge。如果使用none,則不會建立網路,此時為封閉式容器。
5.再次建立一個容器,檢視主機名,發現時容器的id,退出容器。再次建立容器並使用-h引數來指定主機名。進入容器,檢視本地解析,發現本機可以解析。檢視路由解析,發現使用的是宿主機的路由解析。嘗試解析百度的網址,發現可以解析。
6.通過-dns 可以指明解析dns,通過--dns-search可以指明搜尋域,--add-host可以增加主機解析。
7.使用帶httpd服務的映象建立容器myweb。可以通過內部網路訪問。通過-p引數來指定80埠進行對外發布。
8.檢視宿主機的網路裝置資訊。通過網路地址過濾來檢視容器的80埠轉換到宿主機的32768埠。嘗試通過瀏覽器訪問宿主機的32768埠,被轉發到容器的80埠,訪問到網頁。關閉容器後,相關的轉發也跟著被關閉。
9.再次把容器run起來。通過port檢視指定容器的對映。可以發現將容器的80埠轉發到所有宿主機地址的32769埠。關閉容器後,再次通過-p引數指定轉發到宿主機的一個地址。通過port檢視埠轉發,可以看見轉發到指定地址。也可以指定將容器的80埠轉發到宿主機所有地址的80埠。也可以指定主機地址和埠進行埠轉發。
10.用busybox起一個容器b1和一個容器b2,發現網路是分開的。關掉b2,增加--network引數container b1再次啟動容器b2。再次檢視網路裝置資訊,b1和b2共用一個網路地址。但此時檔案目錄仍然是隔離的,可以在b1下建立測試目錄,在b2下檢視來驗證。在b2上起httpd服務,確定80埠進行監聽,然後在b1上進行本地訪問,發現可以訪問。
11.再次起容器b2,將網路型別選擇為host,在容器起httpd服務,通過物理機網路訪問。
12.將所有容器關閉,關閉docker服務。編輯daemon.json檔案,增加bip引數值,會將預設的172.17.0.0/16網段地址替換為指定地址。啟動docker服務,通過ifconfig檢視確認。
13.建立一個型別為bridge的網路mybr0,用這個網路執行容器t1。再用docker自帶預設網路bridge執行容器t2。檢視ip_forward引數,顯示為1,說明是可以進行包轉發的。也即mybr0與bridge之間可以進行包轉發。