前言
Docker系列文章:
此篇是Docker系列的第八篇,大家一定要按照我做的Demo都手敲一遍,印象會更加深刻的,加油!
基本命令

--net網絡模式驗證

bridge模式已在在網絡初探的小節已經驗證過了,這里就不再進行驗證,接下來我們主要驗證的是剩下的三總模式;
none
-
后台方式啟動一個版本為最新的centos名字為centosworktest03網絡模式為none的容器;
docker run -d -it --name centosworktest03 --net none centos:latest
-
交互模式進入容器內部;
docker ps
docker exec -it 9a97610ae54a /bin/bash -
驗證網絡模型,當你使用yum install net-tools 安裝命令的時候他會提示下載失敗;
-
我們使用自帶的ip addr來查看網路,我們會發現只有一個網絡回環地址,使用none模式整個容器的網絡是與其他網絡隔離的;
host
-
后台方式啟動一個版本為最新的centos名字為centosworktest04網絡模式為host的容器;
docker run -d -it --name centosworktest04 --net host centos:latest
-
交互模式進入容器內部;
docker ps
docker exec -it 2958410a53c5 /bin/bash -
ip addr查看網絡模式,會發現與宿主機的網絡模型是一致的;
container
-
后台方式啟動一個版本為最新的centos名字為centosworktest05網絡模式為container的容器采用centosworktest的網絡模式;
docker run -d -it --name centosworktest05 --net container:centosworktest centos:latest
-
交互模式進入容器內部;
docker exec -it 0a8ea7a39e1a /bin/bash
-
ip addr查看網絡模式,會發現與容器centosworktest的網絡模式是一致的;
--link
容器在啟動的IP地址是動態分配的,如何做到本地服務的發現?也就是說容器的IP變了,如何還能夠調用到對應的服務,link可以通過名稱調用來解決這個問題,但是不推薦使用link來解決該問題,這里的介紹只是來了解一下這個知識點的優缺點。
使用
簡單介紹一下我們的案例,這里我們使用的容器名稱為centosworktest03的容器,該容器的網絡膜模型為none,只能在網絡內部通信,我們使用--link啟動一個centoslinktest的容器,來測試link的作用。這里我們因為centosworktest03容器一直在啟動着,我們就直接啟動centoslinktest做實驗了。
-
后台方式啟動一個版本為最新的centos名字為centoslinktest容器鏈接到centosworktest03這個容器;
docker run -d -it --name centoslinktest --link centosworktest02:centosworktest02 centos:latest
-
檢查容器centoslinktest與容器centosworktest02網絡是否通暢;
docker exec -it centoslinktest ping centosworktest02
-
檢查容器centosworktest02與容器centoslinktest的網絡是否通暢;
docker exec -it centosworktest02 ping centoslinktest
-
查看centoslinktest的hosts文件,會發現在配置文件中存在了centosworktest02配置;
缺點
-
link的網絡是單向的,也不具備傳遞的特性; -
link的配置是靜態的,當容器的IP發生改變的話,配置的鏈接就失效了;
自定義網絡
-
創建一個networktest的網絡,使用--subnet指定容器分配網段,使用--gateway指定網關;
docker network create --driver bridge --subnet 192.168.1.0/24 --gateway 192.168.1.1 networktest
-
查看網絡列表;
docker network ls
-
查看具體配置docker network inspect networktest;
實戰
-
后台方式分別啟動名字叫customernetwork1和customernetwork2,網絡模式為networktest的容器;
docker run -d -it --name customernetwork1 --net networktest centos:latest
docker run -d -it --name customernetwork2 --net networktest centos:latest -
測試customernetwork1和customernetwork2網絡的連通性,發現網絡之間是聯通的;
-
測試customernetwork1與docker0網絡中容器的連通性,發現兩個網絡是不通的,因為屬於不同的網段;
docker exec -it e34051b19cfe ping 172.17.0.2
優點
自定義bridge網絡與默認bridge網絡docker0的優點如下:
-
自定義bridge具有更好的隔離性和容器間的互操作性,連接到同一個自定義bridge網絡的容器會自動將所有端口相互暴露,並且無法連接到容器外的網絡,使得容器化的應用能輕松地相互通信,並且與外部環境產生了良好的隔離性。
-
自定義bridge提供容器間通過名稱自動發現的機制,也就是DNS解析,默認bridge網絡上的容器只能通過IP地址互相訪問,除非使用link命令,在用戶定義橋接網絡上,容器可以通過容器名稱或別名來解析。
-
自定義bridge網絡使用docker network create創建和配置。如果不同的應用程序組具有不同的網絡要求,則可以在創建時分別配置每個用戶定義的 bridge網絡,增加了靈活性和可控性。
不同網段的容器如何通信

-
將容器centosworktest加入到自定義網絡networktest中;
docker network connect networktest centosworktest
-
測試centosworktest與customernetwork1的連通性,發現兩個網絡就是通暢的了;
結束
歡迎大家點點關注,點點贊!
