docker 網(wǎng)絡的種類
- host
- bridge
- overlay
- Macvlan
host
- 如果你對一個容器使用的是host網(wǎng)絡驅動福青,這個容器的網(wǎng)絡棧并不是和docker宿主機隔離的第晰。例如掺喻,你啟動了一個容器綁定的是80端口蒂胞,使用的host網(wǎng)絡驅動秧秉,而你的應用程序將使用主機的ip和端口仰禀。
- host網(wǎng)絡驅動僅能在Linux上工作甜攀,不支持docker的宿主機是Mac浑劳、Windows阱持、Windows Server.
- 在docker 17.06 或者更高版本,你也可以在swarm service 上使用host網(wǎng)絡魔熏,通過在docker container create 命令上設置--network host衷咽。在這種情況下,管理swarm集群和服務上仍然用overlay 網(wǎng)絡蒜绽,但是在單獨的集群容器使用的主機網(wǎng)絡和端口來發(fā)送數(shù)據(jù)的镶骗。 這樣也是有一些額外限制的,例如, 如果一個服務容器躲雅,綁定的是80端口鼎姊,那么僅有一個服務容器可以在指定的swarm 節(jié)點上運行。
- 如果你的容器或者服務沒有對外端口吏夯,host網(wǎng)絡就沒辦法生效此蜈。
bridge
Use bridge networks(橋接網(wǎng)絡的使用)
- 就網(wǎng)絡而言,橋接網(wǎng)絡是鏈路層設備噪生,用于在網(wǎng)絡段之間轉發(fā)通信裆赵。橋接可以是運行在主機內(nèi)核中的硬件設備或軟件設備。
- 對docker而言跺嗽,橋接網(wǎng)絡使用的軟件橋接方式战授,它允許容器之間使用相同橋接網(wǎng)絡進行通信页藻,同時與使用其他橋接網(wǎng)絡的的容器進行隔離。docker的橋接驅動在宿主機上有自己獨特的安裝規(guī)則植兰,以至于在不同的橋接網(wǎng)絡上的容器彼此不能直接通信份帐。
- 橋接網(wǎng)絡作用于同一個宿主機上的docker守護進程的容器上。對于在不同宿主機上的守護進程的容器來說楣导,你既可以通過OS系統(tǒng)級別的方式來管理通信废境,也可以通過使用overlay網(wǎng)絡來管理。
- 當你啟動docker筒繁,一個默認的橋接網(wǎng)絡會被自動創(chuàng)建噩凹,除非另有指定,否則新啟動的容器會鏈接它毡咏。你也可以創(chuàng)建自定義橋接網(wǎng)絡驮宴。自定義橋接網(wǎng)絡優(yōu)先級會高于默認網(wǎng)絡。
Differences between user-defined bridges and the default bridge (自定義橋接和默認橋接的不同)
1呕缭、 User-defined bridges provide better isolation and interoperability between containerized applications.(自定義橋接提供了容器化應用程序之間更好的隔離性和互操性-協(xié)同工作的能力)
- 連接同一個自定義橋接網(wǎng)絡的容器彼此暴露端口堵泽,而不會對外世界暴露端口。這樣就可以使容器化應用之間很容易的互相通信恢总,外面的世界也不會很容易進入的容器里迎罗。
- 設想一個具有Web前端和數(shù)據(jù)庫后端的應用程序。外部世界需要訪問web前端(也許在端口80上)离熏,但是只有后端本身需要訪問數(shù)據(jù)庫主機和端口佳谦。使用用戶定義的橋戴涝,只需要打開web端口滋戳,并且數(shù)據(jù)庫應用程序不需要打開任何端口,因為web前端可以通過用戶定義的橋到達它啥刻。
- 如果在默認橋接網(wǎng)絡上運行相同的應用程序堆棧奸鸯,則需要同時打開web端口和數(shù)據(jù)庫端口,并為每個端口使用-p或-publish標志可帽。這意味著Docker主機需要通過其他方式阻止對數(shù)據(jù)庫端口的訪問娄涩。
2、User-defined bridges provide automatic DNS resolution between containers.(自定義橋接可以在容器之間提供自動DNS解決方案)
- 默認橋接網(wǎng)絡上的容器只能通過IP地址相互訪問映跟,除非使用--link選項蓄拣,這被認為是遺留的問題。在用戶定義的橋接網(wǎng)絡上努隙,容器可以通過名稱或別名彼此解析球恤。
- 設想一下與前一點相同的應用程序,具有web前端和數(shù)據(jù)庫后端荸镊。如果調用容器web和db咽斧,則無論應用程序堆棧運行在哪個Docker主機上堪置,Web容器都可以連接到db處的db容器。
- 如果在默認橋接網(wǎng)絡上運行相同的應用程序堆棧张惹,則需要在容器之間手動創(chuàng)建鏈接(使用.y--link標志)舀锨。這些鏈接需要在兩個方向上(各個容器)創(chuàng)建,因此您可以看到宛逗,對于需要通信的兩個以上的容器坎匿,這會變得復雜±准ぃ或者碑诉,您可以在容器中操作/etc/hosts文件,但是這會產(chǎn)生難以調試的問題侥锦。
3进栽、Containers can be attached and detached from user-defined networks on the fly.(正在運行的容器可以在自定義橋接網(wǎng)絡上鏈接和分離)
- 在容器的生命周期中,您可以動態(tài)地將它與用戶定義的網(wǎng)絡連接或斷開恭垦。要從默認橋接網(wǎng)絡中刪除容器快毛,需要停止容器并使用不同的網(wǎng)絡選項重新創(chuàng)建容器。
4番挺、Each user-defined network creates a configurable bridge.(每個用戶定義的網(wǎng)絡創(chuàng)建一個可配置的網(wǎng)橋唠帝。)
- 如果容器使用默認橋接網(wǎng)絡,則可以對其進行配置玄柏,但是所有容器都使用相同的設置襟衰,如MTU和iptables規(guī)則。此外粪摘,配置默認橋接網(wǎng)絡發(fā)生在Docker本身之外瀑晒,并且需要重新啟動Docker。
- 使用docker network create創(chuàng)建和配置用戶定義的橋接網(wǎng)絡徘意。如果不同的應用程序組具有不同的網(wǎng)絡需求苔悦,那么您可以在創(chuàng)建每個用戶定義的橋接器時分別配置它。
5椎咧、Linked containers on the default bridge network share environment variables.(使用默認橋接網(wǎng)絡的容器共享變量)
- 最初玖详,在兩個容器之間共享環(huán)境變量的唯一方法是使用--link標志鏈接它們。這種類型的變量共享與用戶定義的網(wǎng)絡容器是不可能的勤讽。
- 這有一些共享環(huán)境變量的方法:
- 多個容器可以使用Docker卷掛載包含共享信息的文件或目錄蟋座。
- 可以使用docker-compose一起啟動多個容器,并且compose文件可以定義共享變量脚牍。
- 您可以使用群集服務來代替獨立的容器向臀,并利用共享的秘密和配置。
連接到同一用戶定義的橋接網(wǎng)絡的容器有效地將所有端口彼此公開莫矗。要讓不同網(wǎng)絡上的容器或非Docker主機能夠訪問端口飒硅,必須使用-p或-publish標志發(fā)布該端口砂缩。
Manage a user-defined bridge (管理用戶自定橋接)
- 使用 docker network create 命令創(chuàng)建用戶定義的網(wǎng)橋網(wǎng)絡。
$ docker network create my-net
- 您可以指定子網(wǎng)三娩、IP地址范圍庵芭、網(wǎng)關和其他選項。有關詳細信息雀监,請參閱docker network create 引用文檔或docker network create --help 的輸出双吆。
- 使用docker network rm 命令刪除用戶定義的網(wǎng)橋網(wǎng)絡。如果容器當前連接到網(wǎng)絡会前,首先斷開它們好乐。
$ docker network rm my-net
刪除網(wǎng)絡到底發(fā)生了什么?
在創(chuàng)建或刪除用戶定義的網(wǎng)橋或從用戶定義的網(wǎng)橋連接或斷開容器時瓦宜,Docker使用操作系統(tǒng)特有的工具來管理底層網(wǎng)絡基礎設施(例如添加或刪除網(wǎng)橋設備或在Linux上配置iptables規(guī)則)蔚万。這些細節(jié)應被視為實現(xiàn)細節(jié)。讓docker為您管理用戶定義的網(wǎng)絡临庇。
Connect a container to a user-defined bridge( 使用用戶自定義網(wǎng)絡鏈接容器)
- 當你創(chuàng)建新容器時反璃,可以指定一個或多個--network標志。此示例將NGNIX容器連接到MyNet網(wǎng)絡假夺。它還將容器中的端口80發(fā)布到Docker主機上的端口8080淮蜈,因此外部客戶端可以訪問該端口。連接到my-net網(wǎng)絡的任何其他容器都可以訪問my-nginx容器上的所有端口已卷,反之亦然梧田。
$ docker create --name my-nginx \
--network my-net \
--publish 8080:80 \
nginx:latest
- 若要將正在運行的容器連接到現(xiàn)有用戶定義的橋接網(wǎng)絡,請使用docker network connect命令侧蘸。以下命令將已經(jīng)運行的my-nginx容器連接到已經(jīng)存在的my-net網(wǎng)絡:
$ docker network connect my-net my-nginx
Disconnect a container from a user-defined bridge (容器從自定義橋接網(wǎng)絡斷開)
- 若要將正在運行的容器從現(xiàn)有用戶自定義橋接網(wǎng)絡斷開裁眯,使用docker network disconnect 命令。以下命令將my-nginx容器從my-net網(wǎng)絡斷開:
$ docker network disconnect my-net my-nginx
Use IPv6
- 如果你需要docker容器支持IPv6闺魏,則需要在創(chuàng)建任何IPV6網(wǎng)絡之前或者分配IPv6地址之前未状,在docker進程上啟動選項并重新加載其配置。
- 當您創(chuàng)建網(wǎng)絡析桥,指定--ipv6標記來啟動IPv6,不能在默認橋接網(wǎng)絡上選擇禁止IPv6.
Enable forwarding from Docker containers to the outside world (允許docker容器訪問外面的世界)
- 默認情況下艰垂,鏈接默認橋接網(wǎng)絡的容器是不能和外面的世界通信的泡仗。為了能和外面的世界通信,你需要關閉安兩個設置猜憎。這些設置不是docker命令娩怎,他們是影響docker宿主機內(nèi)核的。
1胰柑、設置Linux kernel 允許ip轉發(fā)截亦。
$ sysctl net.ipv4.conf.all.forwarding=1
2爬泥、改變ptables FORWARD 規(guī)則從DROP 到 ACCEPT
$ sudo iptables -P FORWARD ACCEPT
在重新啟動時,這些設置不會持久存在崩瓤,因此可能需要將它們添加到啟動腳本中袍啡。
Use the default bridge network(使用默認橋接網(wǎng)絡)
默認的橋接網(wǎng)絡被認為是docker的遺留問題,不建議在生產(chǎn)中使用却桶。配置它需要手動操作境输,而且它還有技術缺點。
Connect a container to the default bridge network (使容器容器連接默認的橋接網(wǎng)絡)
- 如果你沒有指定網(wǎng)絡--network標記和指定網(wǎng)絡驅動颖系,你的容器就鏈接的默認橋接網(wǎng)絡嗅剖。鏈接橋接網(wǎng)絡的容器只能通過Ip地址來進行通信,出來他們使用--link legacy 標記嘁扼。
Configure the default bridge network(設置默認橋接網(wǎng)絡)
- 為了設置默認橋接網(wǎng)絡信粮,你需要指定daemon.json選項。這里有一個關于的帶有設置daemon.json例子趁啸。僅需要你定制這些選項就可以蒋院。
{
"bip": "192.168.1.5/24",
"fixed-cidr": "192.168.1.5/25",
"fixed-cidr-v6": "2001:db8::/64",
"mtu": 1500,
"default-gateway": "10.20.1.1",
"default-gateway-v6": "2001:db8:abcd::89",
"dns": ["10.20.1.2","10.20.1.3"]
}
重啟docker這些改變才生效。
Use IPv6 with the default bridge network(在默認網(wǎng)絡上使用IPv6)
- 如果你想docker 支持IPv6(see )莲绰,默認橋接網(wǎng)絡也是可以自動設置成IPv6欺旧。不像用戶自定義橋接網(wǎng)絡,在默認橋接網(wǎng)絡上蛤签,你不能選擇性的禁止IPv6辞友。
overlay
- overlay網(wǎng)絡驅動可以在多個docker宿主機之間創(chuàng)建一個分布式網(wǎng)絡。這種網(wǎng)絡位于宿主機特定網(wǎng)絡之上震肮,允許已經(jīng)連接該網(wǎng)絡的容器(包括已經(jīng)連接該網(wǎng)絡的集群服務)安全的通信称龙。docker透明地處理每個從正確的docker主機和正確的目的地容器的數(shù)據(jù)路由。
- 當你初始化一個swarm或者將一個docker主機加入到已經(jīng)存在swarm上戳晌,在docker主機上創(chuàng)建了兩個網(wǎng)絡鲫尊。
1、一個被稱為ingress的overlay網(wǎng)絡沦偎,它用于處理與集群的控制和數(shù)據(jù)傳輸疫向。當你創(chuàng)建一個swarm 集群服務,沒有將它連接到用戶自定義網(wǎng)絡情況下豪嚎,默認它會使用ingress網(wǎng)絡連接搔驼。
2、一個被稱為docker_gwbridge的橋接網(wǎng)絡侈询,它用于將單個docker進程連接到swarm集群其他docker進程舌涨。
你可以使用docker network create創(chuàng)建用戶定義的overlay網(wǎng)絡,也可以用同樣的方式創(chuàng)建用戶定義的橋接網(wǎng)絡扔字。服務或容器可以一次連接到一個以上的網(wǎng)絡囊嘉。服務或容器只能通過它們各自連接的網(wǎng)絡進行通信温技。
盡管你可以使用overlay網(wǎng)絡鏈接swarm集群服務和單個容器,但是默認行為和設置關注點是不同的扭粱。由于這個原因舵鳞,本主題的其余部分分為適用于所有overlay網(wǎng)絡的操作、適用于群服務網(wǎng)絡的操作和適用于獨立容器使用的覆蓋網(wǎng)絡的操作焊刹。
Operations for all overlay networks (所有有關overlay網(wǎng)絡的操作)
1系任、Create an overlay network(創(chuàng)建一個overlay網(wǎng)絡)
- 使用overlay網(wǎng)絡的docker進程的防火墻規(guī)則。
你需要來往于每個參與overlay網(wǎng)絡的docker的主機的端口是開放的虐块。
TCP端口:2377 用于集群管理
TCP和UDP端口:7946用于集群管理節(jié)點
UDP端口:4789 用于overlay網(wǎng)絡通信
在你創(chuàng)建overlay網(wǎng)絡之前俩滥,你既可以使用docker swarm init命令初始化你的docker進程作為swarm 集群管理,也可以使用docker swarm join 命令加入到已經(jīng)存在集群中贺奠。它們中任何一個都會創(chuàng)建一個imgress overlay 網(wǎng)絡霜旧,這個網(wǎng)絡默認是被用于swarm集群服務的。如果你沒有計劃使用swarm集群服務儡率,就沒必要這么做挂据。之后,你可以創(chuàng)建一個附加的用戶定義overlay網(wǎng)絡儿普。
- 為使用swarm集群服務而創(chuàng)建的overlay網(wǎng)絡崎逃,可以使用以下命令:
$ docker network create -d overlay my-overlay
- 為使用swarm集群服務或者單個容器與其他docker守護進程的容器通信,可以使用--attachable 標記:
$ docker network create -d overlay --attachable my-attachable-overlay
你可以指定ip段眉孩,子網(wǎng)絡个绍,網(wǎng)關或者其他選項。具體可以參考:docker network create --help
2浪汪、 Encrypt traffic on an overlay network(在overlay網(wǎng)絡上使用加密通信)
- 所有的集群管理通信默認都是加密的巴柿,使用的是AES的加密方式。群中的管理節(jié)點每12小時輪換下用于加密gossip數(shù)據(jù)的秘鑰死遭。
- 同樣也是可以加密應用數(shù)據(jù)的广恢,在創(chuàng)建overlay網(wǎng)絡的時候,添加--opt encrypted 呀潭。這使得IPSEC加密在vxlan等級上钉迷。這種加密會帶來性能損耗,所以在上線之前蜗侈,應該對其進行測試篷牌。
- 當啟用加密overlay加密網(wǎng)絡,docker創(chuàng)建IPSEC通道在所有節(jié)點之間踏幻,服務的任務調度依附于overlay網(wǎng)絡。這些通道使用AES加密方式戳杀,管理節(jié)點每12小時輪換秘鑰该面。
不能在windows節(jié)點上使用加密overlay網(wǎng)絡
overlay 網(wǎng)絡加密方式在windows上是不支持的夭苗。如果windows節(jié)點嘗試連接加密的overlay網(wǎng)絡,不會出現(xiàn)錯誤隔缀,但是節(jié)點之間不能通信题造。
3、swarm mode overlay networks and standalone containers (集群下的overlay網(wǎng)絡和單個容器)
- 你可以使用overlay網(wǎng)絡的一些特點猾瘸,--opt encrypted --attachable 然后讓一個沒有被管理的容器依附到這個網(wǎng)絡上:
$ docker network create --opt encrypted --driver overlay --attachable my-attachable-multi-host-network
4界赔、Customize the default ingress network (定制默認的ingress網(wǎng)絡)
- 大多數(shù)用戶沒必要設置ingress網(wǎng)絡,但是docker17.05或者更高版本允許你需改牵触。如果自動分配的子網(wǎng)絡有和你現(xiàn)在已經(jīng)存在的網(wǎng)絡有沖突淮悼,或許你可以設置其他低一級網(wǎng)絡,例如MTU網(wǎng)絡揽思。
- 定制ingress網(wǎng)絡包括刪除和從新創(chuàng)建網(wǎng)絡袜腥。這通常需要你在開啟swarm 服務之前做這些事情。如果你的服務已經(jīng)存在并且已經(jīng)對外暴露端口钉汗,需要你在移除ingress網(wǎng)絡之前羹令,刪除服務。
- 在不存在ingress網(wǎng)絡的期間损痰,不發(fā)布端口的現(xiàn)有服務繼續(xù)發(fā)揮作用福侈,但是不會被負載均衡。這樣會影響發(fā)布端口的服務卢未,例如發(fā)布端口80的WordPress服務肪凛。
1、使用docker network inspect ingress 命令檢測ingress網(wǎng)絡尝丐,刪除任何已經(jīng)連接這個網(wǎng)絡服務显拜。這些服務已經(jīng)暴露了端口,例如對外暴露80端口wordpress服務爹袁。如果這樣的服務沒有停止远荠,下一步將會出現(xiàn)錯誤。
2失息、刪除已經(jīng)存在ingress網(wǎng)絡:
$ docker network rm ingress
WARNING! Before removing the routing-mesh network, make sure all the nodes
in your swarm run the same docker engine version. Otherwise, removal may not
be effective and functionality of newly created ingress networks will be
impaired.
Are you sure you want to continue? [y/N]
3譬淳、創(chuàng)建一個overlay網(wǎng)絡,使用--ingress標記盹兢,跟隨一些定制化選項邻梆。下面一個示例,設置MTU到1200設置子網(wǎng)段绎秒,和設置網(wǎng)關浦妄。
$ docker network create \
--driver overlay \
--ingress \
--subnet=10.11.0.0/16 \
--gateway=10.11.0.2 \
--opt com.docker.network.driver.mtu=1200 \
my-ingress
Note:你可以將ingress網(wǎng)絡命名其他ingress的名字,但只能只要一個。嘗試命名第二個將會失敗剂娄。
4蠢涝、重啟你剛才在第一步停止的服務。
5阅懦、Customize the docker_gwbridge interface(定制化docker 橋接接口)
- docker_gwbridge 是一個虛擬的橋和二,它可以鏈接overlay網(wǎng)絡(包括ingress網(wǎng)絡)到docker守護進程物理網(wǎng)絡上。當你初始化從docker swarm集群時耳胎,docker自動創(chuàng)建它惯吕,但是它不是docker設備。它存在docker主機的內(nèi)核中怕午。如果你需要定制設置它废登,你必須在加入docker集群之前,做這些事情诗轻,或者暫時將docker宿主機從集群移除之后钳宪。
1、停止docker扳炬。
2吏颖、刪除已經(jīng)存在docker_gwbridge 接口。
$ sudo ip link set docker_gwbridge down
$ sudo ip link del dev docker_gwbridge
3恨樟、啟動docker半醉。不要加入和初始化集群。
4劝术、使用docker network create命令缩多,來定制化設置手動創(chuàng)建或者重新創(chuàng)建docker_gwbridge接口。以下示例在子網(wǎng)絡下10.11.0.0/16下养晋,有關可定制選項的完整列表衬吆,請參見“橋驅動程序選項”。
$ docker network create \
--subnet 10.11.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
--opt com.docker.network.bridge.enable_ip_masquerade=true \
docker_gwbridge
5绳泉、初始化或者加入集群逊抡。由于網(wǎng)橋已經(jīng)存在,docker就不會自動創(chuàng)建和設置它零酪。
Operations for swarm services(對swarm 集群操作)
1冒嫡、Publish ports on an overlay network(暴露overlay網(wǎng)絡端口)
- 連接到同一覆蓋網(wǎng)絡的群服務有效地將所有端口彼此公開。對于要在服務外訪問的端口四苇,必須使用-p或--publish標志在docker服務創(chuàng)建或docker服務更新上發(fā)布該端口孝凌。支持傳統(tǒng)的冒號分隔語法和更新的逗號分隔值語法。語法越長越好月腋,更能表明自己在做什么蟀架。
標記值 | 描述 |
---|---|
-p 8080:80 或-p published=8080,target=80 | 默認協(xié)議Tcp瓣赂,在服務上用的80端口,在路由表上用的8080端口(對外) |
-p 8080:80/udp 或-p published=8080,target=80,protocol=udp | 指定協(xié)議udp辜窑,在服務上用的80端口钩述,在路由表上用的8080端口(對外) |
-p 8080:80/tcp -p 8080:80/udp 或 -p published=8080,target=80,protocol=tcp -p published=8080,target=80,protocol=udp | 設置以上兩個協(xié)議和對應的端口 |
2寨躁、Bypass the routing mesh for a swarm service(讓swarm集群繞過路由網(wǎng)絡)
- 默認情況下穆碎,swarm 集群使用routing 網(wǎng)絡暴露端口。當你連接到任意集群節(jié)點上的已發(fā)布端口(無論它是是否運行給定服務)职恳,你將被重定向到運行該服務的worker上所禀。有效地,docker對于你的swarm集群將扮演一個負載均衡角色放钦。
- 要想繞過路由網(wǎng)絡色徘,可以通過--endpoint-mode標志設置為dnsrr,使用DNS循環(huán)模式來開啟服務操禀。你必須在服務前面褂策,設置自己的負載均衡。對于docker主機上服務名稱的一次dns查詢颓屑,將返回一系列有關服務節(jié)點的IP地址斤寂。把這些IP列表配置到你的負載均衡器上,來負載節(jié)點之間的通信揪惦。
3遍搞、Separate control and data traffic (將控制和數(shù)據(jù)傳輸分開)
- 默認情況下,與群管理相關的控制通信和來往應用程序之間的通信器腋,都是在相同網(wǎng)絡下溪猿,但是與集群控制相關的通信是加密的。你可以設置docker配置纫塌,使用不同網(wǎng)絡接口來控制兩種類型的網(wǎng)絡通信诊县。當你初始化或者加入集群的時候,分別指定--advertise-addr 和 --datapath-addr.對于每個加入集群的節(jié)點措左,你都必須啊這么做依痊。
Operations for standalone containers on overlay networks(在overlay網(wǎng)絡下,對容器單例的操作)
1媳荒、Attach a standalone container to an overlay network (將一個容器實例依附于一個overlay網(wǎng)絡)
- 在不帶--attachable標記創(chuàng)建ingress網(wǎng)絡抗悍,這意味著只有swarm集群可以使用,單個容器實例是不能使用的钳枕。你可以使用自定義帶有--attachable標記overlay網(wǎng)絡來連接單體容器實例缴渊。這使運行在不同Docker守護進程上的獨立容器能夠進行通信,而無需在單獨的Docker守護進程主機上設置路由鱼炒。
Publish ports(設置對外端口)
標記值 | 描述 |
---|---|
-p 8080:80 | 默認協(xié)議Tcp衔沼,在容器內(nèi)的80端口,在overlay網(wǎng)絡上用的8080端口(對外) |
-p 8080:80/udp | 指定協(xié)議udp懦砂,胡嘿,在容器內(nèi)的80端口哎壳,在overlay網(wǎng)絡上用的8080端口(對外) |
-p 8080:80/sctp | 指定協(xié)議sctp曲楚,潮改,在容器內(nèi)的80端口揩徊,在overlay網(wǎng)絡上用的8080端口(對外) |
-p 8080:80/tcp -p 8080:80/udp | 使用tcp和udp協(xié)議俊鱼,在容器內(nèi)的80端口蛹磺,在overlay網(wǎng)絡上用的8080端口(對外) |
2搓劫、Container discovery (容器自我發(fā)現(xiàn))
- 對于大多數(shù)情況瞧哟,您應該理解服務名稱,服務名稱會負載均衡到服務后面的所有容器(也可以理解為tasks)上枪向。為了得到服務后面的所有tasks(容器)勤揩,要做一次tasks的dns查找<service-name>。
Macvlan
- 一些應用程序秘蛔,尤其遺留的應用程序或者監(jiān)控網(wǎng)絡傳輸?shù)膽贸绦蛟赏觯谕苯舆B接物理網(wǎng)絡。在這種情況下深员,你可以使用Macvlan網(wǎng)絡驅動分配一個MAC地址到每一個容器虛擬網(wǎng)絡接口上负蠕,使它看起來像一個物理網(wǎng)絡接口直接連接到另一個物理網(wǎng)絡接口上。在這種情況下辨液,你需要在你的宿主機上指明一個物理網(wǎng)絡接口使用Macvlan網(wǎng)絡虐急,同時指定Macvlan子網(wǎng)絡和網(wǎng)關。你也可以使用不同的物理網(wǎng)絡接口來隔離你的Macvlan網(wǎng)絡滔迈。請注意一下幾點:
1止吁、由于IP地址的耗盡或者VLAN擴展而意外損耗網(wǎng)絡是不可避免的,在這種情況下你的網(wǎng)絡中燎悍,會出現(xiàn)大量不合理的唯一MAC地址敬惦。
2、你的網(wǎng)絡設備需要能處理混雜模式谈山,一個物理網(wǎng)卡俄删,可以被分配多個MAC地址。
3奏路、如果你的應用程序使用橋接(單個容器實例)或者overlay網(wǎng)絡(多個docker主機的通信)畴椰,從長遠角度來看,這些解決方案也許是更好鸽粉。
Create a macvlan network (創(chuàng)建一個Macvlan網(wǎng)絡)
- 當你創(chuàng)建一個Macvlan網(wǎng)絡斜脂,它既可以在橋接模式下,又可以在802.1q中繼橋接模式下触机。
1帚戳、在橋接模式下玷或,Macvlan通信是通過主機上的物理網(wǎng)卡進行傳輸?shù)摹?/p>
2、在802.1q中繼網(wǎng)絡模式下片任,docker會在fly上創(chuàng)建一個子接口偏友,通信會在這種情況下進行傳輸。它允許你控制路由和過濾更多等級的網(wǎng)絡对供。
1位他、Bridge mode(橋接模式)
- 要創(chuàng)建與給定物理網(wǎng)絡接口橋接的Macvlan網(wǎng)絡,使用帶有--driver macvlan 選項 docker network create 命令.你也需要指定parent犁钟,parent是通過docker主機進行傳輸?shù)耐ㄐ沤涌凇?/li>
$ docker network create -d macvlan \
--subnet=172.16.86.0/24 \
--gateway=172.16.86.1 \
-o parent=eth0 pub_net
- 如果你需要從Macv網(wǎng)絡中過濾一些IP地址棱诱,當你已經(jīng)使用一些網(wǎng)絡地址,你可以使用--aux-addresses選項:
$ docker network create -d macvlan \
--subnet=192.168.32.0/24 \
--ip-range=192.168.32.128/25 \
--gateway=192.168.32.254 \
--aux-address="my-router=192.168.32.129" \
-o parent=eth0 macnet32
2涝动、802.1q trunk bridge mode(中繼橋接網(wǎng)絡)
- 使用一個包含小數(shù)的父接口名稱,例如:eth0.50炬灭,
Docker會將其解釋為eth0的子接口醋粟,并自動創(chuàng)建子接口。
$ docker network create -d macvlan \
--subnet=192.168.50.0/24 \
--gateway=192.168.50.1 \
-o parent=eth0.50 macvlan50
3重归、Use an ipvlan instead of macvlan(使用一個ipvlan代替macvlan網(wǎng)絡)
- 在以下示例中米愿,你仍然可以使用L3橋接。你也可以是用ipvlan代替鼻吮,得到一個L2橋接育苟。指明-o ipvlan_mode=l2。
$ docker network create -d ipvlan \
--subnet=192.168.210.0/24 \
--subnet=192.168.212.0/24 \
--gateway=192.168.210.254 \
--gateway=192.168.212.254 \
-o ipvlan_mode=l2 ipvlan210
Use IPv6
- 如果你設置docker使用IPv6椎木,你也可以IPv4和IPv6的Macvlan網(wǎng)絡违柏。
$ docker network create -d macvlan \
--subnet=192.168.216.0/24 --subnet=192.168.218.0/24 \
--gateway=192.168.216.1 --gateway=192.168.218.1 \
--subnet=2001:db8:abc8::/64 --gateway=2001:db8:abc8::10 \
-o parent=eth0.218 \
-o macvlan_mode=bridge macvlan216
以上內(nèi)容是對docker 網(wǎng)絡內(nèi)容的相關翻譯和自己的理解。