Docker Compose network配置
发布日期:2021-10-03 22:59:29 浏览次数:36 分类:技术文章

本文共 1999 字,大约阅读时间需要 6 分钟。

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

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:      - backendnetworks:  frontend:    external: truedriver: custom-driver-1name: 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

转载地址:https://blog.csdn.net/lclfans1983/article/details/113179582 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Docker network driver分类及介绍 Bridge、host、overlay、macvlan(1)
下一篇:node-red 安装和使用实例

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月02日 14时51分34秒