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

原文地址:https://www.cnblogs.com/guarderming/p/9455901.html