1、创建容器常用选项

  -i        交互式

  -t    分配一个伪终端

  -d    运行容器到后台

  -e    设置环境变量

  -p    发布容器端口到主机

  -P    发布容器所有EXPOSE的端口到宿主机随机端口

  -name  指定容器名称

  -h    设置容器主机名

  -ip    指定容器IP,只能用于自定义网络

  -network 连接容器到一个网络

  -mount  将文件系统附加到容器

  -v    绑定挂载一个卷

  -restart  容器退出时重启策略,默认no,可选值:[always | on-failure] 

 

2、容器资源限制

  -m ,-memory    容器可以使用的最大内存量

  -memory-swap    允许交换到磁盘的内存量

  -memory-swappiness=<0-100>  容器使用SWAP分区交换的百分比(0-100,默认-1)

  -oom-kill-disable    禁用OOM Killer

  --cpus        可以使用CPU数量

  -cpuset-cpus     限制容器使用特定的cpu核心,如(0-3,0,1)

  -cpu-shares      CPU共享(相对权重)

3、管理容器常用命令

  ls      列出容器

  inspect     查看一个或多个容器详细信息

  exec     在运行容器中执行命令

  commit    创建一个新镜像来自一个容器

  cp      拷贝文件/文件夹到一个容器

  logs      获取一个容器日志

  port      列出或指定容器端口映射

  top      显示一个容器运行的进程

  stats     显示容器资源使用统计

  stop/start/restart   停止/启动一个或多个容器

  rm      删除一个或多个容器

  prune    移除已停止的容器 

4、容器实现核心技术:Namespace

  在容器化中,一台物理机可以运行多个不同操作系统,需要解决“隔离性”。

  Linux内核从2.4.19版本开始引进namespace概念,其目的是将特定的全局系统资源通过抽象方法使得namespace中的进程看起来拥有自己隔离的资源

  docker就是借助这个机制实现了容器资源隔离

 

  LINUX 的Namespace机制提供了6个不同命名空间:

    IPC:隔离进程间通信

    MOUNT:隔离文件系统挂载点

    NET:隔离网络协议栈

    PID:隔离进程号,进程命名空间是一个父子结构,子空间对父空间可见

    USER:隔离用户

    UTS:隔离主机名和域名

5、容器实现核心技术:CGroups

  docker利用namespace实现容器之间资源隔离,不能对容器资源限制,例如CPU,内存

  如果某个容器属于cpu密集型任务,那么会影响到其他容器使用cpu,导致多个容器相互抢占资源

  需要对多个容器的资源使用进行限制就成了容器化主要问题---------Contorl Groups(简称: CGroups),限制容器资源

  

  CGroups: 所有的任务就是运行在系统中的一个进程,而CGroups以某种标准将一组进程为目标进行资源分配和控制(例如cpu,内存,带宽等,并可以动态配置)

  CGroups主要功能:

    限制进程组使用的资源数量:可以为进程设定资源上线,如内存

    进程组优先级控制:可以为进程分配特定cpu,磁盘IO吞吐量

    记录进程组使用的资源数量:例如使用记录某个进程组使用的cpu时间

    进程组控制:可以将进程组挂起和恢复

  ls /sys/fs/cgroup/ -l 查看cgroups可控制的资源:

    blkio:对块设备的IO进行限制

    cpu:限制CPU时间片的分配,与cpuacct挂在同一目录

    cpuacct:生成cgroup中的任务占用cpu资源的报告,与cpu挂载同一目录

    cpuset:给cgroup中的任务分配独立的cpu(多核处理器)和内存节点

    devices:允许或者拒绝cgroup中的任务访问设备

    freezer:暂停/恢复cgroup中的任务

    hugetlb:限制使用的内存业数量

    memory:对cgroup中任务的可用内存进行限制,并自动生成资源占用报告

    net_cls:使用等级标识符(classid)标记网络数据包,这让Linux流量控制程序(tc)可以识别来自特定从cgroup任务的数据包,并进行网络限制

    net_prio:允许基于cgroup设置网络流量的优先级

    perf_event:允许使用perf工具来监控cgroup

    pids:限制任务数量

 

  容器实际资源限制位置:

    /sys/fs/cgroup/<资源名>/docker/<容器ID>

  

posted on 2021-09-24 16:01  草根920  阅读(212)  评论(0编辑  收藏  举报