docker專題(四)
故事凌 故事凌 2月27日
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
6.2 docker對cpu的使用
6.2.1 dockefile構建一個鏡像
保存下面的文件命名為: Dockerfile
<code>FROM centos:lates
RUN yum install -y epel-release && yum install -y stress
ENTRYPOINT["stress"]/<code>
Docker能夠指定(通過運行命令的-c或者--cpu-shares開關)給一個容器的可 用的CPU分配值。這是一個相對權重,與實際的處理速度無關。每個新的容 器默認的將有1024CPU配額,當我們單獨講它的時候,這個值並不意味著什 麼。但是如果我們啟動兩個容器並且兩個都將使用 100%CPU,CPU時間將在 這兩個容器之間平均分割,因為它們兩個都有同樣的CPU配額(為了簡單起 見,假設沒有任何其他進程在運行)
使用下面的方式啟動兩個容器,運行之前創建好的mycentos
<code>docker run -itd -c 1024 --cpus 4 centos:7
docker run -itd -c 512 --cpus 4 centos:7 /<code>
注意:第一個容器佔用CPU的權重是1024;第二個容器是512
<code>systemctl set-property docker- a92daccba6983f210bf28c4f4f6e2c4c579d58f91a16d4702ee8e4ae7f8a0f5f.sc ope CPUShares=1024/<code>
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管理的 相關參數,如下:
7. 搭建Harbor私有倉庫
7.1 什麼是Harbor
Docker容器應用的開發和運行離不開可靠的鏡像管理,雖然 Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面 考慮,部署我們私有環境內的Registry也是非常必要的。Harbor是 由VMware公司開源的企業級的Docker Registry管理項目,它包括 權限管理(RBAC)、LDAP、日誌審核、管理界面、自我註冊、鏡像 複製和中文支持等功能。
7.2 安裝docker和docker compose
<code># 安裝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/<code>
7.3 安裝Harbor
Harbor支持在線和離線安裝方式,這裡,我們使用離線方式,先下載Harbor安裝包:
<code>wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.3.tgz/<code>
7.3.1 解壓離線安裝包
<code>tar xzvf harbor-offline-installer-v1.5.3.tgz
mv harbor /usr/local/harbor
cd /usr/local/harbor/<code>
7.3.2 配置Harbor
核心配置文件:$HARBOR_HOME/harbor.cfg
<code># 監聽地址
hostname = harbor主機的IP地址或者主機名 # 登錄密碼
harbor_admin_password = 123456
# 只允許管理員可以創建項目 project_creation_restriction = everyone/<code>
7.3.3 安裝Harbor
<code>./prepare #配置Harbor
./install.sh #安裝Harbor/<code>
7.3.4 訪問Harbor
輸入瀏覽器:主機ip, 如下:
默認的賬戶為 admin,密碼為 Harbor12345。
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文件,在文件中指定倉庫地址
<code>cat > /etc/docker/daemon.json << EOF
{ "insecure-registries":["my.harbor.com"] }
EOF/<code>
重啟Docker
<code>systemctl daemon-reload
systemctl restart docker/<code>
重啟Docker
<code>systemctl daemon-reload
systemctl restart docker/<code>
重啟Docker
<code>systemctl daemon-reload
systemctl restart docker/<code>
重啟Docker
<code>systemctl daemon-reloadsystemctl restart docker/<code>
7.5 驗證環境
使用docker login登錄:
<code>docker login my.harbor.com/<code>
- 創建Dockerfile
<code>FROM centos
ENV TZ "Asia/Shanghai"/<code>
- 編譯Dockerfile
<code>docker build -t **my.harbor.com**/library/mycentos ./<code>
- 使用docker images查看生產的鏡像
- 將鏡像上傳到私有的harbor鏡像倉庫
<code>docker push **my.harbor.com**/library/mycentos/<code>
閱讀更多 故事凌 的文章