docker

【docker 笔记】docker 网络相关整理

2019-05-20  本文已影响3人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 概述

端口映射

[root@localhost ]# docker run --name sdcvm-postgres -e POSTGRES_PASSWORD=engine -e POSTGRES_USER=engine -e POSTGRES_DB=engine -p 5433:5432 -v `pwd`/pgsql:/var/lib/pgsql -d sdcvm-postgres:lates
[root@localhost ~]# docker port 93517129873b
5432/tcp -> 0.0.0.0:5433
[root@localhost ]# docker run --name sdcvm-postgres 5433:5432 -d sdcvm-postgres:lates
[root@localhost ]# docker run --name sdcvm-postgres 127.0.0.1:5433:5432 -d sdcvm-postgres:lates
[root@localhost ]# docker run --name sdcvm-postgres 127.0.0.1::5432 -d sdcvm-postgres:lates
[root@localhost ]# docker run --name sdcvm-postgres 5433:5432/tcp -d sdcvm-postgres:lates

端口暴露

"Config": {
           .....
            "ExposedPorts": {
                "5432/tcp": {}
            },
            .....
},
"NetworkSettings": {
            ......
            "Ports": {
                "5432/tcp": null
            },
           ......
}

容器互联

2. 网络模型

2.1 Libnetwork

2.2 CNM(Container Network Model)

CNM 模型

CNM 的组成

CNM 组成

CNM 的实现流程


3. 网络模式

参数 说明
--net=bridge bridge 模式使用指定,默认设置。
--net=host host 模式使用指定。
--net=container:NAME_or_ID container 模式使用指定。
--net=none none 模式使用指定。
--net=overlay overlay 模式使用指定。

3.1 bridge(网桥)模式

[root@localhost ~]# ip addr
.....
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:92:df:8d:3e brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:92ff:fedf:8d3e/64 scope link 
       valid_lft forever preferred_lft forever
149: vethe46a37b@if148: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether ba:09:a9:6e:73:d7 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::b809:a9ff:fe6e:73d7/64 scope link 
       valid_lft forever preferred_lft forever
