写给你的Docker,你要我怎么睡(前续,还有后续)

有了 Docker 的镜像,就可以创建 Docker 容器了。Docker 容器是一种轻量级的虚拟
化方式可以在“秒”级时间内快速启动和停止。另外,Docker 容器对系统资源(如 CPU、
内存、I/O带宽)的要求很低。除运行在容器中的应用外,Docker 容器基本不会消耗其他的
系统资源。
Docker容器的基本概念与操作
Docker的容器类似操作系统的文件夹,其中包含应用和应用运行时所需要的依赖环
境。每一Docker 容器都是从 Docker 镜像创建的。
Docker容器的操作包括: 创建容器、停止容器、进入容器、删除容器、导入和导出容
器、查看容器等。
这里基于 Nginx 的镜像创
建了一个容器,名字为“mycontainer”。但通过“docker ps”命令(或使用第1章中创建
的“myps命令)无法看到创建的容器,因为此时容器还没有启动。
docker create --name mycontainer nginx

 使用docker start 命令可以启动容器

使用dockers run 命令可以直接创建容器并启动容器

docker run -d --name mycontainer2 nginx

 使用docker exec命令可以进入容器内,也可以用容器的ID进入容器

在停止并删除容器时需要注意:当容器正在运行时,是不能直接将其删除的。但可
以使用-f参数进行强制删除
 

可以导出一个已经创建的容器到一个文件中。不管容器处于什么状态,都可以使
用“docker export”命令进行导出
     
myexportcontainer1.tar:导出的容器文件。
0ccc364cdfc7:容器的ID。

 从容器导出生成的文件,可以使用“docker import”命令重新导入容器

docker import myexportcontainer1.tar mynginx_imported

下面给出了正确的做法。命令中的“/bin/bash”表示在启动容器时需要在容器中执行
的指令
dcoker run -d mynginx_imported /bin/bash

Docker的日志
在 Docker 的整个生命周期中,超过 70%的时间我们都是在做 Docker 的运维工作。
查看Docker日志,是运维工作中非常重要的一个环节。
Docker的日志分为两种类型:Docker引擎的日志、应用的日志。下面分别对这两种日
志进行介绍。
 [实战]访问Docker引擎的日志
Docker引擎的日志是指,在Docker守护进程执行过程中产生的日志信息。如果
Docker引擎出现了问题,则需要在不同操作系统的宿主机上使用不同的方式进行查看
journalctl -u docker.service | more

  

利用以下命令可以查看Docker默认的日志引擎

docker  info | grep Loggin

 

 {
 "graph": "/data/docker",
 "registry?mirrors": ["https://nxav2u0f.mirror.aliyuncs.com"],
 "insecure?registries": ["my.harbor.com"],
 "log?driver": "json?file"
}

重新加载Docker的服务,并重启Docker

 查看指定时间后的日志,只显示最后5行,其中7efc26bb5268是容器的ID

docker logs -f -t --since="2023-11-23" --tail=5 7efc26bb5268

查看容器最近30分钟的日志

docker logs --since 30m 7efc26bb5268

 查看某个时间之后的所有日志

 

  

管理容器的资源
在一台Docker宿主机上可以同时启动多个容器。在默认情况下,Docker没有限制其中
运行的容器使用硬件资源。而在实际环境中,容器的负载过高会占用宿主机的大量资源。这
里的资源主要是指宿主机的CPU、内存和I/0带宽这三个方面。
本节将介绍如何使用 Docker 的资源管理给容器的资源使用设置一个闻值,以控制容器
对宿主机CPU、内存和I/O带宽的使用。
 什么是Linux CGroup
由于Docker构建在Linux的基础之上,因此从Linux底层来看,Docker是利用Linux
Control Group(简称Linux CGroup)来实现对资源使用的控制。因此,要掌握 Docker 容器
的资源管理有必要先了解一下什么是Linux CGroup

确定操作系统的发行版本

 根据操作系统的发行版本,可以确定是否启用了Linux CGroup

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

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

将程序代码进行编译

gcc -o hello hello.c

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

./hello

在一个新的命令行窗口中,使用“top”命令监控应用hello的CPU 使用率,可以
看到已经达到了99.7%

进入“/sys/fs/cgroup/cpu/”目录下,创建一个新的子目录hello。该目录用于
设置CPU使用率的闻值

 查看文件cpu.cfsquota us的内容为“-1”,表示没有对其CPU使用率进行限制

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

echo 20000 > cpu.cfs_quota_us
将应用hello的进程ID写入tasks 文件
echo 75603> tasks
进入“cd /sys/fs/cgroup/memory”目录下,创建子目录 hello。
cd /sys/fs/cgroup/memory/
mkdir hello
cd hello/

查看文件memory.limit_in_bytes的内容

more memory.limit_in_bytes
以下语句会将内存的闽值设置为 64KB。如果应用使用的内存超过了该值,则该应
用会被操作系统自动“杀掉”
echo 64K > memory.li,it_in_bytes
生效配置,将应用hello的进程ID 写入tasks 文件
echo 14829 > tasks
使用Linux的“dd”命令从磁盘持续读写数据。
dd if=/dev/sda of=/dev/null

查看设备"/dev/sda"的信息

ls -l /dev/sda
Docker 的容器可以被看成是一个虚拟机,或者一个运行在 Linux之上的进程。Docker
的引擎可以通过参数-c或者--cpu-shares,为每一个容器分配一个“CPU 使用率的相对权
重”。该权重与实际的处理速度无关。每个容器默认有1024个CPU配额的权重
创建一个 Dockerfile 文件
vim Dockerfile 

FROM centos:7
 RUN yum install ‐y epel‐release && yum install ‐y stress
 ENTRYPOINT ["stress"]
执行“docker build”命令将其编译成镜像,镜像的名称是mycentos。
docker build -t mycentos .
使用mycentos镜像创建两个容器。注意:第1个容器占用CPU的权重是默认的
1024;而第2个容器占用CPU的权重是512
docker run -it mycentos --cpu 4
docker run -it -c 512 mycentos --cpu 4

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值