docker-compose配置networks


docker-compose配置networks

默認網絡

例如, 假設有一個項目,目錄名myapp, docker-compose.yml 配置如下:

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

當執行 docker-compose up 的時候。會發生以下事情:

  1. 會創建一個名字是 myapp_default的網絡(networks)
  2. web這個容器會加入到 myapp_default網絡中,並且在網絡中的名稱為:web
  3. db這個容器會加入到 myapp_default網絡中,並且在網絡中的名稱為:db

這里,每個容器都能通過應用名找到對方,例如,web容器可以通過 postgres://db:5432 來使用 Pg數據庫。

上面例子還有一個注意點就是端口號,注意區分HOST_PORTCONTAINER_PORT,以上面的db為例:

  • 8001 是宿主機的端口
  • 5432(postgres的默認端口) 是容器的端口

當容器之間通訊時 , 是通過 CONTAINER_PORT 來連接的。

這里有宿主機端口,那么容器就可以通過宿主機端口和外部應用連接。

更新容器

對已經啟動的容器,再執行 docker-compose up 的時候,舊容器刪除,然后創建一個新的容器。

新容器會加入到網絡,相同的網絡名稱,但容器IP是不一樣的。已經連接的其他容器會自己重連到新的容器IP上。

自定義網絡

可能通過一級配置networks來自定義網絡,可以創建更復雜的網絡選項和配置,也可以用來連接已經存在的網絡(不是通過compose創建的)

每個service 配置下也可以指定networks配置,來指定一級配置的網絡。

例如:

version: "3"
services:

  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    # Use a custom driver
    driver: custom-driver-1
  backend:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"
  1. 一級配置networks 用來創建自定義的網絡 。這里配置了兩個frontendbackend . 且自定義了網絡類型。
  2. 每一個serviceg下,proxy , app , db都定義了一下networks配置。
    1. proxy 只加入到 frontend網絡。
    2. db 只加入到backend網絡。
    3. app同時加入到 frontendbackend
    4. dbproxy不能通訊,因為不在一個網絡中。
    5. app和兩個都能通訊,因為app在兩個網絡中都有配置。
    6. dbproxy要通訊,只能通過app這個應用來連接。

配置默認網絡

不指定網絡時,默認的網絡也是可以配置的。不配置的話,默認是使用:brige,也可以修改為其他 的。

version: "3" services: web: build: . ports: - "8000:8000" db: image: postgres networks: default: # Use a custom driver driver: custom-driver-1 

指定一個已經存在的網絡

多個容器,不在相同的配置中,也會有網絡通訊的需求 。那么就可以使用公共的網絡配置。

容器可以加入到已經存在的網絡。

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

這里name就是指定已經存在的網絡名稱。



作者:ElEGanT棇
鏈接:https://www.jianshu.com/p/3004fbce4d37
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM