• Docker 底层技术与端口映射


    • 容器底层实现技术

       1.cgroup 实现了资源的限额:CPU,内存,硬盘

        cgroup使用 
        docker run -d -m 100M httpd
      2.namespace 实现了资源隔离

        namespace 实现了容器间资源的隔离
      3.unionfs 联合文件系统

    • Linux 使用了六种 namespace,分别对应六种资源:Mount、UTS、IPC、PID、Network 和 User

      Mount namespace
      Mount namespace 让容器拥有整个文件系统。

      UTS namespace
      简单的说,UTS namespace 让容器有自己的 hostname。 默认情况下,容器的 hostname 是它的短ID,可以通过 -h 或 --hostname 参数设置。

      IPC namespace
      IPC namespace 让容器拥有自己的共享内存和信号量(semaphore)来实现进程间通信,而不会与 host 和其他容器的 IPC 混在一起

      PID namespace
      容器在 host 中以进程的形式运行。容器内进程的 PID 不同于 host 中对应进程的 PID,容器中 PID=1 的进程当然也不是 host 的systemd进程。也就是说:容器拥有自己独立的 PID,这就是 PID namespace 提供的功能。

      Network namespace
      Network namespace 让容器拥有自己独立的网卡、IP、路由等资源。

      ser namespace
      User namespace 让容器能够管理自己的用户,host 不能看到容器中创建的用户。

    • 端口映射

      把容器的端口映射为宿主机的一个随机或者特定端口
      端口映射实现了外部网络访问容器内部服务
      本质是在底层做了ipables地址转发
      1.容器端口映射为宿主机的一个随机端口
      2.容器端口映射为宿主机的一个特定端口
      3.容器端口映射为宿主机的一个特定网卡上的随机端口
      4.容器端口映射为宿主机的一个特定网卡上的特定端口
      

      选项: 端口映射 -p -P  -P 随机映射端口  -p 指定特定端口
      
      注意:启动一个容器时候可以使用多个 -p 映射多个端口
      

      例子1:随机映射 -P #-P是把容器内的所有端口随机映射为宿主机的随机端口
      docker run -d -P httpd

      例子2:特定映射,映射为宿主机的特定端口
      docker run -d -p 81:80 httpd #注意-p后面顺序 宿主机端口:容器端口

      例子3:特定映射,映射为宿主机的特定网卡的随机端口
      docker run -d -p 192.168.64.5::80 httpd

      例子4:特定映射,映射为宿主机的特定网卡的特定端口 -p
      docker run -d -p 192.168.64.5:82:80 httpd

  • 相关阅读:
    mybatis 缓存
    mybatis 动态sql
    新手必读:游戏编程入门指南
    22条常用JavaScript开发小技巧
    Unity即将全面升级 实时3D技术及大场景编辑未来可期!
    10分钟学会Python基础知识
    如何用UE4制作非写实草浪
    最适合设计师的前端学习路径有哪些?
    超全面的C++游戏开发面试问题总结
    如何学习大型项目的源码?虚幻引擎源码学习思路分享
  • 原文地址:https://www.cnblogs.com/t-ym/p/11837767.html
Copyright © 2020-2023  润新知