第三章 Docker容器

目录

一、理论讲解

1.Docker容器的基本概念与操作。

二、管理容器的资源

1.什么是Linux CGroup

2.要使用Linux CGroup,则需要先通过执行以下步骤确认Linux的内核是否启用了Linux CGroup。

3.示例1,通过Linux CGroup限制应用的CPU使用率。

4.示例2,通过Linux CGroup限制应用使用系统内存。

5.示例3,通过Linux CGroup限制应用使用I/O带宽。


一、理论讲解

  • 有了Docker的镜像,就可以创建Docker容器了。Docker容器是一种轻量级的虚拟化方式可以在“秒”级时间内快速启动和停止。另外,Docker容器对系统资源(如CPU、内存、I/O带宽)的要求很低。除运行在容器中的应用外,Docker容器基本不会消耗其他的系统资源。

1.Docker容器的基本概念与操作。

  • Docker的容器类似操作系统的文件夹,其中包含应用和应用运行时所需要的依赖环境。每一个Docker容器都是从Docker镜像创建的。
  • Docker容器的操作包括:创建容器、停止容器、进入容器、删除容器、导入和导出容器、查看容器等。

(1)创建容器,创建Nginx容器,改名为“mycontainer”。

[root@localhost ~]# docker create --name mycontainer nginx
[root@localhost ~]# docker ps -a                                查看容器
[root@localhost ~]# docker run -d -p 60:70 nginx                创建并启动容器
  • -d:启动容器的守护进程。
  • -p:将容器内的68端口映射到宿主机的67端口。这样就可以通过宿主机访问容器内部了。

(2)启动和停止容器,c9ded80f1ffb是容器ID。

[root@localhost ~]# docker start c9ded80f1ffb        启动
[root@localhost ~]# docker stop c9ded80f1ffb         停止

(3)进入容器,mycontainer是Nginx改的名字。

[root@localhost ~]# docker exec -it mycontainer /bin/bash
root@c9ded80f1ffb:/# exit                                        退出

(4)删除容器,容器要停止了才能删除。

[root@localhost ~]# docker stop c9ded80f1ffb        停止
[root@localhost ~]# docker rm c9ded80f1ffb          删除
[root@localhost ~]# docker ps -a                    查看

(5)在A机器上存出镜像,把dokken/centos-8镜像存出了,名为centos8。

[root@localhost ~]# docker images
[root@localhost ~]# docker save -o centos8 dokken/centos-8
[root@localhost ~]# ls
  • 将存出的镜像从A机器复制到B机器,需要在B机器上使用该镜像,就可以将该导出文件导入到B机器的镜像库中,这一过程叫作载入镜像。

(6)在B机器上载入镜像。

[root@localhost ~]# docker load --input centos8        第一种方法
[root@localhost ~]# docker load < centos8              第二种方法

二、管理容器的资源

1.什么是Linux CGroup

         由于Docker结构在Linux的基础之上,因此从Linux底层来看,Docker是利用Linux Control Group(简称Linux CGroup)来实现对资源使用的控制。因此,要掌握Docker容器的资源管理有必要先了解一下什么是Linux CGroup。

Linux CGroup主要提供以下功能

  • Resourcelimitation:限制资源的使用,例如,使用CPU及内存的上限。
  • Prioritization:应用的优先级控制,例如,控制任务的调度。

  • Accounting:应用的审计和统计,例如,实现应用的计费。
  • Control:实现对应用的控制,例如,应用的挂起,恢复和执行等。

2.要使用Linux CGroup,则需要先通过执行以下步骤确认Linux的内核是否启用了Linux CGroup。

(1)查看操作系统的发行版本。

[root@localhost ~]# uname -r               查看
3.10.0-957.el7.x86_64

(2)根据操作系统的发行版本,可以确认是否启用了Linux CG roup。CGROUP参数的值是“y”,表示已经启动Linux CGroup。

[root@localhost ~]# cat /boot/config-3.10.0-957.el7.x86_64 | grep CGROUP

CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y

3.示例1,通过Linux CGroup限制应用的CPU使用率。

(1)开发一段C语言程序代码产生一个死循环,并将代码保存为hello.c。

[root@localhost ~]# vim hello.c              添加以下内容

//hello.c
int main(void)
{
int i = 0;
for(;;) i++;
return 0;
}

