Docker Compose网络系列--网络的配置

原文网址:Docker Compose网络系列--网络的配置_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍Docker Compose的网络的配置。

官网网址

https://docs.docker.com/compose/networking/

compose的默认配置

默认情况下,Compose会为应用创建一个网络,服务(docker-compose.yaml中的services项)的每个容器都会加入该网络中。这样容器就可被该网络中的其他容器访问,而且该容器还能以服务名称作为hostname被其他容器访问。

默认的网络

例如,假设有一个项目,目录名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_PORT和CONTAINER_PORT,以上面的db为例:8001 是宿主机的端口,5432(postgres的默认端口) 是容器的端口,当容器之间通讯时, 是通过 CONTAINER_PORT 来连接的。这里有宿主机端口,那么容器就可以通过宿主机端口和外部应用连接。

更新容器

当服务的配置发生变更时,可使用docker-compose up命令更新配置。

此时,Compose会删除旧容器并创建新容器。新容器会以不同的IP地址加入网络,名称保持不变。任何指向旧容器的连接都会被关闭,容器会重新找到新容器并连接上去。

links

默认情况下,服务之间可使用服务名称相互访问。links允许定义一个别名,从而使用给别名访问其他服务。

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

这样Web服务就可使用db或database作为hostname访问db了。

指定自定义网络

概述

有时默认的网络配置满足不了需求,可使用一级配置中的networks选项自定义网络。

networks选项允许创建更复杂的网络拓扑并指定自定义网络驱动和选项。不仅如此,还可使用networks将服务连接到外部创建的而且不是由Compose管理的网络。

每个service 配置下也可以指定networks配置,来指定一级配置的网络。

示例

下边的配置中,proxy与db服务隔离(不能通讯,因为不在一个网络中),app服务可与两者通信。使用networks命令,可方便实现服务间的网络隔离与连接。

version: '2'
services:
  proxy:
    build: ./proxy
    networks:
      - front
  app:
    build: ./app
    networks:
      - front
      - back
  db:
    image: postgres
    networks:
      - back
networks:
  front:
    drvier: custom-driver-1
  back:
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"

配置默认网络

除自定义网络外,也可配置默认网络。不配置的话,默认是使用:bridge。

示例

下边的配置中,将应用的默认网络指定为一个自定义网络(custom-driver-1)。

version: '2'
services:
  web:
    build .
    ports:
      - "8000:8000"
  db:
    image: postgres
networks:
  default:
    driver:custom-driver-1

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...