zoukankan      html  css  js  c++  java
  • 13.Docker网络配置与调试

    Docker Network配置与调试

    查看虚拟网卡

    yum install -y bridge-utils
    brctl show
    ip link show
    

    管理网络命名空间(docker 底层调用实现)

    #查看是否有ip命令包
    rpm -q iproute
    #命名网络空间
    ip netns add r1
    ip netns add r2
    #查看网络命名空间
    ip netns list
    #在命名空间中执行命令
    ip netns exec r1 -a
    ip netns exec r1 ipconfig
    #创建虚拟网卡对
    ip link add r1 veth1.1 type veth peer name veth1.2
    #查看网卡
    ip link show
    #移动虚拟网卡至r1空间
    ip link set dev veth1.2 netns r1
    #查看本地主机host
    ip link show
    #查看r1空间内网络
    ip netns exec r1 ipconfig -a
    #修改r1内名称
    ip netns exec r1 ip link set dev veth1.2 name eth0
    #查看r1空间内网络
    ip netns exec r1 ipconfig -a
    #配置主机veth1.1网络
    ifconfig veth1.1 10.1.0.1/24 up
    #配置r1空间内网络
    ip netns exec r1 ifconfig eth0 10.1.0.2/24 up
    #查看r1空间内网络
    ip netns exec r1 ipconfig
    #测试(实现主机与命名空间r1互通)
    ping 10.1.0.2
    #移动veth1.1到r2命名空间
    ip link set dev veth1.1 netns r2
    #查看本地网络
    ifconfig
    #查看r2命名空间
    ip netns exec r2 ipconfig -a
    #激活r2
    ip netns exec r2 ifconfig veth1.1 10.1.0.3/24 up
    #查看r2命名空间
    ip netns exec r2 ipconfig
    #测试(实现命名空间r1与命名空间r2互通)
    ip netns exec r2 ping 10.1.0.2
    

    基础命令

    #查看docker详细信息
    docker inspect [OPTIONS] NAME|ID [NAME|ID...]
    docker container inspect web1
    #查看docker网络
    docker network COMMAND
    docker network inspect bridge
    

    未指定网络时、默认设置为bridge模式

    命令(network) 描述
    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 查看docker网络信息描述
    ls List networks 列出网络信息
    prune Remove all unused networks 删除全部无用网络
    rm Remove one or more networks 删除一个或多个网络

    指定docker网络

    命令(run commond) 描述
    --name 指定容器名称
    --network 指定容器网卡模式
    --dns 指定容器内部dns
    --dns-search 指定容器dnssearch
    --add-host 添加容器内部host解析
    -h 指定容器主机名

    实例

    #创建指定busybox
    docker run --name nginxweb1  #指定容器名称
    -it  #交互式
    --network bridge  #指定容器网卡模式
    --dns 114.114.114.114  #指定容器内部dns
    --dns-search gms.io  #指定容器dnssearch
    -h web.gms.com #指定容器主机名
    --add-host www.gms.com:1.1.1.1  #添加容器内部host解析
    --rm busybox:latest  #退出后删除容器
    

    暴露docker

    查看容器暴露端口

    docker port CONTAINER [PRIVATE_PORT[/PROTO]]
    

    暴露端口

    docker run -p
    

    随机映射

    #暴露nginx_docker
    docker run --name nginxweb1  #指定容器名称
    -p 80  #暴露容器80端口、不指定host端口则随机一个host端口
    gms/httpd:v1
    

    指定主机地址映射

    #暴露nginx_docker
    docker run --name nginxweb1  #指定容器名称
    -p 172.20.0.67::80  #暴露172.20.0.67主机8080:容器80端口
    gms/httpd:v1
    

    指定主机端口映射

    #暴露nginx_docker
    docker run --name nginxweb1  #指定容器名称
    -p 8080:80  #暴露主机8080:容器80端口
    gms/httpd:v1
    

    指定主机地址&端口映射

    #暴露nginx_docker
    docker run --name nginxweb1  #指定容器名称
    -p 172.20.0.67:8080:80  #暴露主机8080:容器80端口
    gms/httpd:v1
    

    设置进程隔离

    利用join container,利用网络共享;相当于宿主机上两个进程(但有各自运行空间,但可进行通信)

    设置network共享容器(join container)

    #创建busybox1
    docker run --name b1 -it --rm busybox
    #同一主机上创建busybox2,并加入busybox1网络
    docker run --name b2 --network container:b1 -it --rm busybox
    

    本地服务容器化部署

    利用host模式,将docker服务直接暴露在宿主机上;减少部署成本

    设置host主机模式

    docker run --name b2 --network host -it --rm busybox
    /# ifconfig
    /# echo "hello container" > /tmp/index.html
    /# httpd -h /tmp
    /# netstat -tnl
    

    自定义docker0网桥属性

    修改/etc/docker/daemon.json

    {
    	"bip":"10.0.0.1/16",	#即bridge ip用于指定docker桥网络,其它选项自动计算(除dns)
    	"fixed-cidr": "10.20.0.0/16",  #强制docker运行时使用指定执行驱动器
    	"fixed-cidr-v6": "2001:db8::/64",	#强制docker运行时使用指定ipv6执行驱动器
    	"mtu": 1500, #网络的最大传输单元
    	"default-gateway": "10.20.1.1",	#网关
    	"default-gateway-v6": "2001:db8:abcd::89",	#ipv6网关
    	"dns":["10.20.1.2","10.20.1.3"]
    }
    

    核心选项为bip,即bridge ip用于指定docker桥网络,其它选项自动计算(除dns)

    启用远程docker.sock连接

    修改/etc/docker/daemon.json

    {
    	"hosts": ["tcp://0.0.0.0:2375","unix://var/run/docker.sock"]
    }
    

    连接远程主机查看docker容器

    docker -H 172.20.0.67:2375 images ls
    docker --host 172.20.0.67:2375 images ls
    

    添加新docker网桥&指定驱动模式

    添加一个新bridge网桥;还可添加overlay、macvlan网络

    docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" gmsbr0
    

    查看

    docker network ls
    

    修改名称

    ip link set dev br-4e7fd8d225b7 down
    ip link set dev br-4e7fd8d225b7 name docker1
    ip link set dev docker1 up
    

    busybox1加入docker1网络

    docker run --name gmst1 -it --net docker1 busybox:latest
    

    busybox2添加至docker0

    docker run --name gmst2 -it --net bridge busybox:latest
    

    测试是否互通

    #查看是否开启内核IP地址转换
    cat /proc/sys/net/ipv4/ip_forward
    1
    #被防火墙规则拦截
    iptables -vnL
    

  • 相关阅读:
    Java垃圾回收机制
    Mybatis 通用 Mapper 和 Spring 集成
    MyBatis:SQL语句中的foreach的详细介绍
    PageHelper补充
    Mybatis分页插件PageHelper
    定时任务
    权限框架Apache Shiro 和 Spring Security
    Navicat操作数据库时一直显示加载中
    BigDecimal使用中的一些注意事项
    WPF应用程序嵌入第三方exe
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/14290257.html
Copyright © 2011-2022 走看看