• Docker 的网络与数据管理


    Docker 网络实现原理

    Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的 Container-IP 直接通信。

    docker 网络模式

    host

    使用host模式容器使用宿主机的网络直接公开服务,这意味着如果你在容器运行一个web服务,那么它直接绑定主机的网络接口上,而不是通过docker进行任何网络转发

    总结:与宿主机共享网络命名空间/网络协议栈。

    container

    使用这种模式允许容器共享另一个容器的网络命名空间,这意味着两个容器可以有相同的网络接口和IP地址,如果他们共享是同一个网络命名空间的话。

    总结:多个容器之间共享一个networknamespace。

    node

    这是最简单的网络模式,此网络模式表示容器拥有自己的网络命名空间,但不会进行任何网络配置,这实际上给用户完全自主权来自配置及容器的网络。

    总结:自闭空间。

    birdge

    这是docker默认网络模式,每个新创建的容器都将从该网络中分配一个IP地址,此网络模式允许所有docker容器(宿主机)之间相互通信。

    总结:通过veth对连接容器与docker0网桥,网桥分配给容器IP,同时docker0作为“局域网”内容器网关,最后和宿主机网卡通信。

    外加:自定义

    docker允许用户创建自己定义的网络,用户可以定义网络范围,子网,路由等参数,这种类型的网络使得我们的用户可以更好的对容器网络进行控制和隔离。

    docker容器状态

    1. docker 主要有7个状态
    2. 1、created 已创建,还未运行的容器
    3. 2、running 正在运行中的容器
    4. 3、restartin 容器正在启动中
    5. 4、removing 容器正在迁移中
    6. 5、paused 停止状态的容器
    7. 6、exited 已暂停状态的容器
    8. 7、dead 死亡 主要是操作系统出现异常或断电关机等有可能引发的状态

    命令

    1. 随机映射端口 docker run -d --name test1 -P nginx
    2. 指定映射端口 docker run -d --name test2 -p 43000:80 nginx
    3. 查看docker网络列表 docker network ls
    4. 查看容器进程号 docker inspect -f '{{.State.Pid}}' 容器id
    5. 查看容器的进程、网络、文件系统等命名空间编号
    6. ls -l /proc/进程/ns
    7. 根据容器id创建相同网络的容器
    8. docker run -itd --name test2 --net=container:容器id centos:7
    9. 创建自定义网络,先自定义网络,再使用指定IP运行docker
    10. docker network create --subnet=172.18.0.0/16 --opt
    11. "com.docker.network.bridge.name"="docker1" mynetwork
    12. docker run -itd --name test4 --net mynetwork --ip 172.18.0.10 centos:7

    资源控制

    CPU 资源控制

    cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups(Control groups)实现了对资源的配额和度量。

    cgroups有四大功能:

    1、资源限制:可以对任务使用的资源总额进行限制。

    2、优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级。

    3、资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等。

    4、任务控制:cgroup可以对任务执行挂起、恢复等操作。

    设置CPU使用率上限

    查看当前cpu使用率

    cd /sys/fs/cgroup/cpu/docker/容器id/

    cat cpu.cfs_quota_us 表示该cgroups限制占用的时间

    cat cpu.cfs_period_us cpu分配的周期

    设置50%的比例分配CPU使用时间上限

    可以重新创建一个容器并设置限额

    docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash

    或者

    echo 50000 > cpu.cfs_quota_us

    cgroup资源限制

    cgroup 控制的是内核资源--》 间接控制中cpu 的资源--》控制这 中的进程资源--》 docker容器的资源--》 docker容器内应用的资源

    控制的主题包括cpu 、内存、I/O。

    主要介绍的CPO资源的控制,而CPU资源控制的方式主要有:

    1、cpu-shares 权重指的的是多个容器同一个cpu下,被分配到CPu资源的机会占比。

    2、cpu-period周期指的是 CPU在给与当前管理,控制的容器分配资源时,CPU的分配周期 ,默认周期1S,此项配置可以运行时直接指定。

    3、quest-cpus 指定容器,仅能使用指定CPU,比如 0、1、2、3, 假设使用0和2可以用这种方式指定cpu核心。

    Docker 的数据管理

    管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。
    1.数据卷

    数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于 Linux 下对目录进行的 mount 操作。

    2.数据卷容器

    如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

    1. 创建一个容器作为数据卷容器
    2. docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
    3. echo "this is web2" > /data1/abc.txt
    4. echo "THIS IS WEB2" > /data2/ABC.txt
    5. 使用 --volumes-from 来挂载 web2 容器中的数据卷到新的容器
    6. docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
    7. cat /data1/abc.txt
    8. cat /data2/ABC.txt

    端口映射

    在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务。端口映射机制将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

    1. 随机映射端口(从32768开始)
    2. docker run -d --name test2 -p 43000:80 nginx 指定映射端口

    容器互联

    容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。

    1. 创建并运行源容器取名web1
    2. docker run -itd -P --name web1 centos:7 /bin/bash
    3. 创建并运行接收容器取名web2,使用--link选项指定连接容器以实现容器互联
    4. docker run -itd -P --name web2 --link web1:web1 centos:7 /bin/bash --link 容器名:连接的别名
    5. 进web2 容器, ping web1
    6. docker exec -it web2 bash
    7. ping web1
  • 相关阅读:
    AtCoder Beginner Contest 277 F. Sorting a Matrix(拓扑排序+虚点)
    Modelsim无法生成LICENSE的问题
    Thiazole Orange NHS Ester,噻唑橙 NHS酯
    部署jenkins,结合gitlab实现jva自动化部署
    【Spring】spring管理第三方资源;加载Properties文件
    【湖仓一体化】存OR算之争?SPL 我都要
    Spring Boot 实现接口幂等性的 4 种方案
    【项目部署-apache】windows系统下apache部署django+channels
    SpringCloud Alibaba核心组件Nacos【服务多级存储模型&配置集群】第2章
    Spring Boot使用rabbitMq(二)进阶篇
  • 原文地址:https://blog.csdn.net/ffdtj/article/details/133776095