Docker Compose network配置

这里是对docker compose 网络配置的一些说明,详细的文档参考:

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

1 default network

如果不显式指定,Compose会为每一个app设置一个default网络。每个service的container会加入这个default网络并且能够被这个网络上的其他container访问到,hostname就是container的name,通过这个hostname可以发现container。

注意:

  App的default网络的名字基于yaml文件所在的目录名字命名。可以修改此name使用--project-name flag或者COMPOSE_PROJECT_NAME 环境变量。

 

例子:

假设yaml文件所在的目录名为myapp,内容为:

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

当运行docker-compose up命令时,会做一下事情:

  1. 创建一个名为myapp_default 的network
  2. 创建一个container使用web的配置参数,它加入myapp_default network并且hostname为web
  3. 创建一个container使用db的配置参数,它加入myapp_default network并且hostname为db

 

每一个container可以使用hostname web和db访问者两个容器。例如,web中的application可以使用url postgres://db:5432 访问postgre 数据库。

 

2区分HOST_PORT 和CONTAINER_PORT

上面的例子中,dbHOST_PORT8001 CONTAINER_PORT5432. 同一个networkservice之间使用CONTAINER_PORT进行通信, 如果有HOST_PORT, 那么docker之外可以使用HOST_PORT访问服务。

例如,web container内的进程可以使用postgres://db:5432访问db服务。 宿主机上的程序可以使用postgres://{DOCKER_IP}:8001 访问db服务。

 

3更新容器

如果更新了一个docker service的配置,然后运行docker-compose up 更新它, 那么老的container会被删除,新的container会使用一个不同ip加入network但是host name相同。正在运行的container可以通过名字查找并连接到新的ip,老的ip不再工作了。

如果有container仍然存在到老container的连接,这些连接会被关闭。 Container负责检测这种状况并重新连接到新container。

4自定义network

除了使用default 网络,也可以使用networks关键字自定义自己的网络。这样可以创建更复杂的拓扑结构,也可以连接到外部的网络。例如下面的例子,service proxy和db是相互隔离的,因为他们分别加入不同的网络,app可以与他们两个都建立通信。

version: "3"
services:

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

networks:
  frontend:
    external: true
driver: custom-driver-1
name: frontend
  backend:
    driver: custom-driver-2
    name: backend

5 docker network常用命令

docker network命令是network相关的操作

主要的命令有:

$ docker network --help

Usage: docker network COMMAND

Manage networks

Commands:

  connect     连接一个container到一个network

  create      创建一个network

  disconnect  从一个network断开container

  inspect     显示network的详细信息

  ls          列出所有的network

  prune      删除不用的networks

  rm         删除一个或多个network

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Bazarr Docker Compose配置的示例: ```yaml version: '3' services: bazarr: image: linuxserver/bazarr container_name: bazarr restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=Europe/London - UMASK_SET=022 # optional volumes: - /path/to/bazarr/config:/config - /path/to/downloads:/downloads - /path/toovies:/movies - /path/to/tvshows:/tv ports: - 6767:6767 depends_on: - plex networks: - media_network plex: image: plexinc/pms-docker container_name: plex restart: unless-stopped environment: - PUID=1000 - PGID=1000 - TZ=Europe/London - PLEX_CLAIM=claim-xxxxxxxxxxxxx volumes: - /path/to/plex/config:/config - /path/to/transcode:/transcode - /path/to/media:/data ports: - 32400:32400 - 3005:3005 - 8324:8324 - 32469:32469 - 1900:1900 - 32410:32410 - 32412:32412 - 32413:32413 - 32414:32414 networks: - media_network networks: media_network: driver: bridge ``` 在这个示例中,我们定义了两个服务:bazarr和plex。bazarr服务使用了linuxserver/bazarr镜像,而plex服务使用了plexinc/pms-docker镜像。我们还定义了一个名为media_network的网络,以便这两个服务可以相互通信。 在bazarr服务中,我们指定了容器名称,重启策略,环境变量,卷和端口。我们还指定了依赖项,这意味着bazarr服务将在plex服务启动之后启动。最后,我们将bazarr服务添加到media_network网络中。 在plex服务中,我们指定了容器名称,重启策略,环境变量,卷和端口。我们还将plex_claim环境变量设置为我们的Plex帐户的声明代码。最后,我们将plex服务添加到media_network网络中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值