zoukankan      html  css  js  c++  java
  • docker网络

    Cpu、mem、disk:·

    1、 内存限制

     物理内存:

            Swap:在硬盘上(存放的是内存格式)

            -m –memory 设置内存的限额

            --memeoty-swap 限制内存+swap额度 如果设置-1与物理内存等大

             docker run -it -m 200M --memory-swap=300m progrium/stress --vm 1 --vm-bytes 280M

    2、 cpu:默认平等使用cpu

                 -c –-cpu-shares 权重值 默认值:1024  | 命令

    理解为:那个容器的优先级更高

    3、 disk限制:

             Block IO :带宽优先级

                        --blkio-weight xx(默认值500)

    1、bps:每秒钟的读写数据量

                          --device-read-bps:读

                          --device-write-bps:写

                      2、iosp:每秒钟的读写次数

                          --device-read-iops : 读

                          --device-write-iops:写

    关于docker的网络构成:

    独立容器间的网络: none  : 只有local lookpback 用于生成东西然后cp到其他地方

    Host  : 物理机完全一样 (把物理机的协议栈放置到容器里)优点:可以实现与物理机高速连接,且不占用带宽

    容器间的网络:bridge:  

    跨主机的容器间的网络:macvlan

     Overlay 原生网络

    第三方的网络: flannel weave caclic

    容器间的通讯

    容器如何与外部通讯

    DOCKER四种网络!!

    1. host模式 :docker run 使用 --net=host指定   docker使用的网络实际上和宿主机一样

        2. container模式: 使用 --net=container:container_id/container_name

    多个容器使用共同的网络,看到的ip是一样的。

     3. none 模式 : 使用 --net=none指定

    这种模式下,不会配置任何网络。

    4. bridge模式 使用 --net=bridge指定

    默认模式,不会指定

     此模式会为每个容器分配一个独立的network namespace

    Yum provides ip   //查看ip属于那个安装包

    Brctl show

    Docker network ls  //查看有多少网卡

    Docker network  inspect /my_net  //查看调节卡

    Docker run -itd –-network my——net busybox

    IP a

    docker network create --driver bridge my_net  ——创建网卡

    brctl  show       ——查看网卡分别连接谁

    docker network ls   ——查看docker里有多少网卡

    docker network inspect /my_net  ——查看调节卡

    docker run -itd --network my_net busybox   ——开启一个容器将网络连接到my_net网卡上

    ip a

    docker  network  create  --driver bridge  --subnet  172.22.16.0/24  --gateway 172.22.16.1  my_net2     ——自建网卡和网段

    docker  network  inspect my_net2   //查看网卡的配置信息

    docker run -itd --network my_net2 --ip 172.22.16.8 centos   //手动配置静态ip

    docker network remove gao_net  ——删除gao_net 这块网卡

    docker network

     docker network connect  容器id   //给容器增加一块网卡 可以让不同网卡间的容器通信

    docker run -itd --name web1 httpd    //(创建web1容器)

    docker run -it --network container:web1 busybox  //(创建joined容器)container:后加容器

    joined容器:容器间共享协议栈

           监控某一服务/容器流量(需要写脚本)

    host:物理机和容器共享协议栈

    自定义网络有dns(ping容器名)其他没有

    1、容器访问外部世界 使用nat

    tcpdump -i ens33 -n icmp    ——抓包抓取ens33网卡的ping包

    tcpdump -i docker0 -n icmp  ——抓取docker0网卡的ping包

    外部世界访问容器:端口映射

    出数据通过nat

    回数据通过docker-proxy

    2、外部世界访问容器:端口映射

    Docker可以将容器对外提供的端口映射到主机的某个端口,访问主机映射的端口访问的直接是容器

    docker run -d -p 80 httpd //容器中的httpd的80端口映射到主机80端口

    docker run -d -p 8080:80 httpd    //将主机的8080映射到容器中

    ps -ef | grep docker-proxy 查看映射的端口号

    docker热数据处理/两类存储资源:

    1、 镜像层-冷和容器层

    镜像分层底层协议 docker strorage driver:(使用厂商)

                                          Redhat7:overlay

                                          SUSE:Btrfs

                                          Ubuntu:AUFS

    2、 Data Volume(翻译:数据量)-热  //datahosts文件和目录。能够通过mount形式挂载到容器里去

    1. 是目录或者是文件。不能是没有格式化的磁盘(块设备不行)
    2. 容器可以读写volume中的数据
    3. Volume的数据可以永久的保存,即使使用它的容器销毁了。

    大小取决于容器的剩余空间(目前为止没有办法限制磁盘限额也不行,docker以root用户运行,磁盘无效)。

          Docker voulune分成两种类型:

    1. bind mount(主机已存在的文件挂载到容器中):

    例句: docker run -d -p 80:80 -v ~/htdocs:/usr/local/apache2/htdocs:ro httpd    //ro代表只读(也可以不加权限),也可以以文件形式挂载

    1. docker managed mount :无需指定mount源,指明mount point就行

    例句:docker run -d -p 80:80 -v /usr/local/apache2/htdocs httpd

     通过:docker inspect +容器id //查看挂载详情(mounts某块 source源地址,destination目的地址)  用ls查看下原地址的东西就知道挂的啥了

    如何共享数据(共享是volune的特性):

    1. 容器与host共享数据:

    Data volume

    Docker cp

    1. 容器之间共享数据
      1. 用bind mount 挂在方式将同一个目录或文件挂载到多个容器
      2. 卷容器volume container(专门为容器提供卷可以提供docker voulune两种挂在方式)(作用只是提供数据,本身不处于运行状态,不讨让他处于运行状态)

    例句:docker create  –name vc_data (要挂载的目录或文件)-v (挂载到容器的路径) busybox  //创建卷容器

    让容器使用卷容器:docker run –name web20 -d -p 80 –volumes-from vcdata httpd

    用 docker inspect vc_data查看

    创建卷容器的dockerfile

    将热数据放到容器中与其他容器共享 data packed volume container

    创建dockerfile

    FROM busybox:latest

    ADD htdocs /usr/local/apache/htdocs

    VOLUME /usr/local/apache2/htdocs

    Docker build   //生成

    创建卷容器

    挂载到容器

    Libbetwork && CNM

    1、 Sandbox

    容器协议栈,interface 路由表 DNS……..namespace

    2、 Endpoint

    将sandbox介入到network上。典型案例:veth pair  一个endpoint之能属于一个network,也只能属于一个sandbox

    3、 network

    包含一组endpoint,相同的network中的endpoint可以通讯

    Overlay driver

    基于vxlan的网络

    Vxlan可将二层数据封装成udp传输

    docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap //创建consul创建完以后可以直接网页访问

    另一台虚拟机

    Vim /usr/lib/system/system

    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --cluster-store=consul://192.168.43.165:8500 --cluster-advertise=ens32:2376     //在配置文件中指定consoul地址  ,改好以后去网页找是否有这个虚拟机的ip地址

    docker network create -d overlay ov_net1  //创建完以后所有在consoul上的都会同步

    macvlan:直接用bridge,需要手动配置ip

    LINUX创建子接口     

    ip link set ens32 promisc on 打开混杂模式   两台机器都开启  不开启不成功

    ip  link show ens32      //查看是否开启混杂模式

    docker network create -d macvlan --subnet 172.16.86.0/24 --gateway 172.16.86.1 -o  parent=ens32 mac_net1   //创建macvlan

    modinfo 8021q  //查看是否支持8021q协议

    modprobe 8021q //导入8021q模块

    cd /etc/sysconfig/network-scripts/

    修改ens32中的    //这步骤可以省略

    BOOTPROTO=manual   manual:引导模式,手动的

    Cp -p ifcfg-ens32 ifcfg-ens32.10

    BOOTPROTO=none

    NAME=ens32.10

    DEVICE=ens32.10

    IPADDR=192.168.23.10

    PREFIX=24

    NETWORK=192.168.23.0

    ONBOOT=yes

    VLAN=yes

    Cp ifcfg-ens32.10 ifcfg-ens32.20

    BOOTPROTO=none

    NAME=ens32.10

    DEVICE=ens32.10

    IPADDR=192.168.22.10

    PREFIX=24

    NETWORK=192.168.22.0

    ONBOOT=yes

    VLAN=yes

    Systemctl restart network   //另一台虚拟机跟以上操作一样   ifup ifcfg-ens33.10

    ifup ifcfg-ens33.20   或者这条命令启用网卡

    docker network  create -d macvlan --subnet=172.16.10.0/24 --gateway=172.16.10.1 -o parent=ens33.10 mac_net10         ——创建macvlan网卡

     docker network create -d macvlan --subnet=172.16.20.0/24 --gateway=172.16.20.1 -o parent=ens33.20 mac_net20

    docker run -itd --name  bbox10 --ip=172.16.10.10 --network mac_net10 busybox   ——创建容器并且使用macvlan网卡

    docker run -itd --name  bbox20 --ip=172.16.20.10 --network mac_net20 busybox

          ifconfig ens33.10 172.16.10.1 netmask 255.255.255.0

          ifconfig ens33.20 172.16.20.1 netmask 255.255.255.0

             //ping不同可能是没有指路,防火墙写一下规则就好

          iptables -t nat -A POSTROUTING -o ens33.20 -j MASQUERADE

         iptables -A FORWARD -i ens33.10 -o ens33.20 -m state --state RELATE,ESTABLISHED -j ACCEPT

         iptables -A FORWARD -i ens33.20 -o ens33.10 -m state --state RELATE,ESTABLISHED -j ACCEPT

        iptables -A FORWARD -i ens33.10 -o ens33.20 -j ACCEPT

        iptables -A FORWARD -i ens33.20 -o ens33.10 -j ACCEPT

        docker exec -it bbox10 ping -c 2  172.16.20.10

  • 相关阅读:
    google的开源项目总结
    Google Breakpad 完全解析(二) —— Windows前台实现篇
    Google Breakpad 完全解析(一) —— Windows入门篇
    PVS-Studio静态通用分析规则
    C,C++开源项目中的100个Bugs
    一日一点RakNet(3)--介绍
    C++开源跨平台类库集
    如何实现数组的随机排序?
    JavaScript原型,原型链 ? 有什么特点?
    js的基本数据类型
  • 原文地址:https://www.cnblogs.com/guarderming/p/9455901.html
Copyright © 2011-2022 走看看