Docker学习笔记

云计算 waitig 670℃ 百度已收录 0评论

1. Docker 仓库认证机制以及镜像上传拉取

首先需要创建认证文件:

[root@lockey6 ~]# mkdir /opt/auth
[root@lockey6 ~]# docker run --entrypoint htpasswd registry:latest -Bbn root lockey23 > /opt/auth/htpasswd
[root@lockey6 ~]# cat /opt/auth/htpasswd 
root:$2y$05$Q9UC6TgtNnfeD5IambUW4eckWSL7E.Zq9SJ.MKkUSDSnA5y2/IUn2

然后以认证方式运行registry容器

[root@lockey6 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry -v /opt/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry:latest
895934bca5b54843fb0f6b6848fd6b2a4832d7b271143867acf4aa5b3fe61346

未进行认证不能执行操作,认证后执行成功

这里写图片描述

上传本地镜像并且删除本地镜像,然后从仓库中pull下来
这里写图片描述

2. Docker Daemon

Docker Daemon 的架构示意图:
这里写图片描述

Docker 从 0.9 版本开始使用 libcontainer 替代 lxc,libcontainer 和 Linux 系统的交互图
这里写图片描述

目前版本的 Libcontainer,功能实现上涵盖了包括 namespaces 使用、cgroups 管理、Rootfs的配置启动、默认的 Linux capability 权限集、以及进程运行的环境变量配置。内核版本最低要求为 2.6 ,最好是 3.8 ,这与内核对 namespace 的支持有关。
目前除 user namespace 不完全支持以外,其他五个 namespace 都是默认开启的,通过 clone系统调用进行创建

3 . Docker 与 cgroups

Docker 使用 cgroups进行资源管理与限制,包括设备、内存、CPU、输入输出等。目前除网络外所有内核支持的子系统都被加入到 Libcontainer 的管理中,所以 Libcontainer使用 cgroups 原生支持的统计信息作为资源管理的监控展示。
容器中运行的第一个进程 init ,必须在初始化开始前放置到指定的 cgroup 目录中,这样就能放置初始化完成后运行的其他用户指令逃逸出 cgroups 的控制。父子进程的同步则通过管道来完成,在随后的运行时初始化中会进行展开描述。

cgroups 实现了对资源的配额和度量。 cgroups 的使用非常简单,提供类似文件的接口,在 /cgroup 目录下新建一个文件夹即可新建一个 group,在此文件夹中新建 task 文件,并将 pid 写入该文件,即可实现对该进程的资源控制。具体的资源配置选项可以在该文件夹中 新 建 子 subsystem , { 子 系 统 前 缀 }.{ 资 源 项 } 是 典 型 的 配 置 方 法 , 如memory.usageinbytes 就定义了该 group 在 subsystem memory 中的一个内存限制选项。
另外,cgroups 中的 subsystem 可以随意组合,一个 subsystem 可以在不同的 group 中,也可以一个 group 包含多个 subsystem - 也就是说一个 subsystem。memory内存相关的限制cpu在 cgroup 中,并不能像硬件虚拟化方案一样能够定义 CPU 能力,但是能够定义 CPU 轮转的优先级,因此具有较高 CPU 优先级的进程会更可能得到 CPU 运算。 通过将参数写入 cpu.shares ,即可定义改 cgroup 的 CPU 优先级 - 这里是一个相对权重,而非绝对值blkio block IO 相关的统计和限制,byte/operation 统计和限制 (IOPS 等),读写速度限制等,但是这里主要统计的都是同步 IO devices设备权限限制

以下为cgroup实现的对cpu/mem/io的限制演示
这里写图片描述

内存限制

[root@lockey6 ~]# vim /etc/cgconfig.conf

group x1{
        memory{
                memory.limit_in_bytes = 268435456;
                memory.memsw.limit_in_bytes = 268435456;
        }
}

[root@lockey6 ~]# cd /cgroup/memory/x1/
[root@rhel65-lockey1 x1]# ls

cgroup.event_control  memory.limit_in_bytes        memory.memsw.max_usage_in_bytes  memory.soft_limit_in_bytes  memory.use_hierarchy
cgroup.procs          memory.max_usage_in_bytes    memory.memsw.usage_in_bytes      memory.stat                 notify_on_release
memory.failcnt        memory.memsw.failcnt         memory.move_charge_at_immigrate  memory.swappiness           tasks
memory.force_empty    memory.memsw.limit_in_bytes  memory.oom_control               memory.usage_in_bytes

[root@rhel65-lockey1 x1]# cat memory.limit_in_bytes

268435456

[root@rhel65-lockey1 x1]# cat memory.memsw.limit_in_bytes

268435456

[root@rhel65-lockey1 ~]# cgexec -g memory:x1 dd if=/dev/zero of=/dev/shm/bigfile bs=1M count=300
Killed
这里写图片描述

cpu分配

[root@lockey6 ~]# vim /etc/cgconfig.conf

group x2 {
        cpu {
                cpu.shares = 100;
        }
}

[root@lockey6 ~]# cd /cgroup/cpu/x2/
[root@lockey6 x2]# cat cpu.shares
100

依次执行以下另个命令使用top查看cpu状态:

dd if=/dev/zero of=/dev/null &

这里写图片描述

cgexec -g cpu:x2 dd if=/dev/zero of=/dev/null &

这里写图片描述
如何禁用部分cpu

[root@rhel65-lockey1 ~]# cd /sys/devices/system/
查看各个cpu内的online文件内容

echo 0 > online#0表示禁用,1表示启用

限制读写速度

ll -d /dev/vda
[root@lockey6 ~]# ll -d /dev/vda
brw-rw—- 1 root disk 252, 0 Oct 28 08:53 /dev/vda

vim /etc/cgconfig.conf

group x3 {
    blkio {
        blkio.throttle.read_bps_device = "252:0 1000000";
    }
}

分别执行以下两条命令使用iotop命令查看磁盘的读写速度

dd if=/dev/vda of=/dev/null
cgexec -g blkio:x3 if=/dev/vda of=/dev/nul

本文由【waitig】发表在等英博客
本文固定链接:Docker学习笔记
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)