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

  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/guarderming/p/9455901.html
Copyright © 2011-2022 走看看