6. 管理容器的资源


6.1 基础知识: linux control groups


Linux Cgroup 可让您为系统中所运行任务(进程)的用户定义组 群分配资源— 比如 CPU 时间、系统内存、网络带宽或者这些资源 的组合。您可以监控您配置的cgroup,拒绝cgroup 访问某些资源, 甚至在运行的系统中动态配置您的 cgroup。所以,可以将 controll groups 理解为 controller (system resource) (for) (process) groups,也就是是说它以一组进程为目标进行系统资源分配和控 制。

6.1.1 Linux control groups主要提供了如下功能

  • Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。
  • Prioritization: 优先级控制,比如:CPU利用和磁盘IO吞吐。
  • Accounting: 一些审计或一些统计,主要目的是为了计费。
  • Control: 挂起进程,恢复执行进程。

6.1.2 查看linux内核中是否启用了cgroup

docker专题(四)_第1张图片

6.2 docker对cpu的使用


6.2.1 dockefile构建一个镜像

保存下面的文件命名为: Dockerfile

FROM centos:lates
RUN yum install -y epel-release && yum install -y stress
ENTRYPOINT["stress"]

Docker能够指定(通过运行命令的-c或者--cpu-shares开关)给一个容器的可 用的CPU分配值。这是一个相对权重,与实际的处理速度无关。每个新的容 器默认的将有1024CPU配额,当我们单独讲它的时候,这个值并不意味着什 么。但是如果我们启动两个容器并且两个都将使用 100%CPU,CPU时间将在 这两个容器之间平均分割,因为它们两个都有同样的CPU配额(为了简单起 见,假设没有任何其他进程在运行)

使用下面的方式启动两个容器,运行之前创建好的mycentos

docker run -itd -c 1024 --cpus 4 centos:7

docker run -itd -c 512 --cpus 4 centos:7 

注意:第一个容器占用CPU的权重是1024;第二个容器是512

systemctl set-property docker- a92daccba6983f210bf28c4f4f6e2c4c579d58f91a16d4702ee8e4ae7f8a0f5f.sc ope CPUShares=1024

6.3 docker对内存的使用


  • 第一件事需要注意的是,默认一个容器可以使用主机上的所有内存。
  • 如果你想为容器中的所有进程限制内存,使用docker run命令的 -m开 关即可。你可以使用bytes值定义它的值或是添加后缀(k,m或g)。
    • • 例如:docker run -it -m 128m centos
  • 为了显示限制的实际情况,我将再次使用我的mycentos镜像.
  • • docker run -it --rm -m 128m mycentos --vm 1 --vm-bytes 128M --vm-hang 0 • -m128m:用于限制容器使用的内存大小 • --vm1:产生一个内存分配的进程 • --vm-bytes 128M:每次分配大小为128M
    • • --vm-hang 0:分配后立即释放;如果为100,表示分配后不释放,测试100秒

6.4 docker对I/O的使用


使用命令docker help run | grep -E 'bps|IO'得到Docker对I/O管理的 相关参数,如下:

docker专题(四)_第2张图片

7. 搭建Harbor私有仓库


7.1 什么是Harbor


Docker容器应用的开发和运行离不开可靠的镜像管理,虽然 Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面 考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是 由VMware公司开源的企业级的Docker Registry管理项目,它包括 权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像 复制和中文支持等功能。

7.2 安装docker和docker compose


# 安装docker
yum install docker

#安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 查看docker compose的版本
docker-compose --version

7.3 安装Harbor

Harbor支持在线和离线安装方式,这里,我们使用离线方式,先下载Harbor安装包:

wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.3.tgz

7.3.1 解压离线安装包

tar xzvf harbor-offline-installer-v1.5.3.tgz
mv harbor /usr/local/harbor
cd /usr/local/harbor

7.3.2 配置Harbor

核心配置文件:$HARBOR_HOME/harbor.cfg

# 监听地址
hostname = harbor主机的IP地址或者主机名 # 登录密码
harbor_admin_password = 123456
# 只允许管理员可以创建项目 project_creation_restriction = everyone

7.3.3 安装Harbor

./prepare #配置Harbor
./install.sh #安装Harbor

7.3.4 访问Harbor

输入浏览器:主机ip, 如下:

默认的账户为 admin,密码为 Harbor12345。

docker专题(四)_第3张图片

7.4 在Docker客户机上通过终端访问harbor

  • vi /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd --insecure-registry my.harbor.com , 其中:my.harbor.com是harbor运行主机的hostname
  • 创建/etc/docker/daemon.json文件,在文件中指定仓库地址
cat > /etc/docker/daemon.json << EOF
{ "insecure-registries":["my.harbor.com"] }
EOF

重启Docker

systemctl daemon-reload
systemctl restart docker

重启Docker

systemctl daemon-reload
systemctl restart docker

重启Docker

systemctl daemon-reload
systemctl restart docker

重启Docker

systemctl daemon-reload
systemctl restart docker

7.5 验证环境

使用docker login登录:

docker login my.harbor.com
  • 创建Dockerfile
FROM centos
ENV TZ "Asia/Shanghai"
  • 编译Dockerfile
docker build -t **my.harbor.com**/library/mycentos .
  • 使用docker images查看生产的镜像
  • 将镜像上传到私有的harbor镜像仓库
docker push **my.harbor.com**/library/mycentos

故事凌
明天能否加个鸡腿!
稀罕作者