多個(gè)docker compose啟動(dòng)的容器之間通信實(shí)現(xiàn)過程
背景
本地或者某些開發(fā)環(huán)境我們會(huì)使用docker-compose.yml來(lái)編排一組容器,同時(shí)會(huì)給這一組容器分配默認(rèn)的網(wǎng)絡(luò)外部名稱,
以busybox鏡像舉個(gè)例子:
services:
g1:
image: busybox:latest
container_name: g1
restart: unless-stopped
command: ['sh', '-c', 'echo "Hello from BusyBox!" && sleep 3600']
networks:
default:
name: group1_net
使用docker compose docker-compose.yml up -d啟動(dòng)后使用docker network ls就可以看到名字為group1_net的默認(rèn)網(wǎng)絡(luò)
docker network ls ... eda03dfdc6ed group1_net bridge local
一般我們會(huì)將這一組相關(guān)的容器編排的docker-compose.yml文件放置于一個(gè)文件夾中進(jìn)行維護(hù),當(dāng)本地存在多組編排的容器的docker-compose.yml文件的時(shí)候,也就相當(dāng)于會(huì)有多個(gè)文件夾用于存放和管理這些文件,比如本地有兩組編排的容器,
那么本地文件結(jié)構(gòu)如下:
tree
.
├── group1
│ └── docker-compose.yml
└── group2
└── docker-compose.yml
2 directories, 2 files
啟動(dòng)這兩組容器,可以看到相應(yīng)的網(wǎng)絡(luò)同時(shí)創(chuàng)建
8d6bce7a03cc group1_net bridge local 080cfe997ef2 group2_net bridge local
這個(gè)時(shí)候會(huì)引入一個(gè)問題,這種方式會(huì)讓啟動(dòng)的每一組容器網(wǎng)絡(luò)是隔離的,一般情況下編排容器組的時(shí)候確實(shí)是每一組容器應(yīng)該做網(wǎng)絡(luò)隔離,但是某些場(chǎng)景還是會(huì)遇到需要夸容器組的網(wǎng)絡(luò)訪問,
最佳實(shí)現(xiàn)
實(shí)現(xiàn)跨容器組(docker-compose)的容器訪問最佳實(shí)現(xiàn)還是將需要跨組訪問的容器組分配到同一個(gè)網(wǎng)絡(luò).
這個(gè)實(shí)現(xiàn)非常簡(jiǎn)單,首先使用如下指令創(chuàng)建一個(gè)network公共網(wǎng)絡(luò).
docker network create group_share_net
然后修改每一個(gè)容器組的docker-compose.yml的默認(rèn)網(wǎng)絡(luò)配置項(xiàng).將其網(wǎng)絡(luò)名字改為前一步創(chuàng)建的公共網(wǎng)絡(luò)名,即group_share_net同時(shí)配置external: true,表示此docker-compose.yml使用已經(jīng)定義好的外部網(wǎng)絡(luò).
修改后的結(jié)果如下:
services:
g1:
image: busybox:latest
container_name: g1
restart: unless-stopped
command: ['sh', '-c', 'echo "Hello from BusyBox!" && sleep 3600']
networks:
default:
external: true
name: group_share_net
以及
services:
g2:
image: busybox:latest
container_name: g2
restart: unless-stopped
command: ['sh', '-c', 'echo "Hello from BusyBox!" && sleep 3600']
networks:
default:
external: true
name: group_share_net
再重啟兩個(gè)容器組,這個(gè)時(shí)候進(jìn)入到容器g1去嘗試ping通容器g2.
docker exec -it g1 /bin/sh / # ping -c 5 g2 PING g2 (172.20.0.2): 56 data bytes 64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.061 ms 64 bytes from 172.20.0.2: seq=1 ttl=64 time=0.024 ms 64 bytes from 172.20.0.2: seq=2 ttl=64 time=0.026 ms 64 bytes from 172.20.0.2: seq=3 ttl=64 time=0.017 ms 64 bytes from 172.20.0.2: seq=4 ttl=64 time=0.019 ms --- g2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 0.017/0.029/0.061 ms
這里就可以看出group1中的g1容器可以正常訪問到group2中的g2容器,表明兩個(gè)docker-compose.yml編排的容器就能夠?qū)崿F(xiàn)相互訪問.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows Server 2016 安裝 Docker的過程及遇到問題
若要在 Windows Server 上安裝 Docker,可以使用由 Microsoft 發(fā)布的 OneGet 提供程序 PowerShell 模塊,接下來(lái)通過本文給大家介紹Windows Server 2016 安裝 Docker的過程及遇到問題,一起看看吧2021-09-09
基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼
Selenium Grid允許我們?cè)诙嗯_(tái)計(jì)算機(jī)上并行運(yùn)行測(cè)試,并集中管理不同的瀏覽器版本和瀏覽器配置。這篇文章給大家介紹基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼,需要的朋友參考下吧2021-08-08
如何批量刪除Docker中已經(jīng)停止的容器的幾種方法
本文主要介紹了批量刪除Docker中已經(jīng)停止的容器的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
Docker Compose在不同環(huán)境的多種安裝方式
這篇文章主要介紹了Docker Compose在不同環(huán)境的多種安裝方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

