Docker系列之七:Docker网络


title: Docker系列之七:Docker网络
categories: Docker
tags:
- Docker
timezone: Asia/Shanghai
date: 2019-02-25


(一).Docker默认的三种网络模式

Docker 网络从覆盖范围可分为单个 host 上的容器网络和跨多个 host 的网络

Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看:

[root@centos181001 ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1d9172a1d121        bridge              bridge              local
7ff3f15e910e        host                host                local
24e978b44934        none                null                local

1.none 网络

  • 故名思议,none 网络就是什么都没有的网络。
  • 挂在这个网络下的容器除了 lo,没有其他任何网卡。
  • 容器创建时,可以通过 --network=none 指定使用 none 网络。
  • 一些对安全性要求高并且不需要联网的应用可以使用 none 网络。

2.host 网络

  • 连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。
  • 可以通过 --network=host 指定使用 host 网络。
  • 直接使用 Docker host 的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择 host 网络。
  • 当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host 上已经使用的端口就不能再用了。
  • Docker host 的另一个用途是让容器可以直接配置 host 网路。
  • 比如某些跨 host 的网络解决方案,其本身也是以容器方式运行的,这些方案需要对网络进行配置

3.bridge网络

  • Docker 安装时会创建一个 命名为 docker0 的 linux bridge。
  • 如果不指定--network,创建的容器默认都会挂到 docker0 上。
  • 可以通过docker network inspect bridge命令查看bridge 网络的配置信息:

(二).手动创建user-defined 网络

Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。

docker network create --driver bridge new-bridge
docker network create --driver bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 new-bridge

docker network inspect new-bridge

(二).容器之间的连通性

1.两个容器都使用默认的bridge网络,直接可以使用IP地址PING通

## 1.启动两个容器
docker run -it --name centos1 centos
docker run -it --name centos2 centos

## 2.查看连个容器分别分配的IP地址是多少
docker network inspect bridge

## 3.两个容器之间使用IP互PING是可以通的

2.两个容器使用不同的bridge网络,

## 1.创建两个bridge网络
docker network create --driver bridge new-bridge1
docker network create --driver bridge new-bridge2

## 2.运行两个容器,分别指定两个不同的bridge网络
docker run -it --rm --network new-bridge1 --name centos1 centos
docker run -it --rm --network new-bridge2 --name centos2 centos

## 3.分别查看两个容器的IP地址,经过测试两个IP地址之间是不能互通的
centos1 172.19.0.2
centos2 172.20.0.2

## 4.为CentOS1主机添加new-bridge2网卡实现两个主机间互通
## 4.为CentOS2主机添加new-bridge1网卡实现两个主机间互通
docker network connect new-bridge2 centos1
docker network connect new-bridge1 centos2

(三).容器间通信的三种方式

1.IP 通信:

两个容器必须要有属于同一个网络的网卡就可以使用IP互相连接

2.Docker DNS Server:

通过 IP 访问容器虽然满足了通信的需求,但还是不够灵活。因为我们在部署应用之前可能无法确定 IP,部署之后再指定要访问的 IP 会比较麻烦。对于这个问题,可以通过 docker 自带的 DNS 服务解决。

  • 使用 docker DNS 需要满足的3个条件:
  • 1.只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的。
  • 2.两个容器必须在同一个网络中
  • 3.必须通过--name指定容器名字
## 示例:
## 1.创建一个user-defined 网络
docker network create --driver bridge new-bridge

## 2.启动两个容器
docker run -it --rm --network new-bridge --name centos1 centos
docker run -it --rm --network new-bridge --name centos2 centos

## 3.查看两个容器IP地址
docker network inspect new-bridge

    centos1     172.21.0.2
    centos2     172.21.0.3

## 4.测试互通性(以下都是可以PING通的)
## 在centos1容器内执行:
ping centos2
ping 172.21.0.3

## 在centos2容器内执行:
ping centos1
ping 172.21.0.2

3.joined容器

joined 容器是另一种实现容器间通信的方式。

joined 容器非常特别,它可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined 容器之间可以通过 127.0.0.1 直接通信。

示例:

## 1.先创建一个容器
docker run -it --rm --name centos1 centos

## 2.创建第二个容器,并指定 jointed 容器为centos1
docker run -it --rm --name centos2 --network container:centos1 centos

## 3.登录两个容器分别查看网络信息
yum install -y net-tools
ifconfig

发现两个容器的网卡MAC地址和IP地址完全一样,它们共享了相同的网络栈。他们之间可以直接用127.0.0.1访问互相的服务。

joined 容器非常适合以下场景:

  • 不同容器中的程序希望通过 loopback 高效快速地通信,比如 web server 与 app server。
  • 希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序。

附录:docker网络相关命令详解

docker network

[root@centos181001 ~]# docker network --help

Usage:  docker network COMMAND

Manage networks
管理网络

Commands:
  connect     Connect a container to a network
                将一个容器连接到某网络

  create      Create a network
                创建一个网络

  disconnect  Disconnect a container from a network
                断开一个容器与某个网络的连接

  inspect     Display detailed information on one or more networks
                显示一个或多个网络的详细信息

  ls          List networks
                显示网络

  prune       Remove all unused networks
                删除所有未使用的网络

  rm          Remove one or more networks
                删除一个或多个网络

Run 'docker network COMMAND --help' for more information on a command.

docker network connect - 将一个容器连接到某网络

[root@centos181001 ~]# docker network connect --help

Usage:  docker network connect [OPTIONS] NETWORK CONTAINER

Connect a container to a network
将一个容器连接到某网络

Options:
      --alias strings           Add network-scoped alias for the container
      --ip string               IPv4 address (e.g., 172.30.100.104)
      --ip6 string              IPv6 address (e.g., 2001:db8::33)
      --link list               Add link to another container
                                添加链接到另一个容器

      --link-local-ip strings   Add a link-local address for the container
                                为容器添加链接本地地址


示例:将centos1容器连接到手动建立的new-bridge2网络
docker network connect new-bridge2 centos1

docker network create - 创建一个网络

[root@centos181001 ~]# docker network create --help

Usage:  docker network create [OPTIONS] NETWORK

Create a network

Options:
      --attachable           Enable manual container attachment
      --aux-address map      Auxiliary IPv4 or IPv6 addresses used by Network driver (default map[])
      --config-from string   The network from which copying the configuration
                                从目前已经存在的某个网络复制配置

      --config-only          Create a configuration only network
  -d, --driver string        Driver to manage the Network (default "bridge")
                                管理网络的驱动程序(默认“桥”)
                                接受以下3个参数:bridge、macvlan、 overlay

      --gateway strings      IPv4 or IPv6 Gateway for the master subnet
                                主子网的IPv4或IPv6网关,格式:192.168.0.1

      --ingress              Create swarm routing-mesh network
                                创建swarm routing-mesh网络

      --internal             Restrict external access to the network
                                限制对网络的外部访问

      --ip-range strings     Allocate container ip from a sub-range
                                设置子网IP分配区间

      --ipam-driver string   IP Address Management Driver (default "default")
                                IP地址管理驱动程序(默认为“默认”)

      --ipam-opt map         Set IPAM driver specific options (default map[])
      --ipv6                 Enable IPv6 networking
                                允许IPV6网络

      --label list           Set metadata on a network
                                为网络设置标签

  -o, --opt map              Set driver specific options (default map[])
      --scope string         Control the network's scope
                                网络范围,支持:local  swarm

      --subnet strings       Subnet in CIDR format that represents a network segment
                                指定子网,格式:192.168.0.1/24

## 示例:创建一个桥接网络,网络名称为:new-bridge1
docker network create --driver bridge new-bridge1
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容