Docker如何使用OpenvSwitch網(wǎng)橋
Docker 默認(rèn)使用的是 Linux 自帶的網(wǎng)橋?qū)崿F(xiàn),實(shí)際上,OpenvSwitch 項(xiàng)目作為一個(gè)成熟的虛擬交換機(jī)實(shí)現(xiàn),具備更豐富的功能。個(gè)人認(rèn)為,將來 Docker 必然會(huì)支持 OpenvSwitch 作為其默認(rèn)網(wǎng)橋?qū)崿F(xiàn)。有興趣的同學(xué)歡迎通過如下的步驟來嘗鮮。
環(huán)境
在 Ubuntu 14.04 系統(tǒng)中進(jìn)行測(cè)試。操作流程也適用于 RedHat/CentOS 系列系統(tǒng),但少數(shù)命令和配置文件可能略有差異。
安裝 Docker
安裝最近版本的 Docker 并 啟動(dòng)服務(wù)。
$ sudo apt-get install apt-transport-https $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 $ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker $ sudo service docker start
此時(shí),Docker 服務(wù)會(huì)創(chuàng)建一個(gè)默認(rèn)的 docker0 網(wǎng)橋,作為連接容器的本地網(wǎng)橋,可以通過如下命令查看:
$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.000000000000 no
網(wǎng)橋 docker0 內(nèi)部接口的默認(rèn)地址為 172.17.42.1。
$ ifconfig docker0
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
安裝 OpenvSwitch
通過如下命令安裝 OpenvSwitch。
$ sudo aptitude install openvswitch-switch
測(cè)試添加一個(gè)網(wǎng)橋 br0 并查看。
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl show
20d0b972-e323-4e3c-9e66-1d8bb57c7ff5
Bridge ovs-br
Port ovs-br
Interface br0
type: internal
ovs_version: "2.0.2"
配置容器連接到 OpenvSwitch 網(wǎng)橋
目前 OpenvSwitch 網(wǎng)橋還不能直接支持掛載容器,需要手動(dòng)在 OpenvSwitch 網(wǎng)橋上創(chuàng)建虛擬網(wǎng)口并掛載到容器中。
創(chuàng)建無(wú)網(wǎng)口容器
啟動(dòng)一個(gè) ubuntu 容器,并指定不創(chuàng)建網(wǎng)絡(luò),后面我們手動(dòng)添加網(wǎng)絡(luò)。較新版本的 Docker 默認(rèn)不允許在容器內(nèi)修改網(wǎng)絡(luò)配置,需要在 run 的時(shí)候指定參數(shù) --privileged=true。
$ sudo docker run --net=none --privileged=true -it ubuntu:14.04 bash root@298bbb17c244:/#
記住這里容器的 id 為 298bbb17c244。
此時(shí)在容器內(nèi)查看網(wǎng)絡(luò)信息,只能看到一個(gè)本地網(wǎng)卡 lo。
root@298bbb17c244:/# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
手動(dòng)為容器添加網(wǎng)絡(luò)
下載 OpenvSwitch 項(xiàng)目提供的支持 Docker 容器的輔助腳本 ovs-docker。
$ wget https://github.com/openvswitch/ovs/raw/master/utilities/ovs-docker $ sudo chmod a+x ovs-docker
為容器添加網(wǎng)卡,并掛載到 br0 上,命令為
$ sudo ./ovs-docker add-port br0 eth0 298bbb17c244
添加成功后,在容器內(nèi)查看網(wǎng)絡(luò)信息,多了一個(gè)新添加的網(wǎng)卡 eth0,但是默認(rèn)并沒有 IP 地址。
root@298bbb17c244:/# ifconfig
eth0 Link encap:Ethernet HWaddr 7e:df:97:ac:1a:6a
inet6 addr: fe80::7cdf:97ff:feac:1a6a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:22 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3197 (3.1 KB) TX bytes:508 (508.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
手動(dòng)給它添加一個(gè),例如 172.17.0.2/16,并查看。
root@298bbb17c244:/# ifconfig eth0 172.17.0.2/16
root@298bbb17c244:/# ifconfig
eth0 Link encap:Ethernet HWaddr ae:3d:75:2c:18:ba
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::ac3d:75ff:fe2c:18ba/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:187 errors:0 dropped:2 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33840 (33.8 KB) TX bytes:1170 (1.1 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
在容器外,配置 OpenvSwitch 的網(wǎng)橋 br0 內(nèi)部接口地址為 172.17.42.2/16(只要與所掛載容器 IP 在同一個(gè)子網(wǎng)內(nèi)即可)。
$ sudo ifconfig br0 172.17.42.2/16
測(cè)試連通
經(jīng)過上面步驟,容器已經(jīng)連接到了網(wǎng)橋 br0 上了,拓?fù)淙缦滤尽?/p>
容器(172.17.0.2/16)<--> br0 網(wǎng)橋 <--> br0 內(nèi)部端口(172.17.42.2/16)
此時(shí),在容器內(nèi)就可以測(cè)試是否連通到網(wǎng)橋 br0 上了。
root@298bbb17c244:/# ping 172.17.42.2 PING 172.17.42.2 (172.17.42.2) 56(84) bytes of data. 64 bytes from 172.17.42.2: icmp_seq=1 ttl=64 time=0.874 ms 64 bytes from 172.17.42.2: icmp_seq=2 ttl=64 time=0.079 ms ^C --- 172.17.42.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 0.079/0.476/0.874/0.398 ms
在容器內(nèi)也可以配置默認(rèn)網(wǎng)關(guān)為 br0 接口地址。
root@298bbb17c244:/# route add default gw 172.17.42.2
另外,刪除該接口的命令為
$ sudo. /ovs-docker del-port br0 eth0 <CONTAINER_ID>
實(shí)際上,Docker 社區(qū)也已經(jīng)有討論對(duì) OpenvSwitch 的支持了。 在 Docker 原生支持 OpenvSwitch 之前,用戶可以通過編寫腳本或更高級(jí)的工具來讓這一過程自動(dòng)化。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
docker容器映射tcp或udp端口-如何通過docker-compose.yml
這篇文章主要介紹了docker容器映射tcp或udp端口-如何通過docker-compose.yml問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
docker啟動(dòng)mysql及-e MYSQL_ROOT_PASSWORD=my-secret-pw問題解決
本文主要介紹了docker啟動(dòng)mysql及-e MYSQL_ROOT_PASSWORD=my-secret-pw問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Docker的文件系統(tǒng)映射:主機(jī)與容器間目錄的雙向映射詳解
通過Docker的目錄映射功能,實(shí)現(xiàn)主機(jī)與容器間的數(shù)據(jù)共享與持久化存儲(chǔ),使用-v或--mount參數(shù)在運(yùn)行時(shí)設(shè)置主機(jī)與容器目錄映射,或通過DockerCompose配置文件實(shí)現(xiàn)自動(dòng)化,此功能提升數(shù)據(jù)管理靈活性和效率2024-11-11
Docker中安裝Redis并開啟遠(yuǎn)程訪問的詳細(xì)步驟
這篇文章主要介紹了Docker中安裝Redis并開啟遠(yuǎn)程訪問的詳細(xì)步驟,文中有詳細(xì)的代碼示例供大家參考,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-01-01
在Linux Ubuntu系統(tǒng)上使用Docker部署Android模擬器的操作指南
大家好,今天要給大家?guī)硪粋€(gè)超級(jí)實(shí)用的教程:如何在Linux Ubuntu系統(tǒng)上使用Docker部署Android模擬器,并結(jié)合cpolar內(nèi)網(wǎng)穿透工具實(shí)現(xiàn)遠(yuǎn)程訪問,需要的朋友可以參考下2025-03-03
docker實(shí)現(xiàn)本地seata分布式環(huán)境搭建詳解
這篇文章主要為大家詳細(xì)介紹了docker實(shí)現(xiàn)本地seata分布式環(huán)境搭建的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-03-03
使用Docker部署Dashdot服務(wù)器儀表盤的步驟
Dashdot是一款簡(jiǎn)單、實(shí)用的開源服務(wù)器儀表盤,設(shè)計(jì)時(shí)考慮到了玻璃形態(tài),它旨在用于較小的?VPS?和私人服務(wù)器,這篇文章主要介紹了使用Docker部署Dashdot服務(wù)器儀表盤,需要的朋友可以參考下2022-12-12
MySQL docker容器數(shù)據(jù)更新統(tǒng)計(jì)shell腳本代碼方式
本文介紹了如何創(chuàng)建和配置一個(gè)腳本文件,使其能夠每隔一小時(shí)執(zhí)行一次,用于更新MySQL統(tǒng)計(jì)信息,腳本使用Docker來執(zhí)行MySQL命令,并將結(jié)果保存到文件中,文章還強(qiáng)調(diào)了權(quán)限設(shè)置和配置定時(shí)任務(wù)的步驟2025-01-01