[root@localhost ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.024292df8d3e   no      vethe46a37b

veth

容器间的通讯

容器间的通信

容器与外部网络通讯

容器与外部网络通讯

宿主机与容器通讯

宿主机与容器通讯

外部访问容器

3.2 host(主机)模式

3.3 container(容器)模式

3.4 none 模式

3.5 overlay 模式

3.6 macvlan 模式

4. 网络配置

[root@localhost ~]# docker daemon -help
Command "daemon" is deprecated, and will be removed in Docker 1.16. Please run `dockerd` directly.
Flag shorthand -h has been deprecated, please use --help
Status: unknown shorthand flag: 'e' in -elp
See 'dockerd --help'.

Usage:  dockerd COMMAND

A self-sufficient runtime for containers.

      --bip string                            Specify network bridge IP
  -b, --bridge string                         Attach containers to a network bridge
      --default-gateway ip                    Container default gateway IPv4 address
      --default-gateway-v6 ip                 Container default gateway IPv6 address
      --dns list                              DNS server to use (default [])
      --dns-opt list                          DNS options to use (default [])
      --dns-search list                       DNS search domains to use (default [])
  -H, --host list                             Daemon socket(s) to connect to (default [])
      --icc                                   Enable inter-container communication (default true)
      --ip ip                                 Default IP when binding container ports (default 0.0.0.0)
      --ip-forward                            Enable net.ipv4.ip_forward (default true)
      --ip-masq                               Enable IP masquerading (default true)
      --iptables                              Enable addition of iptables rules (default true)
      --ipv6                                  Enable IPv6 networking
      --userland-proxy                        Use userland proxy for loopback traffic (default true)
      --userland-proxy-path string            Path to the userland proxy binary
......

5. 网络的基本操作

操作 说明
docker network connect 将容器连接到网络。
docker network create 创建一个网络。
docker network disconnect 断开容器与网络的连接。
docker network inspect 显示详细信息。
docker networs ls 显示网络列表。
docker networs prune 删除所有未使用的网络。
docker networs rm 删除一个或多个网络。

5.1 连接网络

参数 说明
--alias 为容器添加网络范围别名
--ip IPv4 网络地址。
--ip6 IPv6 网络地址。
--link 添加一个链接到其他容器。
--link-local-ip 为容器添加本地地址链接。
[root@localhost ]# docker network connect multi-host-network container1
[root@localhost ]# docker network connect --ip 172.20.128.2 multi-host-network container2
[root@localhost ]# docker network connect --link container1:c1 multi-host-network container2

5.2 创建网络

操作 说明
--attachable 启动手动附加。
--aux-address 使用网络驱动程序辅助 IPv4 和 IPv6。
--config-from 根据配置文件配置网络。
-config-only 创建一个只配置网络的配置文件。
--driver , -d 默认 bridge,管理网络的驱动程序。
--gateway 设置网关。
--ingress 创建 swarm routing-mesh 网络。
--internal 限制网络的外部访问
--ip-range 从定义的范围中分配 IP 地址。
--ipam-driver IP 地址管理的驱动程序。
--ipam-opt IP 地址管理驱动程序选项参数。
--ipv6 启用 IPv6 网络。
--label 设置元数据。
--opt , -o 设置驱动程序特定选项。
--scope 控制网络范围。
--subnet 网段,CIDR 格式。
[root@localhost ]# docker network create -d bridge my-bridge-network
[root@localhost ]# docker network create --driver=bridge --subnet=192.168.0.0/16 br0
[root@localhost ]# docker network create \
  --driver=bridge \
  --subnet=172.28.0.0/16 \
  --ip-range=172.28.5.0/24 \
  --gateway=172.28.5.254 \
  br0
[root@localhost ]# docker network create -d overlay \
  --subnet=192.168.1.0/25 \
  --subnet=192.170.2.0/25 \
  --gateway=192.168.1.100 \
  --gateway=192.170.2.100 \
  --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \
  --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \
  my-multihost-network
docker0 选项 docker daemon 选项 说明
com.docker.network.bridge.name - 创建 Linux网桥时要使用的网桥名称。
com.docker.network.bridge.enable_ip_masquerade --ip-masq 启用 IP 伪装。
com.docker.network.bridge.enable_icc --icc 启用或禁用容器间连接。
com.docker.network.bridge.host_binding_ipv4 --ip 绑定容器端口时的默认 IP。
com.docker.network.driver.mtu --mtu 设置容器网络的 MTU
选项 docker daemon 选项 说明
--gateway - 网关。
--ip-range --fixed-cidr IP 获取范围。
--internal - 限制对网络的外部访问。
--ipv6 --ipv6 开启 IPv6 网络。
--subnet --bip 子网网段。
[root@localhost ]# docker network create \
    -o "com.docker.network.bridge.host_binding_ipv4"="172.19.0.1" \
    simple-network

5.3 断开网络

操作 说明
--force , -f 强制断开容器与网络之间的连接。
[root@localhost ]# docker network disconnect multi-host-network container1

5.4 显示详细信息

操作 说明
--format , -f 使用给定的 GO 模板格式化输出。
--verbose , -v 详细输出。

5.5 显示网络列表

操作 说明
--filter , -f 提供筛选器值(例如 driver=bridge)
--format 使用给定的 GO 模板格式化输出。
--no-trunc 不截断输出。
--quiet , -q 只输出网络 ID。
[root@localhost ]# docker network ls --no-trunc
NETWORK ID                                                         NAME                DRIVER           SCOPE
18a2866682b85619a026c81b98a5e375bd33e1b0936a26cc497c283d27bae9b3   none                null             local
c288470c46f6c8949c5f7e5099b5b7947b07eabe8d9a27d79a9cbf111adcbf47   host                host             local
7b369448dccbf865d397c8d2be0cda7cf7edc6b0945f77d2529912ae917a0185   bridge              bridge           local
95e74588f40db048e86320c6526440c504650a1ff3e9f7d60a497c4d2163e5bd   foo                 bridge           local
63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161   dev                 bridge           local
[root@localhost ]# sudo docker network ls
NETWORK ID          NAME                DRIVER          SCOPE
7fca4eb8c647        bridge              bridge          local
9f904ee27bf5        none                null            local
cf03ee007fb4        host                host            local
78b03ee04fc4        multi-host          overlay         swarm

Filtering

[root@localhost ]# docker network ls --filter driver=bridge
NETWORK ID          NAME                DRIVER            SCOPE
db9db329f835        test1               bridge            local
f6e212da9dfd        test2               bridge            local

Formatting

占位符 描述
.ID 网络 ID。
.Name 网络名称。
.Driver 网络驱动。
.Scope 范围(local、global)
.IPv6 是否在网络上启用了 IPv6。
.Internal 网络是否为内部网络。
.Labels 分配给网络的所有标签。
.Label 此网络的特定标签的值。(例如:{{.Label "project.version"}}
.CreatedAt 创建网络的时间。
[root@localhost ]# docker network ls --format "{{.ID}}: {{.Driver}}"
afaaab448eb2: bridge
d1584f8dc718: host
391df270dc66: null

5.6 删除未使用网络

操作 说明
--filter 提供筛选器值(例如 until=)
--force , -f 不提示确认。
[root@localhost ]# docker network prune

WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Networks:
n1
n2

5.7 删除网络

[root@localhost ]# docker network rm 3695c422697f my-network
上一篇下一篇

猜你喜欢

热点阅读