Docker----網絡部分

項目概要:

        Docker網絡通信部分


項目目的:

        一:使用帶有httpd應用的鏡像創建一個容器,使用外網進行訪問網站驗證。

        二:Docker 四種網絡模式介紹

項目內容:

        創建容器的時候可以使用帶有-p-P來指定分配端口號或隨機分配空閒端口

-P(大寫P)使用時需要指定--expose選項或dockerfile中用expose指令容器要暴露的端口,指定需要對外提供服務的端口

 

一:使用docker run -d -Pcentoshttpd創建容器

wKioL1mEGomTJYAwAABlYWC7H_w133.png

此時我們再次查看容器信息,我們來看端口的映射,所以我們訪問容器的http的時候,是從端口映射的那個端口訪問的。輸入宿主機的32769端口,就會映射到容器的80端口。

wKiom1mEGqzz1_Z2AACwDCca0Is120.png

訪問宿主機的32769 就會訪問容器應用的80端口

wKioL1mEGsbB-v-fAAPw-9GoF1A425.png

我們也可以使用-p(小寫p)來指定映射的端口

Dockerrun -d -p 192.168.182.132:110:22 -p 192.168.182.132:120:80 .centoshttpd

wKiom1mEGt-xnX8dAAFz_Q_XNQs403.png

120端口訪問容器應用

wKiom1mEGw6jD4v6AAMcZMkw1W0995.png

訪問網站前提:開啓路由轉發:vim /etc/sysctl.conf 添加:net.ipv4.ip_forward=1

wq保存退出   sysctl -p激活。。。。配置防火牆策略 firewall-cmd --add-port=80/tcp

 

 

注意:-p(小寫)則可以指定要映射的端口,並且,在一個指定端口上只可以綁定一個容器。支持的格式有ip:hostPort:containerPort | ip::containerPort |hostPort:containerPort

注意:

容器有自己的內部網絡和 ip 地址(使用  docker inspect  可以獲取所有的變量。)

-p 標記可以多次使用來綁定多個端口

映射所有接口地址:

使用 hostPort:containerPort 格式,將本地的10111端口映射到容器的 22 端口,本地的801端口映射到容器的80端口可以執行

wKiom1mEGzOxQk-mAACN1gJP0B0529.png




二:Docker 四種網絡模式

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

  • host 模式,使用 --net=host 指定。

  • container 模式,使用 --net=container:NAMEorID 指定。

  • none 模式,使用 --net=none 指定。

  • bridge 模式,使用 --net=bridge 指定,默認設置。

 

Host模式:與宿主機公用網絡配置

Container模式:先創建一個容器,然後--net=container:第一個容器名 創建出第二個容器。第二個容器共用第一個容器網絡配置

Bridge模式:通過宿主機上的網橋與容器連接,進行網絡通信

None模式:通過--net=none 創建出來的容器不會有任何網絡配置,通過管理員自己手動配置。配置如下:

下面通過配置一個以 --net=none 啓動的容器,使他達到跟平常一樣具有訪問網絡的權限。來介紹docker 是如何連接到容器中的。

 

啓動一個運行 /bin/bash的容器,並指定 --net=none

wKioL1mEG13hzLEwAADYE5MIzvs704.png

再開啓一個新的終端,查找這個容器的進程 id ,然後創建它的命名空間,後面的 ip netns 會用到

wKiom1mEG3Owsro3AAA9OVNZJbo346.png

wKioL1mEG4XQZrUxAACI42NHcd0379.png

檢查橋接網卡的 ip 和子網掩碼

wKiom1mEG5ryRBDTAACC_89GFS4633.png

創建一對” peer“接口 A B ,綁定 A 到網橋,並啓用它

wKioL1mEG67ywLS0AAEVSkG3cYA729.png

B 放到容器的網絡命名空間,命名爲 eth0, 配置一個空閒的 ip

wKioL1mEG8PjfJ2LAADAIi_Lt0s991.pngwKiom1mEG_uQoD1cAADAIi_Lt0s499.png

自此,你又可以像平常一樣使用網絡了

wKioL1mEHBHyBSxfAAGwl0FvWdk409.png

當你退出容器後, docker 清空容器,容器的 eth0 隨網絡命名空間一起被摧毀,接口也被自動從docker0取消註冊。不用其他命令,所有東西都被清理掉了!

注意 ip netns exec 命令,它可以讓我們像 root 一樣配置網絡命名空間。但在容器內部無法使用,因爲統一的安全策略, docker 限制容器進程配置自己的網絡。使用 ip netns exec  可以讓我們不用設置--privileged=true 就可以完成一些可能帶來危險的操作。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章