docker网络管理

2020/01/08 10:10
阅读数 0

docker网络管理。
在通常情况下,Docker使用网桥(Bridge)与 NAT 的通信模式

(1) 容器访问外部网络
  iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -o docker0 -j MASQUERADE
2) 外部网络访问容器
        docker run -d -p 80:80 apache         #典型的dnat映射。

会创建如下规则:

iptables -t nat -A  PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j  DNAT --to-destination 172.17.0.2:80
-b, --bridge=””   指定 Docker 使用的网桥设备,默认情况下 Docker 会自动创建和使用 docker0 网桥设备,通过此参数可以使用已经存在的设备

    --bip 指定 Docker0 的 IP 和掩码,使用标准的 CIDR(思科的表达方式) 形式,如 10.10.10.10/24

    --dns 配置容器的 DNS,在启动 Docker 进程是添加,所有容器全部生效
    
    
    --dns 用于指定启动的容器的 DNS
    --net 用于指定容器的网络通讯方式,有以下四个值
        bridge:Docker 默认方式,网桥模式
        none:容器没有网络栈
        container:使用其它容器的网络栈,Docker容器会加入其它容器的 network namespace
        host:表示容器使用 Host 的网络,没有自己独立的网络栈。容器可以完全访问 Host 的网络,不安全

    docker内网访问外网,docker之间互相通信,docker 使用网桥和nat技术,docker启动会创建一个docker0的网桥,docker0网桥就是让容器之间能
    够相互通信,docker0没有自己的内核,容器会采用一种新的技术叫做名字命名空间,名字叫vethx,每一个容器会连接到名字命名空间上,名字命名空间
    又是在我们网桥上创建的,也就是说这些名字命名空间是可以直接通信的,容器又是依附于名字命名空间的,那么容器之间就可以通信了。
    网桥和真实网卡采用NAT方式。
/lib/systemd/system/docker.service             #systemd管理脚本的存放路径
[root@localhost ~]# docker run --name test1 -itd busybox /bin/sh
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b0a455e92ba3        bridge              bridge              local
03cf5e32ed93        host                host                local
2f461342dd7b        none                null                local

创建两个网桥。

[root@localhost ~]# docker network create -d bridge xdlcom 
24477c686a0e0600caa66e60f4f99ad9aff7e73860b4a5ea4b897e80176abe66
[root@localhost ~]# docker network create -d bridge xdlcn 
b0fa77027d9196d28bd2184b02a283ea1c2477b03bea34eeabe7314d0da9aa60
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b0a455e92ba3        bridge              bridge              local
03cf5e32ed93        host                host                local
2f461342dd7b        none                null                local
b0fa77027d91        xdlcn               bridge              local
24477c686a0e        xdlcom              bridge              local
[root@localhost ~]# docker run --name test2 -itd --network=xdlcn busybox /bin/sh
WARNING: IPv4 forwarding is disabled. Networking will not work.
d17b4d3e37405b510f8dd930628f13e1047302b3f8a070dc77023b3804272cff
[root@localhost ~]# docker run --name test3 -itd --network=xdlcom busybox /bin/sh
WARNING: IPv4 forwarding is disabled. Networking will not work.
72b65d74e5d97a2a959cd507cc9b2097ff5f7222e1d58702d556a3d3d6ba2980
[root@localhost ~]# docker inspect test2 |grep xdlcn
            "NetworkMode": "xdlcn",
                "xdlcn": {
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-br0
[root@localhost network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=9da7ddfe-2ec2-4ded-b740-7b9e118a9a60
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.221
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
[root@localhost network-scripts]# cat ifcfg-br0 
DEVICE=br0
TYPE=Bridge
NBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.220
NETMAST=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
DNS2=8.8.8.8
[root@localhost ~]# yum -y install git
[root@localhost ~]# git clone https://github.com/jpetazzo/pipework
[root@localhost ~]# cp -a pipework/pipework /usr/local/bin/
[root@localhost ~]# chmod a+x /usr/local/bin/pipework 
[root@localhost ~]# docker run --name test -itd --network=none busybox /bin/sh
691c26e4ad93ad1cb845517068c9c365cb36a97033f8ac67a8b8c5609fa58201
[root@localhost ~]# docker inspect test |grep "Networks" -A 10      #没有IP地址。
            "Networks": {
                "none": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "2f461342dd7b14742487da9f129557566bdc7fe5b83bbf6b235c7357881cf3b2",
                    "EndpointID": "5aae491bb1bac76ac78bcbf2783ea746207ca8c49d70db6f1465d7705d7fce8d",
                    "Gateway": "",
                    "IPAddress": "",
                    "IPPrefixLen": 0,
                    "IPv6Gateway": "",
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部