Docker網(wǎng)絡(luò)配置(橋接網(wǎng)絡(luò)和自定義網(wǎng)絡(luò))自定義網(wǎng)絡(luò)設(shè)置ip方式
前言:Docker網(wǎng)絡(luò)模式
當(dāng)你安裝了docker,它會(huì)自動(dòng)創(chuàng)建3個(gè)網(wǎng)絡(luò)模式,
可以使用 docker network ls 命令來(lái)查看所有網(wǎng)絡(luò)
效果圖:
bridge
橋接模式host
主機(jī)模式none
表示沒(méi)有網(wǎng)絡(luò),我們?nèi)萜饕话愣夹枰?lián)網(wǎng)的,這個(gè)模式我們可以忽略它
一、bridge(橋接網(wǎng)絡(luò))
當(dāng)Docker進(jìn)程啟動(dòng)時(shí),會(huì)在主機(jī)上創(chuàng)建一個(gè)名為docker0的虛擬網(wǎng)橋(路由器),此主機(jī)上啟動(dòng)的Docker容器會(huì)連接到這個(gè)虛擬網(wǎng)橋上。
使用 ifconfig 查看docker0虛擬網(wǎng)橋
虛擬網(wǎng)橋的工作方式和物理交換機(jī)類似,這樣主機(jī)上的所有容器就通過(guò)交換機(jī)連在了一個(gè)二層網(wǎng)絡(luò)中。
從docker0子網(wǎng)中分配一個(gè)IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。
在主機(jī)上創(chuàng)建一對(duì)虛擬網(wǎng)卡veth pair設(shè)備,Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網(wǎng)卡),另一端放在主機(jī)中,以vethxxx這樣類似的名字命名,并將這個(gè)網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。注:bridge為默認(rèn)模式,創(chuàng)建容器的時(shí)候不需要使用參數(shù)--net去指定, 這種模式會(huì)為每個(gè)容器分配一個(gè)獨(dú)立的Network Namespace(網(wǎng)絡(luò)空間)
同一個(gè)宿主機(jī)上的所有容器會(huì)在同一個(gè)網(wǎng)段下,相互之間是可以通信的
其它模式需要在創(chuàng)建容器時(shí)使用--net去指定
1.查看bridge信息
docker inspect bridge
注:inspect是docker 里面用來(lái)查看詳情的指令
我只截了容器的部分
圖中 c1 b1 c2 都是我創(chuàng)建的容器 可以看到每個(gè)容器都分配到了一個(gè)ip
效果圖:
2.創(chuàng)建一個(gè)容器查看IP
創(chuàng)建容器的指令
docker run -it --name bug centos
注:run意思是創(chuàng)建運(yùn)行并進(jìn)入
-itd
:是三個(gè)參數(shù)-i
:interactive容器具有交互功能-t
:容器將提供偽終端- --name 給容器取名字 , centos 鏡像名稱
我們?cè)谌萜骼锩鎴?zhí)行 ip addr 查看容器 ip
上面是網(wǎng)關(guān)的IP ,下面是容器的的IP
docker0就像是一個(gè)路由器,容器就像是路由器下的設(shè)備,它們?cè)谕粋€(gè)網(wǎng)段內(nèi),可以互相ping
bridge(橋接網(wǎng)絡(luò))需要映射端口,外部才能訪問(wèn)到容器
3.外部訪問(wèn)
沒(méi)主機(jī)的模式下面我們需要端口映射外部才能訪問(wèn)
設(shè)置端口映射
docker run -it --name bridge03 -p 444:8080 jdk7:v1
-p:把宿主機(jī)的4444端口映射到容器的8080端口
用 java -jar spring.jar --server.port=8080 啟動(dòng)8080端口
-p參數(shù)可以出現(xiàn)多次,綁定多個(gè)端口號(hào)
docker run -itd --name bridge05 -p 8082:8080 -p 8083:8080 spring:1.0
二、Host模式(主機(jī)模式)
如果啟動(dòng)容器的時(shí)候使用host模式,那么這個(gè)容器將不會(huì)獲得一個(gè)獨(dú)立的Network Namespace,而是和宿主機(jī)共用一個(gè)Network Namespace。
容器將不會(huì)虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。
但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的
Host模式是不需要映射端口的,假設(shè)容器開(kāi)了8080端口,那么主機(jī)肯定也是8080端口,不需要映射直接就可以訪問(wèn)
1.使用Host模式創(chuàng)建容器
使用Host模式創(chuàng)建容器
docker run -it --name host01 --net=host centos
注:run意思是創(chuàng)建運(yùn)行并進(jìn)入
-itd
:是三個(gè)參數(shù)-i
:interactive容器具有交互功能-t
:容器將提供偽終端- --name 給容器取名字 ,--net=host 指定使用的網(wǎng)絡(luò)模式 centos 鏡像名稱
創(chuàng)建之后 使用 ip addr 查看容器ip
和主機(jī)的IP是一模一樣的
在容器中運(yùn)行8080端口:
2.用host容器外部訪問(wèn)
重新創(chuàng)建·一個(gè)host容器并掛載一個(gè)目錄,目錄里面有運(yùn)行8080端口的服務(wù)
docker run -it -v /root:/aa --net host jdk:v3
容器創(chuàng)建之后自動(dòng)運(yùn)行目錄里的8080服務(wù)
外部訪問(wèn)成功!
三、創(chuàng)建自定義網(wǎng)絡(luò)(自定義IP)
使用默認(rèn)的網(wǎng)橋模式,分配給容器的IP會(huì)變,
假設(shè):
- 容器aa原本的IP是177.14.1.2
- 容器bb原本的IP是177.14.1.3
aa和bb兩個(gè)容器同時(shí)關(guān)閉,容器bb先啟動(dòng)了,那么它的IP就變成了177.14.1.2,我們可以是用自定義網(wǎng)絡(luò)來(lái)解決這樣的情況,自定義網(wǎng)絡(luò)可以IP固定
必須先要?jiǎng)?chuàng)建一個(gè)網(wǎng)段,在同一個(gè)網(wǎng)段下,才能進(jìn)行訪問(wèn)
1.創(chuàng)建一個(gè)自定義網(wǎng)絡(luò)
docker network create --subnet 網(wǎng)絡(luò)名稱 --subnet :設(shè)置網(wǎng)段 docker network create --subnet 172.18.0.0/16 ots
172.18.0.0/16:給自定義網(wǎng)絡(luò)劃分的網(wǎng)段
使用 docker network ls 查看剛剛創(chuàng)建的自定義網(wǎng)絡(luò)
固定ip啟動(dòng),
2.容器使用自定義網(wǎng)絡(luò)
自定義網(wǎng)絡(luò)可以自定義ip,默認(rèn)網(wǎng)絡(luò)是不能指定IP的
docker run -it --name net01 --net ots --ip 172.18.0.3 jdk7:v1.0 --ip:指定ip
3.在創(chuàng)建一個(gè)容器互相ping一下
docker run -it --name net02 --net ots --ip 172.18.0.4 jdk7:v1.0
可以ping成功,因?yàn)樵谕痪W(wǎng)段下
4.跨網(wǎng)橋測(cè)試
創(chuàng)建一個(gè)容器,默認(rèn)的網(wǎng)橋模式,容器的ip是172.17.0.2
在里面ping一下自定義網(wǎng)絡(luò)容器 IP是 172.18.0.3
是不能ping通的
在同一個(gè)網(wǎng)段下,才能進(jìn)行訪問(wèn)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Mac下 docker 無(wú)法 ping 通宿主機(jī)的問(wèn)題
這篇文章主要介紹了解決Mac下 docker 無(wú)法 ping 通宿主機(jī)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11elasticsearch?組件基于單機(jī)的多實(shí)例集群部署方法
es 作為搜索引擎,應(yīng)用場(chǎng)景不乏日志分析、網(wǎng)絡(luò)安全、搜索引擎等,有時(shí)也會(huì)用作日志數(shù)據(jù)庫(kù)使用,畢竟其出色的搜索查詢性能,不是同等量級(jí) 關(guān)系型數(shù)據(jù)庫(kù)可以比擬的,這篇文章主要介紹了elasticsearch?組件基于單機(jī)的多實(shí)例集群,需要的朋友可以參考下2024-03-03安裝harbor作為docker鏡像倉(cāng)庫(kù)的問(wèn)題
這篇文章主要介紹了安裝harbor作為docker鏡像倉(cāng)庫(kù),主要包括docker和docker-compose離線部署,安裝harbor作為本地的倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06Docker從零構(gòu)建php-nginx-alpine鏡像的方法
這篇文章主要介紹了Docker從零構(gòu)建php-nginx-alpine鏡像的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11docker-compose啟動(dòng)服務(wù)方式
這篇文章主要介紹了docker-compose啟動(dòng)服務(wù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05詳解Docker 配置國(guó)內(nèi)免費(fèi)registry mirror
本篇文章主要介紹了 Docker 配置國(guó)內(nèi)免費(fèi)registry mirror,具有一定的參考價(jià)值,有興趣的小伙伴們可以參考一下2017-07-07解決Docker啟動(dòng)Elasticsearch7.x報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決Docker啟動(dòng)Elasticsearch7.x報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11docker搭建redis主從哨兵集群的實(shí)現(xiàn)步驟
本文主要介紹了docker搭建redis主從哨兵集群的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Linux下Docker及portainer相關(guān)配置方法
本文以CentOS 7為例,安裝docker CE版本,docker有兩種版本,社區(qū)版本CE和企業(yè)版本EE,通過(guò)實(shí)例代碼給大家介紹了Linux下Docker及portainer相關(guān)配置方法,感興趣的朋友跟隨小編一起看看吧2019-06-06