Docker系列教程24-Docker Compose網(wǎng)絡(luò)設(shè)置

本節(jié)我們來詳細探討Compose的網(wǎng)絡(luò)設(shè)置。本節(jié)介紹的網(wǎng)絡(luò)特性僅適用于Version 2 file format,Version 1 file format不支持該特性。

基本概念

默認情況下,Compose會為我們的應(yīng)用創(chuàng)建一個網(wǎng)絡(luò),服務(wù)的每個容器都會加入該網(wǎng)絡(luò)中。這樣,容器就可被該網(wǎng)絡(luò)中的其他容器訪問,不僅如此,該容器還能以服務(wù)名稱作為hostname被其他容器訪問。

默認情況下,應(yīng)用程序的網(wǎng)絡(luò)名稱基于Compose的工程名稱,而項目名稱基于docker-compose.yml所在目錄的名稱。如需修改工程名稱,可使用--project-name標識或COMPOSE_PORJECT_NAME環(huán)境變量。

舉個例子,假如一個應(yīng)用程序在名為myapp的目錄中,并且docker-compose.yml如下所示:

version: '2'
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

當我們運行docker-compose up時,將會執(zhí)行以下幾步:

  • 創(chuàng)建一個名為myapp_default的網(wǎng)絡(luò);
  • 使用web服務(wù)的配置創(chuàng)建容器,它以“web”這個名稱加入網(wǎng)絡(luò)myapp_default;
  • 使用db服務(wù)的配置創(chuàng)建容器,它以“db”這個名稱加入網(wǎng)絡(luò)myapp_default。

容器間可使用服務(wù)名稱(web或db)作為hostname相互訪問。例如,web這個服務(wù)可使用postgres://db:5432 訪問db容器。

更新容器

當服務(wù)的配置發(fā)生更改時,可使用docker-compose up命令更新配置。

此時,Compose會刪除舊容器并創(chuàng)建新容器。新容器會以不同的IP地址加入網(wǎng)絡(luò),名稱保持不變。任何指向舊容器的連接都會被關(guān)閉,容器會重新找到新容器并連接上去。

links

前文講過,默認情況下,服務(wù)之間可使用服務(wù)名稱相互訪問。links允許我們定義一個別名,從而使用該別名訪問其他服務(wù)。舉個例子:

version: '2'
services:
  web:
    build: .
    links:
      - "db:database"
  db:
    image: postgres

這樣web服務(wù)就可使用db或database作為hostname訪問db服務(wù)了。

指定自定義網(wǎng)絡(luò)

一些場景下,默認的網(wǎng)絡(luò)配置滿足不了我們的需求,此時我們可使用networks命令自定義網(wǎng)絡(luò)。networks命令允許我們創(chuàng)建更加復(fù)雜的網(wǎng)絡(luò)拓撲并指定自定義網(wǎng)絡(luò)驅(qū)動和選項。不僅如此,我們還可使用networks將服務(wù)連接到不是由Compose管理的、外部創(chuàng)建的網(wǎng)絡(luò)。

如下,我們在其中定義了兩個自定義網(wǎng)絡(luò)。

version: '2'

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"

其中,proxy服務(wù)與db服務(wù)隔離,兩者分別使用自己的網(wǎng)絡(luò);app服務(wù)可與兩者通信。

由本例不難發(fā)現(xiàn),使用networks命令,即可方便實現(xiàn)服務(wù)間的網(wǎng)絡(luò)隔離與連接。

配置默認網(wǎng)絡(luò)

除自定義網(wǎng)絡(luò)外,我們也可為默認網(wǎng)絡(luò)自定義配置。

version: '2'

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

這樣,就可為該應(yīng)用指定自定義的網(wǎng)絡(luò)驅(qū)動。

使用已存在的網(wǎng)絡(luò)

一些場景下,我們并不需要創(chuàng)建新的網(wǎng)絡(luò),而只需加入已存在的網(wǎng)絡(luò),此時可使用external選項。示例:

networks:
  default:
    external:
      name: my-pre-existing-network

本文首發(fā)

http://www.itmuch.com/docker/24-docker-compose-network/

干貨分享

全是干貨
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《Docker從入門到實踐》閱讀筆記 原書地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,672評論 1 39
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國...
    Blazzer閱讀 3,241評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評論 19 139
  • “2016也沒干干什么大事,想要的沒有得到,想考的沒有考過,開心的并不長久,難過的也久郁心頭。該留的還在身邊,該走...
    明月松間z同學(xué)閱讀 2,055評論 2 2
  • 今天看到的內(nèi)容是講動詞的。比較新穎的是對動詞的分類。分為了完全不及物動詞,不完全不及物動詞,完全及物動詞,不完全及...
    哇620閱讀 170評論 0 0

友情鏈接更多精彩內(nèi)容