(2)将程序代码进行编译。

[root@localhost ~]# gcc -o hello hello.c

(3)执行程序代码,这时程序将产生死循环无法退出。

[root@localhost ~]# ./hello

(4)在一个新的命令行窗口中,查看监控应用hello的CPU使用率,可以看到已经达到了99.7%。

[root@localhost ~]# top

(5)创建一个新的子目录,hello目录用于设置CPU使用率的闻值。

[root@localhost ~]# cd /sys/fs/cgroup/cpu    切换到cpu目录上
[root@localhost cpu]# mkdir hello            创建hello子目录
[root@localhost cpu]# ls hello/              查看hello目录

(6)查看文件cpu.cfs_quota_us的内容。

[root@localhost cpu]# cd hello/                    切换到hello目录
[root@localhost hello]# cat cpu.cfs_quota_us 
-1                                                 -1表示没有对其CPU使用率进行限制

(7)执行以下语句将CPU使用率的闻值设置为20%。

[root@localhost hello]# echo 20000 > cpu.cfs_quota_us

(8)将应用hello的进程ID写入tasks文件。

[root@localhost hello]# top                        查看进程ID
[root@localhost hello]# echo 15317 > tasks

(9)再次观察“top”命令的输出信息,发现应用hello的CPU使用率降到了20%。

(10)重新启动一个hello应用,并按照上面的步骤将进程ID写入tasks文件。两个hello应用各自占用10%的CPU使用率。

[root@localhost ~]# ./hello                                重启hello
[root@localhost hello]# echo 20000 > cpu.cfs_quota_us      CPU使用率设置为20%
[root@localhost hello]# top                                查看进程ID
[root@localhost hello]# echo 8151 > tasks                  将hello的进程ID写入tasks
[root@localhost hello]# top                                查看CPU使用率

4.示例2,通过Linux CGroup限制应用使用系统内存。

(1)进入“/sys/fs/cgroup/memory/”目录下,创建子目录hello。

[root@localhost ~]# cd /sys/fs/cgroup/memory/
[root@localhost memory]# mkdir hello
[root@localhost memory]# cd hello

(2)查看文件memory.limit_in_bytes内容,9223372036854771712表示没有对内存进行任何限制

[root@localhost hello]# more memory.limit_in_bytes         查看
9223372036854771712                                        输出的内容

(3)给内存设置为64KB的值,如果应用内存超过了该值,则该应用会被系统自动“杀掉”。

[root@localhost hello]# echo 64k > memory.limit_in_bytes

(4)生效配置,将应用hello的进程ID 写入tasks 文件。

[root@localhost hello]# top                          查看进程ID
[root@localhost hello]# echo 9186 > tasks
[root@localhost hello]# more memory.limit_in_bytes
65536

5.示例3,通过Linux CGroup限制应用使用I/O带宽。

(1)安装“iotop”工具,为了更好地观察结果。

root@localhost ~]# yum -y install iotop

(2)使用Liunx的“dd”命令从磁盘持续读写数据。

[root@localhost ~]# dd if=/dev/sda of=/dev/null
[root@localhost ~]# iotop

 TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
 10666 be/4 root    699.49 M/s  0.00 B/s    0.00%     0.00%   dd if=/de~/dev/null

(3)查看设备“/dev/sda”的信息,设备“/dev/sda”备号是“disk 8, 0”。

[root@localhost ~]# ls -l /dev/sda

brw-rw---- 1 root disk 8, 0 11月 24 09:17 /dev/sda

(4)使用Linux CGroup限制I/O对设备“/dev/sda”的读取速率。

[root@localhost ~]# mkdir /sys/fs/cgroup/blkio/io                            创建目录
[root@localhost ~]# cd /sys/fs/cgroup/blkio/io/                              切换
[root@localhost io]# echo '8:0 1048576' > blkio.throttle.read_bps_device     限制

(5)将“dd”命令的进程ID写入tasks文件。

[root@localhost io]# iotop                     查看ID进程
[root@localhost io]# echo 10666 > tasks        写入tasks文件

(6)查看结果。

[root@localhost io]# iotop                     查看ID进程

TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
10666 be/4 root    3.35. M/s  0.00 B/s    0.00%     0.00%   dd if=/de~/dev/null
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值