目录

1 容器常用指令

1.1 查看容器

1.2 创建容器

1.3 进入容器

1.4 容器的启动与停止

1.5 删除容器

1.6 容器与宿主机之间的文件拷贝

2 容器资源限制

2.1 内存限制

2.2 CPU限制

2.3 容器扩容

3 Namespace

4 CGroups

5 Docker核心组件之间关系


1 容器常用指令

1.1 查看容器

  • 查看正在运行的容器:docker ps
  • 查看所有容器(无论是否启动):docker ps -a
  • 查看所有容器且只显示容器id:docker ps -aq
  • 查看目标容器信息:docker inspect 容器名称(容器ID)
  • 查看当前容器的资源消耗情况:docker stats 容器名(容器ID)
  • 查看容器中的进程:docker top 容器名(容器ID)
  • 容器的启动,可理解为虚拟机的开机

1.2 创建容器

  • 在后台创建名为centos1的容器 ,不启动容器:docker run -d --name=centos1 centos:7
  • 在后台创建名为centos2的容器 ,启动容器:   docker run -id --name=centos2 centos:7
  • 创建容器、启动容器并进入命令行,退出命令行则容器关闭:docker run -it --name=centos3 centos:7
  • 注:指令最后面的“centos:7”表示依据镜像仓库中的 centos:7 镜像来创建容器,此外,创建容器时如果不命名,会生成随机的名字

创建容器时常用指令参数如下:

-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-ti:创建交互式容器,创建容器后自动进入容器,退出容器后容器自动关闭(可理解为关机)
-di:创建守护式容器,创建一个容器在后台运行,需要使用docker exec 进入容器,退出后容器不会关闭。
进入容器之后,初始化执行的命令:/bin/bash

1.3 进入容器

  • docker exec -it 容器名称 (或者容器ID) /bin/bash

1.4 容器的启动与停止

  • docker start 容器名称(容器ID)
  • docker stop 容器名称(容器ID)

1.5 删除容器

  • 删除某个容器:docker rm 容器名称(容器ID)
  • 删除未在运行的容器(会有提示):docker container prune 
  • 强行删除所有容器:docker rm -f $(docker ps -aq)

1.6 容器与宿主机之间的文件拷贝

  • 容器到宿主机:docker cp 容器名称:容器目录 需要拷贝的文件或目录(把文件从c1容器的“/”路径下的“a.txt文件”拷贝到宿主机的中的的“/root/”路径下)
docker cp c1:/a.txt  /root/
  • 宿主机到容器:docker cp 需要拷贝的文件或目录 容器名称:容器目录(把文件"b.txt" 从宿主机的“/root/”路径下拷贝到容器c1的“/root/” 路径下)
docker cp /root/b.txt c1:/root/

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共享(相对权重)

 创建完容器后,可输入指令:docker stats 容器id 来查看CPU和内存的情况。

容器管理工具有哪些_centos

2.1 内存限制

  • 允许容器最多使用512M内存:docker run -id -m="512m" --name=centos5 centos:7
  • 允许容器最多使用500M内存和100M的Swap(–memory-swap参数指的是:内存和swap分区大小的总和,现在内存500m,剩下允许交换给磁盘的内存就剩下100m了),并禁用OOM Killer(即便内存溢出也不会停止运行该容器)感觉这个功能一般不会用:

docker run -id --name centos6 --memory="500m" --memory-swap="600m" --oom-kill-disable centos:7

  • 如果不限制容器的内存使用,则默认该容器可以使用宿主机上的所有资源

2.2 CPU限制

  • 允许容器最多使用1.5个CPU:docker run -d --name nginx04 --cpus="1.5" nginx
  • 允许容器最多使用0.5个CPU:docker run -d --name nginx05 --cpus=".5" nginx

容器管理工具有哪些_进程组_02

2.3 容器扩容

  • 如果容器已经创建,可修改部分容器配置(输入指令:docker update --help,里面有的才能修改)
  • 更新容器的内存限制为256m:docker update -m="256" 容器id

3 Namespace

        Linux内核从2.4.19版本开始引入了namespace概念,其目的是将特定的全局系统资源通过抽象方法使得namespace中的进程看起来拥有自己隔离的资源。Docker就是借助这个机制实现了容器资源隔离。

查看当前进程所属的 namespace 信息指令:ll /proc/$$/ns

Linux的Namespace机制提供了6种不同命名空间:

  • IPC:隔离进程间通信
  • MOUNT:隔离文件系统挂载点
  • NET:隔离网络协议栈
  • PID:隔离进程号,进程命名空间是一个父子结构,子空间对父空间可见
  • USER:隔离用户
  • UTS:隔离主机名和域名

4 CGroups

Docker利用namespace实现了容器之间资源隔离,但是namespace不能对容器资源进行限制,比如CPU、内存。如果某一个容器属于CPU密集型任务,那么会影响其他容器使用CPU,导致多个容器相互影响并且抢占资源。对多个容器的资源使用进行限制,可引入Control Groups(简称CGroups)。 

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

  • 限制进程组使用的资源数量(Resourcelimitation):为进程组设定资源使用上限,例如内存
  • 进程组优先级控制(Prioritization):可以为进程组分配特定CPU、磁盘IO吞吐量
  • 记录进程组使用的资源数量(Accounting):例如使用记录某个进程组使用的CPU时间
  • 进程组控制(Control):可以将进程组挂起和恢复

相关指令如下:

  • 查看cgroups可控制的资源指令: ls /sys/fs/cgroup/ -l
  • 容器实际资源限制位置(要保证容器在运行状态):/sys/fs/cgroup/<资源名>/docker/<容器ID>(docker update 指令实际上就是在修改其中文件的参数进行配置)

资源目录

描述

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

限制任务的数量

5 Docker核心组件之间关系

  • DockerDaemon:Docker守护进程,负责与DockerClinet交互,并管理镜像、容器。
  • Containerd:是一个简单的守护进程,向上给DockerDaemon提供接口,向下通过containerd-shim结合runC管理容器。
  • runC:一个命令行工具,它根据OCI标准来创建和运行容器。

容器管理工具有哪些_centos_03