zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [Objective-C语言教程]结构体(17)
    [Objective-C语言教程]字符串(16)
    [Swift]LeetCode827. 最大人工岛 | Making A Large Island
    [Swift]LeetCode826. 安排工作以达到最大收益 | Most Profit Assigning Work
    转 由一次磁盘告警引发的血案:du 和 ls 的区别
    Ant 参考
    转 Problem: AnyConnect was not able to establish a connection to the specified secu
    转 oracle 如何停下oracle 服务
    转: Windows如何打开和使用事件查看器管理计算机
    转: oracle 存储过程 执行动态 实现sql
  • 原文地址:https://www.cnblogs.com/t-ym/p/11837767.html
Copyright © 2011-2022 走看看