Docker系列之七:Docker网络

2019-02-25  本文已影响0人  小六的昵称已被使用

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 网络

2.host 网络

3.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 服务解决。

## 示例:
## 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 容器非常适合以下场景:

附录: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
上一篇 下一篇

猜你喜欢

热点阅读