docker-compose網(wǎng)絡(luò)設(shè)置之networks的使用
官網(wǎng)的docker-compose.yml參考文檔:Compose file version 3 reference
較為準(zhǔn)確的中文翻譯版:Compose file version 3 reference
networks通常應(yīng)用于集群服務(wù),從而使得不同的應(yīng)用程序得以在相同的網(wǎng)絡(luò)中運(yùn)行,從而解決網(wǎng)絡(luò)隔離問(wèn)題。這種應(yīng)用在swarm部署中,非常常見(jiàn)。不過(guò),本文并不做討論。
一般對(duì)于集群服務(wù),常常通過(guò)docker-compose.yml文檔快速編排、部署應(yīng)用服務(wù)。官網(wǎng)中給出了如下的使用場(chǎng)景和方式:
1. 未顯式聲明網(wǎng)絡(luò)環(huán)境的docker-compose.yml
例如,在目錄app
下創(chuàng)建docker-compose.yml,內(nèi)容如下:
version: '3' services: web: mage: nginx:latest container_name: web depends_on: - db ports: - "9090:80" links: - db db: image: mysql container_name: db
使用docker-compose up
啟動(dòng)容器后,這些容器都會(huì)被加入app_default
網(wǎng)絡(luò)中。使用docker network ls
可以查看網(wǎng)絡(luò)列表,docker network inspect <container id>
可以查看對(duì)應(yīng)網(wǎng)絡(luò)的配置。
$ docker net work ls NETWORK ID NAME DRIVER SCOPE 6f5d9bc0b0a0 app_default bridge local 0fb4027b4f6d bridge bridge local 567f333b9de8 docker-compose_default bridge local bb346324162a host host local a4de711f6915 mysql_app bridge local f6c79184ed27 mysql_default bridge local 6358d9d60e8a none null local
2. networks關(guān)鍵字指定自定義網(wǎng)絡(luò)
例如下面的docker-compose.yml文件,定義了front和back網(wǎng)絡(luò),實(shí)現(xiàn)了網(wǎng)絡(luò)隔離。其中proxy和db之間只能通過(guò)app來(lái)實(shí)現(xiàn)通信。其中,custom-driver-1
并不能直接使用,你應(yīng)該替換為host, bridge, overlay
等選項(xiàng)中的一種。
version: '3' services: proxy: build: ./proxy networks: - front app: build: ./app networks: - front - back db: image: postgres networks: - back networks: front: # Use a custom driver driver: custom-driver-1 back: # Use a custom driver which takes special options driver: custom-driver-2 driver_opts: foo: "1" bar: "2"
值得注意的是,這里定義了back
和front
兩個(gè)網(wǎng)絡(luò),似乎它們的名字就定義成了back
和font
,但是你使用docker network ls
命令并不能找到它們。假如你是在myApp
目錄下運(yùn)行的docker-compose up
命令,那么這兩個(gè)網(wǎng)絡(luò)應(yīng)該分別對(duì)應(yīng)myApp_back
和myApp_front
。
3. 配置默認(rèn)網(wǎng)絡(luò)
version: '2' services: web: build: . ports: - "8000:8000" db: image: postgres networks: default: # Use a custom driver driver: custom-driver-1
4. 使用已存在的網(wǎng)絡(luò)
networks: default: external: name: my-pre-existing-network
遇到的問(wèn)題
學(xué)習(xí)了上面的東西,筆者準(zhǔn)備將自己的項(xiàng)目付諸實(shí)踐。我的項(xiàng)目包含了兩個(gè)docker-compose.yml,且使用了links
選項(xiàng),所以必須使用networks配置。
其中,一個(gè)docker-compose.yml用于啟動(dòng)mysql服務(wù),位于mysql/
目錄下:
version: "3" services: dbmaster: image: master/mysql:latest container_name: dbmaster ports: - "3308:3306" volumes: - $HOME/Work/data/dbmaster:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: master logging: driver: "json-file" options: max-size: "1000k" max-file: "20" networks: - app dbslave: image: slave/mysql:latest container_name: dbslave ports: - "3309:3306" depends_on: - dbmaster volumes: - $HOME/Work/data/dbslave:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: slave logging: driver: "json-file" options: max-size: "1000k" max-file: "20" links: - dbmaster networks: - app networks: default: external: name: app
另一個(gè)docker-compose.yml用于啟動(dòng)服務(wù)程序,位于cloudgo/
目錄下:
version: "3" services: web: image: nginx:latest container_name: web depends_on: - cloudgo ports: - "9090:80" volumes: - $HOME/Work/docker/docker-compose/nginx/conf.d:/etc/nginx/conf.d links: - cloudgot logging: driver: "json-file" options: max-size: "1000k" max-file: "20" networks: - app cloudgo: image: cloudgo:latest container_name: cloudgo ports: - "8080:8080" logging: driver: "json-file" options: max-size: "1000k" max-file: "20" external_links: - dbmaster - dbslave networks: - app networks: app: external: true
我決定使用預(yù)先創(chuàng)建的網(wǎng)絡(luò),然后把他們加入這個(gè)已經(jīng)創(chuàng)建好的網(wǎng)絡(luò),從而實(shí)現(xiàn)通信。為此,我運(yùn)行了如下命令:
$ docker network create app
之后,開(kāi)始運(yùn)行編寫(xiě)好的docker-compose.yml文件。首先運(yùn)行啟動(dòng)mysql的配置文件,結(jié)果如下:
l$ docker-compose up ERROR: Service "dbmaster" uses an undefined network "app"
明明已經(jīng)創(chuàng)建好了,卻還是報(bào)了錯(cuò),說(shuō)該網(wǎng)絡(luò)未定義。嘗試改變名稱mysql_app
,但是依舊報(bào)出同樣的錯(cuò)誤。最終證明,這種方法無(wú)法實(shí)現(xiàn),至今沒(méi)有找到官方文檔給出的例子。
所以,最終決定將第一個(gè)docker-compose.yml文件中的networks配置改為如下內(nèi)容:
networks: mysql_app: driver: bridge
在這個(gè)文件中定義一個(gè)網(wǎng)絡(luò),以便在后面使用。這里修改完畢,該文件其他地方凡是引用到了該網(wǎng)絡(luò)的地方均要作出相同的修改。同樣,第二個(gè)文件也一樣。
其他的一些用法
使用aliases代替link
一般的使用格式如下:
services: some-service: networks: some-network: aliases: - alias1 - alias3 other-network: aliases: - alias2
在下面的例子中,我的web
容器可以直接通過(guò)database:3306
或者db:3306
訪問(wèn)db
容器了。它們同時(shí)屬于一個(gè)網(wǎng)絡(luò),并且db
設(shè)置了主機(jī)別名,所以這樣的訪問(wèn)方式是完全可以的。
version: '2' services: web: depends_on: - worker networks: - new worker: depends_on: - db networks: - legacy db: image: mysql networks: new: aliases: - database legacy: aliases: - mysql networks: new: legacy:
此時(shí)直接使用depends_on已經(jīng)不再需要link
,如果woker需要訪問(wèn)db,可以直接通過(guò)mysql:port
的方式。
使用networks的要點(diǎn)在于:
1. 注意自定義網(wǎng)絡(luò)的方式
2. 注意docker-compose.yml文件的位置與網(wǎng)絡(luò)默認(rèn)命名的關(guān)系
3. 注意遇到問(wèn)題嘗試幾種替代方式去解決
到此這篇關(guān)于docker-compose網(wǎng)絡(luò)設(shè)置之networks的使用的文章就介紹到這了,更多相關(guān)docker compose networks內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows10?Docker?Desktop安裝過(guò)程
Docker?Desktop是Docker公司推出的一款桌面應(yīng)用程序,它提供了一個(gè)用戶友好的界面,方便開(kāi)發(fā)人員在本地環(huán)境中使用容器技術(shù),這篇文章主要介紹了Windows10?Docker?Desktop安裝過(guò)程,需要的朋友可以參考下2024-01-01利用Docker?運(yùn)行?python?簡(jiǎn)單程序
這篇文章主要介紹了利用Docker?運(yùn)行?python?簡(jiǎn)單程序,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04docker部署Macvlan實(shí)現(xiàn)跨主機(jī)網(wǎng)絡(luò)通信的實(shí)現(xiàn)
這篇文章主要介紹了docker部署Macvlan實(shí)現(xiàn)跨主機(jī)網(wǎng)絡(luò)通信的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10docker在已有的tomcat鏡像上打新的鏡像的Dockerfile編寫(xiě)說(shuō)明介紹
這篇文章主要介紹了docker在已有的tomcat鏡像上打新的鏡像的Dockerfile編寫(xiě)說(shuō)明介紹,需要的朋友可以參考下2016-10-10springboot整合docker部署實(shí)現(xiàn)兩種構(gòu)建Docker鏡像方式
這篇文章主要介紹了springboot整合docker部署實(shí)現(xiàn)兩種構(gòu)建Docker鏡像方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04關(guān)于docker部署fastapi項(xiàng)目以及日志掛載方式
這篇文章主要介紹了關(guān)于docker部署fastapi項(xiàng)目以及日志掛載方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03