docker-compose配置networks

2020-09-22  本文已影响0人  _孙行者_

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为例:

当容器之间通讯时 , 是通过 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就是指定已经存在的网络名称。

上一篇下一篇

猜你喜欢

热点阅读