Docker如何自定義網(wǎng)絡(luò)實(shí)現(xiàn)容器互通
一、自定義網(wǎng)絡(luò)核心優(yōu)勢(shì)
與傳統(tǒng)–link對(duì)比
能力 | 默認(rèn)bridge±-link | 自定義網(wǎng)絡(luò) |
---|---|---|
自動(dòng)DNS解析 | 僅單向鏈接有效 | 全網(wǎng)絡(luò)自動(dòng)雙向解析 |
服務(wù)發(fā)現(xiàn) | 需手動(dòng)維護(hù)鏈接 | 動(dòng)態(tài)更新容器IP映射 |
網(wǎng)絡(luò)隔離 | 共享默認(rèn)bridge | 獨(dú)立子網(wǎng)隔離 |
連接方式 | 僅允許已鏈接容器通信 | 網(wǎng)絡(luò)內(nèi)自由通信 |
二、網(wǎng)絡(luò)創(chuàng)建與配置
2.1 創(chuàng)建自定義網(wǎng)絡(luò)
# 創(chuàng)建帶自定義參數(shù)的bridge網(wǎng)絡(luò) docker network create \ --driver=bridge \ --subnet=172.28.0.0/16 \ --gateway=172.28.0.1 \ --ipv6 --subnet=2001:db8:abc::/48 \ --label env=prod \ app-network # 驗(yàn)證網(wǎng)絡(luò)配置 docker network inspect app-network
2.2 網(wǎng)絡(luò)參數(shù)詳解
參數(shù) | 示例值 | 作用說(shuō)明 |
---|---|---|
–driver | bridge/overlay/macvlan | 指定網(wǎng)絡(luò)驅(qū)動(dòng)類(lèi)型 |
–subnet | 172.28.0.0/16 | 定義IPv4子網(wǎng) |
–gateway | 172.28.0.1 | 設(shè)置默認(rèn)網(wǎng)關(guān) |
–ip-range | 172.28.5.0/24 | 限制IP分配范圍 |
–aux-address | host1=172.28.1.5 | 保留指定IP避免分配沖突 |
三、容器連接與通信驗(yàn)證
3.1 部署多容器服務(wù)
# 運(yùn)行數(shù)據(jù)庫(kù)容器 docker run -d \ --name mysql-db \ --network app-network \ -e MYSQL_ROOT_PASSWORD=secret \ mysql:8.0 # 運(yùn)行應(yīng)用容器 docker run -d \ --name webapp \ --network app-network \ -p 8080:8080 \ -e DB_HOST=mysql-db \ my-webapp:latest
3.2 通信驗(yàn)證方法
# 進(jìn)入應(yīng)用容器測(cè)試連接 docker exec -it webapp ping mysql-db # 查看DNS解析記錄 docker exec webapp cat /etc/resolv.conf # 網(wǎng)絡(luò)連通性測(cè)試 docker exec webapp nc -zv mysql-db 3306
四、高級(jí)網(wǎng)絡(luò)策略
4.1 容器別名機(jī)制
# 為容器添加別名 docker run -d \ --name legacy-app \ --network app-network \ --network-alias old-system \ legacy-app:v2 # 使用別名訪(fǎng)問(wèn) docker exec webapp curl http://old-system:8000
4.2 網(wǎng)絡(luò)安全配置
# 創(chuàng)建隔離網(wǎng)絡(luò) docker network create \ --internal \ --ipam-opt com.docker.network.bridge.enable_icc=false \ secure-network # 容器間訪(fǎng)問(wèn)控制 docker network connect --alias db --ip 172.29.0.101 app-network mysql-db
五、多網(wǎng)絡(luò)架構(gòu)設(shè)計(jì)
5.1 分層網(wǎng)絡(luò)模型
# 前端網(wǎng)絡(luò) docker network create frontend-net --subnet=10.10.0.0/24 # 后端網(wǎng)絡(luò) docker network create backend-net --subnet=10.20.0.0/24 # 數(shù)據(jù)庫(kù)網(wǎng)絡(luò) docker network create database-net --subnet=10.30.0.0/24
5.2 容器多網(wǎng)卡配置
# 連接多個(gè)網(wǎng)絡(luò) docker network connect frontend-net webapp docker network connect backend-net webapp # 查看網(wǎng)絡(luò)接口 docker exec webapp ip addr show
六、生產(chǎn)環(huán)境最佳實(shí)踐
6.1 網(wǎng)絡(luò)規(guī)劃建議
網(wǎng)絡(luò)類(lèi)型 | IP段分配 | 連接服務(wù) |
---|---|---|
前端流量網(wǎng)絡(luò) | 172.18.0.0/20 | Nginx、HAProxy |
業(yè)務(wù)服務(wù)網(wǎng)絡(luò) | 192.168.16.0/20 | Spring Boot、Node.js應(yīng)用 |
數(shù)據(jù)存儲(chǔ)網(wǎng)絡(luò) | 10.8.0.0/16 | MySQL、Redis、Elasticsearch |
管理網(wǎng)絡(luò) | 10.255.0.0/24 | Prometheus、Consul |
6.2 網(wǎng)絡(luò)監(jiān)控方案
# 實(shí)時(shí)監(jiān)控容器網(wǎng)絡(luò)流量 docker run -it --rm --net=host nicolaka/netshoot \ nload -t 1000 -i 1024 -o 1024 eth0 ???????# 抓包分析容器通信 docker run --cap-add=NET_ADMIN --net=container:webapp \ nicolaka/netshoot tcpdump -i eth0 port 3306 -vv
七、常見(jiàn)問(wèn)題排查指南
7.1 網(wǎng)絡(luò)連接故障樹(shù)
7.2 典型錯(cuò)誤解決
問(wèn)題:ping: bad address 'mysql-db'
排查步驟:
確認(rèn)容器處于同一網(wǎng)絡(luò)
docker inspect webapp | grep NetworkMode
檢查容器DNS配置
docker exec webapp cat /etc/resolv.conf
手動(dòng)解析測(cè)試
docker exec webapp nslookup mysql-db
以上就是Docker如何自定義網(wǎng)絡(luò)實(shí)現(xiàn)容器互通的詳細(xì)內(nèi)容,更多關(guān)于Docker網(wǎng)絡(luò)容器互通的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker實(shí)現(xiàn)本地seata分布式環(huán)境搭建詳解
這篇文章主要為大家詳細(xì)介紹了docker實(shí)現(xiàn)本地seata分布式環(huán)境搭建的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-03-03Docker?Windows下如何安裝詳細(xì)介紹(圖文)
這篇文章主要介紹了Docker?Windows下如何安裝詳細(xì)介紹(圖文)的相關(guān)資料,需要的朋友可以參考下2016-12-12快速使用docker-compose部署clickhouse的教程
ClickHouse 的工作速度比傳統(tǒng)方法快 100-1000 倍。它適用于大數(shù)據(jù)、業(yè)務(wù)分析和時(shí)間序列數(shù)據(jù)。在這個(gè)小教程中,我將向您展示如何以最少的設(shè)置安裝 ClickHouse,感興趣的朋友一起看看吧2021-11-11單機(jī)docker-compose部署minio過(guò)程
簡(jiǎn)述通過(guò)Docker-Compose在單機(jī)上掛載多硬盤(pán)實(shí)現(xiàn)MinIO多副本部署的方法,包括配置docker-compose.yaml和nginx.conf等關(guān)鍵步驟,適合服務(wù)器資源有限的場(chǎng)景2024-10-10如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目
這篇文章主要介紹了如何利用Docker部署一個(gè)簡(jiǎn)單的springboot項(xiàng)目,本文通過(guò)實(shí)例圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02Docker部署Go項(xiàng)目發(fā)布鏡像到倉(cāng)庫(kù)
這篇文章主要為大家介紹了Docker部署Go項(xiàng)目發(fā)布鏡像到倉(cāng)庫(kù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03