Docker常用于container虛擬化,通過docker我們可以將應(yīng)用及其依賴打包到container發(fā)到生產(chǎn)環(huán)境中,這可以減少系統(tǒng)間的差異,并且避免在不同系統(tǒng)中配置應(yīng)用程序所需要的依賴關(guān)系。在網(wǎng)絡(luò)方面,Docker也非常靈活,它支持雙網(wǎng)口。
Docker雙網(wǎng)口的概念其實(shí)和物理設(shè)備的雙網(wǎng)口并沒有太大的區(qū)別。在Docker中,我們可以使用多個(gè)物理網(wǎng)卡或虛擬網(wǎng)卡對一個(gè)container進(jìn)行網(wǎng)絡(luò)透傳。
# 示例docker run命令 sudo docker run -ti --name container1 --net=br1 --ip=192.168.1.2 \ --privileged=true --network=none ubuntu bash sudo docker run -ti --name container2 --net=br2 --ip=192.168.2.2 \ --privileged=true --network=none ubuntu bash
上述代碼中,我們可以看到兩個(gè)container,分別使用了不同的bridge網(wǎng)絡(luò),并且分配了不同的IP地址。其中--privileged=true參數(shù)表示為container加入了特權(quán)模式,以擁有更高的網(wǎng)絡(luò)權(quán)限。
Docker雙網(wǎng)口的應(yīng)用場景非常廣泛,比如:負(fù)載均衡器、云計(jì)算平臺等。通常我們需要在多個(gè)container中實(shí)現(xiàn)負(fù)載均衡,這時(shí)我們可以在每個(gè)container中配置兩個(gè)網(wǎng)卡,一個(gè)用于內(nèi)網(wǎng)通信,一個(gè)用于外網(wǎng)通信,這樣就可以快速地構(gòu)建一個(gè)高可用的負(fù)載均衡器了。
# 示例docker-compose.yml配置 version: '3.9' services: nginx1: image: nginx container_name: nginx1 networks: outside: ipv4_address: 192.168.1.2 inside: ipv4_address: 172.18.0.2 ports: - "8080:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf command: [nginx-debug, '-g', 'daemon off;'] privileged: true nginx2: image: nginx container_name: nginx2 networks: outside: ipv4_address: 192.168.1.3 inside: ipv4_address: 172.18.0.3 ports: - "8081:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf command: [nginx-debug, '-g', 'daemon off;'] privileged: true networks: outside: ipam: driver: default config: - subnet: 192.168.1.0/24 inside: ipam: driver: default config: - subnet: 172.18.0.0/16
上述代碼中,我們使用docker-compose配置一個(gè)負(fù)載均衡器,其中兩個(gè)nginx container互相配置為負(fù)載均衡,我們在這個(gè)配置中為nginx server分配了兩個(gè)不同的網(wǎng)絡(luò),一個(gè)用于外部,一個(gè)用于內(nèi)部,內(nèi)部的通信可以快速跨container實(shí)現(xiàn)。