主機級虛擬化:html
1,基於物理硬件直接虛擬化 hypervisornode
2,基於操做系統的虛擬化軟件 vmware kvm vmworkstation mysql
內核的做用:資源的分配和管理linux
Jail vserver(chroot)nginx
6種名稱空間git
Ipc進程間通訊 信號量 消息隊列 共享內容github
uts主機名和域名 namespace隔離web
mount文件數 掛載點redis
進程樹pid : init:沒有父進程的進程 進程編號sql
User用戶和用戶組:隔離 kernel 3.18+加入
Net網絡設備 網絡棧 端口 隔離
Namespace: clone(),setns() 實現
容器級虛擬化:
Control groups: cgroups控制組 blkio cpu cpuset devices freezer memory perf-event net_cls
Namespace
chroot
LXC:LinuX Container
lxc-create template
鏡像文件: 容器要用到的全部組件編排好打包成一個文件,這個文件就是鏡像文件
共享文件 分層掛載
centos鏡像 容器不可修改à nginx 鏡像 容器不可修改 à 容器的可修改存儲
dockers管理容器標準: libcontainer à runc
OCI: open container initiative 開放容器標準
1, 運行時標準
2, 鏡像格式標準
OCF: open container Format 開放容器格式 runC
Dockers官方鏡像源
docker架構
client -- -----------sock文件----> docker_host -------------àregistry
docker build docker daemon
docker pull containers -<--images
docker run
docker-ee 企業版 跟隨moby
docker-ce 社區版
registry的組成:repository 單個運用的倉庫 倉庫名:運用名+標籤組成
登陸registry的帳號驗證
鏡像表單
鏡像:靜態 相似於程序文件
容器: 動態,有生命週期 相似於進程
Docker對象:
Images
Containers
Networks
Volumes
plugins
docker的網絡類型
docker network ls
birdge: 就如同橋接的switch/hub, 使用bridge網絡的container會分配一個當前bridge配置的子網IP, 在經過run建立container時經過 --ip 指定
host: 須要使用 --network=host 參數指定. 使用主機網絡, 此時 container 的網絡會附屬在主機上, 二者是互通的. 例如在container中的服務監聽8080端口, 則主機的8080端口就會自動映射到這個端口
none: 須要使用 --network=none 參數指定. 不分配局域網的IP
須要環境
64 bit cpu
Kernerl 3.10+
Kernel的namespace和cgrpups
Docker client 就是docker命令
鏡像: 含有啓動容器所須要的文件系統及其內容,
分層構建: 最底層 bootfs 引導的文件系統 bootloader + kernel 容器啓動完成之後會被卸載以節約資源(從內存中移除)
其次 rootfs 位於bootfs之上,表現爲容器的根文件系統 rootfs由內核掛載爲只讀模式,然後經過」聯合掛載」技術掛載一個額外的」可寫層」
聯合掛載技術:
Aufs 高級多層統一文件系統 advanced multi-layed unification filesystem
Overlay 整合到3.18版linux內核 疊加文件系統 目前用在 centos7上
Btrfs devicemapper(centos7) 和vfs均支持聯合掛載技術
registry repository + index
repositoy: 頂層倉庫 + 用戶倉庫 用戶名/倉庫名
index:維護帳戶 鏡像校驗和公共命名空間 等因而用戶認證的檢索接口
sponsor registry
mirror registry
vendor registry
private registry
docker registry:鏡像由開發人員製做 然後推送到公共或私有registry上保存
雲原生:傳環境變量來配置容器,用來運行在雲環境上
base image:由docker提供,可下載docker的官方基礎鏡像
dockerfile --> github 項目 ---> docker hub自動建立鏡像並保存在你用戶名的倉庫下
有名的鏡像倉庫:
知名鏡像倉 quay.io
官方鏡像倉庫 docker.io
阿里雲鏡像倉 registry.cn-shenzhen.aliyuncs.com
docker pull registry:port/用戶名/鏡像名:tag
commit鏡像製做
docker commit -a 「lwb」 -c 「CMD [‘/bin/httpd’,’-f’,’-h’,’data/html’]」 -p b1 maggedu/httpd:v0.2
做者 修改啓動參數 先暫停 基於bi容器 製做後鏡像名
1.
docker鏡像倉庫
docker login
docker push docker.io/leiwenbin627/倉庫名:版本
2.
阿里鏡像倉庫
docker login --username=859826896@qq.com registry.cn-shenzhen.aliyuncs.com
docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/leiwenbin627/[鏡像版本號]
docker push registry.cn-shenzhen.aliyuncs.com/leiwenbin627/[鏡像版本號]
ovs:OpenVSwitch 開源虛擬網關
SDN:software define network 軟件定義網絡 軟件驅動網絡
橋接:物理網卡當交換機使用
overlay network(k8s)
docker 網絡:
bridge: nat橋接網絡 經過軟交換docker0---> 容器 veth虛擬網卡 關聯關係用brctl show或ip link show看網卡鏈接對 yum install bridge-utils
docker0相似於僅主機橋 容器默認這種網絡 用docker network inspect bridge查看
iptables -t nat -vnL 看docker0地址假裝 masquerade
docker inspect 容器名 查看詳細信息
容器間共享網絡空間:容器使用物理機的網絡名稱空間 兩個容器共用一個網絡名稱空間 主機名稱空間和IPC進程間通訊空間, 用戶空間 mount掛載文件空間 pid進程樹空間獨立 即聯盟式容器
none:容器本身的lo網卡127.0.0.1 non e意味着不給容器適配網絡 容器用於後臺處理任務,掛載存儲卷,處理存儲卷裏面的數據,不與外界通訊,就用none網絡
open container:直接使用物理機的網絡名稱空間,直接使用物理網口 即host網絡
查詢網絡名稱空間:ip help
ip netns help
添加網絡名稱空間:ip netns add r1
ip netns add r2
ip netns add r3
查詢網絡名稱空間:ip netns list
在網絡名稱空間中執行命令:ip netns exec r1 ifconfig -a
給網絡名稱空間建立網卡對
ip link help
ip link add name veth1.1 type veth peer name veth1.2
網卡一 類型 網卡2
把網卡移到網絡名稱空間中
ip link set dev veth1.2 netns r1
網卡 網絡名稱空間
一個設備只能屬於一個網絡名稱空間
ip netns exec r1 ifconfig -a 在網絡名稱空間r1中執行命令 ifconfig -a
更名
ip netns exec r1 ip link set dev veth1.2 name eth0
ip netns exec r1 ifconfig -a
測試
ifconfig veth1.1 10.1.0.1/24 up 激活
ip netns exec r1 ifconfig eth0 10.1.0.2/24 up
ip netns exec r1 ifconfig
docker help
docker run --name t2 --network bridge -it busybox:latest busybox默認執行命令 /bin/bash
指定網絡
docker run --name t3 --network none -it busybox:latest
主機名是容器ID號
docker run --name t5 --network bridge --rm --dns 114.114.114.114 -it busybox:latest
指定dns
docker run --name t5 --network bridge --rm --dns 114.114.114.114 -it --add-host www.baidu.com:192.168.81.25 busybox:latest
注入/etc/hosts文件
docker kill t5 容器t5中止運行
docker start t5 容器t5開始運行
docker run --name web --rm -p 192.168.81.30::80 nginx
綁定宿主機IP映射
docker port web
docker run --name web --rm -p 192.168.81.30:90:80 nginx
綁定宿主機IP和固定映射端口
聯盟式容器:共享同一個網絡空間
docker run --name b1 -it --rm busybox
docker run --name b2 --network container:b1 -it --rm busybox 用ifconfig查看
共享容器b1的網絡名稱空間 即共用容器b1的網絡
docker run --name b2 --network host -it --rm busybox 用ifconfig查看
docker run --name b1 --network host -it --rm busybox
共享宿主機的網絡名稱空間 即共用物理機的網絡
/ # echo "ffffffffffffff" > /tmp/index.html
/ # httpd -f -h /tmp
修改docker0網段
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],
"bip": "10.0.0.1/16" 指定docker的IP和網段
}
docker守護進程的c/s,其默認監聽unix socket格式的地址,/var/run/docker.sock,即客戶端經過 sock控制docker-daemon
{
"registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],
"bip": "10.0.0.1/16",
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"] 容許外部經過本機2375端口在經過本機的 sock套接字連本機的docker-daemon
}
去另外一臺測試
docker -H 192.168.81.30:2375 ps -a (命令去除docker開頭)
指定控制的主機 端口 運行的命令
docker網橋的建立 也即docker網絡的建立
docker network create --help
docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0
docker網絡類型 子網 網橋的默認網關 網橋名/網絡名
docker network ls 查看
docker run --name t6 -it --network mybr0 busybox
使用mybr0網絡
存儲:
有狀態運用:當前此次鏈接的處理必定與此前的處理有關聯關係 例如mysql redis tomcat
無狀態運用:先後處理沒有關聯關係 例如nginx反向代理
任何有狀態的運用都要持久存儲數據
若是存儲在容器內:刪除容器,數據所有丟失,存儲在聯合文件系統中,不易於宿主機訪問,容器間數據不共享。
存儲卷:是容器上一個或多個目錄,此類目錄可繞過聯合文件系統與宿主機上的某目錄綁定
有兩種存儲卷:
1,綁定掛載卷 容器目錄和宿主機目錄都指明
docker run -it --name b5 --rm -v /opt:/data busybox
宿主機路徑:容器路徑
2,docker管理的卷 用於存儲臨時文件 容器內指定目錄路徑,docker在宿主機找一個或建立一個目錄掛載
docker run -it --name b3 -v /data busybox
查看json格式數據
docker inspect b5
docker inspect -f {{.Mounts}} b5 查看Mounts 用-f 過濾
docker inspect -f {{.NetworkSettings.Networks.bridge}} b5
NMT: nginx + mariadb + tomcat
docker run --name infracon -it -v /data/infracon/volume:/data/web/html busybox 做爲基礎支撐容器
docker run --name nginx --network container:infracon --volumes-from infracon -it busybox
使用infracon容器的網絡 複製infracon容器的存儲
自制鏡像:
dockerfile:構建鏡像的源碼
.dockerignore 忽略的文件寫裏面
mkdir img1 & cd img1
vim Dockerfile
# base image
FROM busybox:latest
MAINTAINER "lwb"
COPY index.html /data/web/html/
COPY yum.repos.d /etc/yum.repos.d/
#下載並保存到指定目錄 向目標路徑打包文件
ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/
docker build -t tinyhttpd:v0.1-3 .
驗證
docker run --name tinyweb1 --rm tinyhttpd:v0.1-3 ls /usr/local/src/
例子二:
wget http://nginx.org/download/nginx-1.16.1.tar.gz
# base image
FROM busybox:latest
MAINTAINER "lwb"
COPY index.html /data/web/html
COPY yum.repos.d /etc/yum.repos.d
#下載並保存到指定目錄 ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/
WORKDIR /usr/local/src/ #指定工做目錄
ADD nginx-1.16.1.tar.gz ./ #放在當前工做目錄下
#容器創建存儲卷 /data/mysql/與宿主機創建關聯關係
VOLUME /data/mysql/
docker build -t tinyhttpd:v0.1-4 .
鏡像名:tag .表示當前目錄
驗證
docker run --name tinyweb1 --rm tinyhttpd:v0.1-4 ls /usr/local/src/
例子三
# base image
FROM busybox:latest
MAINTAINER "lwb"
#傳入環境變量
ENV DOC_ROOT=/data/web/html/ \
WEB_SERVER_PACKAGE="nginx-1.16.1.tar.gz"
#DOC_ROOT環境變量前面沒有定義就用-後面的
COPY index.html ${DOC_ROOT:-/data/web/html/}
COPY yum.repos.d /etc/yum.repos.d
#下載到指定目錄
ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} /usr/local/src/
#工做目錄
WORKDIR /usr/local/src/
#ADD ${WEB_SERVER_PACKAGE} ./
#容器創建存儲卷 /data/mysql/與宿主機創建關聯關係
VOLUME /data/mysql/
#待暴露端口
EXPOSE 80/tcp
#RUN 定義docker build 定義製做鏡像的容器運行的命令
RUN cd /usr/local/src && \
tar -xf ${WEB_SERVER_PACKAGE} && \
docker run --name tinyweb1 --rm -e WEB_SERVER_PACKAGE="nginx-1.16.0" tinyhttpd:v0.1-5 printenv
-e 啓動容器傳入或修改環境變量 printenv打印容器環境變量
init進程:內核啓動的進程 進程號爲1
nohup command & 剝離於shell父進程,是init子進程
exec command 開啓shell子進程,並替換當前進程成爲主進程,並且在容器中進程號爲1
殭屍進程:子進程比父進程先結束,而父進程又沒有收回子進程,釋放子進程佔用的資源,此時子進程將成爲一個殭屍進程,若是父進程先退出,子進程被init接管,子進程退出後會回收其佔用的相關資源
孤兒進程:父進程退出,子進程還在運行,那麼子進程就會變成孤兒進程,孤兒進程將會被init進程收養,並由init進程對他們完成狀態收集工做
CMD命令定義:
CMD <command> 進程號不爲1 同RUN
CMD [「<executable>」,」<param1>」,」<param2>」] 進程號爲1,即相似init進程 可與docker sock通訊 同RUN
CMD [「<param1>」,」<param2>」 ] 用於爲ENTRYPOINT提供默認參數
cmd例一
mkdir img2 & cd img2
FROM busybox
LABEL maintainer="<34697826@qq.com>" app="httpd"
ENV WEB_DOC_ROOT="/data/web/html/"
RUN mkdir -p $WEB_DOC_ROOT && \
echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html
#定義容器啓動時運行的命令
CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
docker build -t tinyhttpd:v0.2-1 ./
docker run --name tinyweb2 -it --rm tinyhttpd:v0.2-1
cmd例二
FROM busybox
LABEL maintainer="<34697826@qq.com>" app="httpd"
ENV WEB_DOC_ROOT="/data/web/html/"
RUN mkdir -p $WEB_DOC_ROOT && \
echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html
#不以shell子進程來解析 「/bin/sh」,」-c」 手動開啓shell子進程
CMD [「/bin/sh」,」-c」,"/bin/httpd","-f","-h /data/web/html/"]
docker build -t tinyhttpd:v0.2-2 ./
docker run --name tinyweb2 -it --rm tinyhttpd:v0.2-2
ENTRYPOINT例子三
docker run運行容器時在指定命令和參數,改變容器啓動默認運行的命令
FROM busybox
LABEL maintainer="<34697826@qq.com>" app="httpd"
ENV WEB_DOC_ROOT="/data/web/html/"
RUN mkdir -p $WEB_DOC_ROOT && \
echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html
#定義容器啓動時運行的命令不會被docker run後面接的參數而改變,而是當成參數傳給容器默認啓動執行命令
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
docker build -t tinyhttpd:v0.2-5 ./
docker run --name tinyweb2 -it --rm tinyhttpd:v0.2-5 ls /data/web/html
定義了默認執行ENTRYPOINT類命令,當成參數傳給ENTRYPOINT命令
若是要覆蓋,就要用docker run --entrypoint 來覆蓋Dockerfile定義的ENTRYPOINT
ENTRYPOINT與CMD組合 例子四
FROM busybox
LABEL maintainer="<34697826@qq.com>" app="httpd"
ENV WEB_DOC_ROOT="/data/web/html/"
RUN mkdir -p $WEB_DOC_ROOT && \
echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html
#CMD的命令當成參數傳給ENTRYPOINT
CMD ["/bin/httpd","-f","-h ${WEB_DOC_ROOT}"]
ENTRYPOINT ["/bin/sh","-c"]
docker build -t tinyhttpd:v0.2-7 ./
docker image inspect tinyhttpd:v0.2-7 查看默認啓動命令
docker run --name tinyweb3 -it --rm tinyhttpd:v0.2-7
docker run --name tinyweb5 -it --rm tinyhttpd:v0.2-7 ls /
覆蓋Dockerfile定義的CMD傳給ENTRYPOINT
容器接受配置經過環境變量是最好的方式
讓nginx更靈活配置
mkdir img3 && cd img3
vim Dockerfile
FROM nginx:1.14-alpine
LABEL maintainer="346978526@qq.com"
ENV NGX_DOC_ROOT='/data/web/html/'
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
CMD [「/usr/sbin/nginx」,」-g」,」daemon off;」]
ENTRYPOINT [「/bin/entrypoint.sh」]
vim entrypoint.sh
#!/bin/sh
cat > /etc/nginx/conf.d/www.conf <<EOF
server {
server_name $HOSTNAME;
listen ${IP:-0.0.0.0}:${PORT:-80};
root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF
# $@爲腳本的全部參數,即Dockerfile中CMD傳過來的全部參數 exec /usr/sbin/nginx -g daemon off;
exec "$@"
chmod +x entrypoint.sh
docker build -t myweb:v0.3-1 ./
docker run --name myweb1 --rm -P -it myweb:v0.3-1
docker exec -it myweb1 /bin/sh
docker run --name myweb1 --rm -P -it -e "PORT=8080" myweb:v0.3-1
-e 還能在docker run定義環境變量傳進去
docker exec -it myweb1 /bin/sh 驗證
helthcheck健康探測
FROM nginx:1.14-alpine
LABEL maintainer="346978526@qq.com"
ENV NGX_DOC_ROOT='/data/web/html/'
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
EXPOSE 80/tcp
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
容器啓動後3秒開始 wget -q靜默模式
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
ARG的使用 用於docker build時傳參數和替換參數
FROM nginx:1.14-alpine
ARG author="lwb 346978526@qq.com"
LABEL maintainer="${author}"
ENV NGX_DOC_ROOT='/data/web/html/'
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
EXPOSE 80/tcp
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
docker build -t myweb:v0.3-10 ./
docker image inspect myweb:v0.3-10 驗證
docker build --build-arg author="pony pony@qq.com" -t myweb:v0.3-11 ./
docker image inspect myweb:v0.3-11 驗證
ONBUIld 觸發器。當作成的鏡像被別的Dockerfile用來作基礎鏡像時觸發 通常是接RUN指令
FROM nginx:1.14-alpine
ARG author="lwb 346978526@qq.com"
LABEL maintainer="${author}"
ENV NGX_DOC_ROOT='/data/web/html/'
ADD index.html ${NGX_DOC_ROOT}
ADD entrypoint.sh /bin/
EXPOSE 80/tcp
ONBUILD ADD http://mirrors.163.com/elastic/6.x/apt/dists/stable/Release /etc/yum.repos.d/
CMD ["/usr/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["/bin/entrypoint.sh"]
docker build --build-arg author="pony pony@qq.com" -t myweb:v0.3-12 ./
mkdir img4 && cd img4
vim Dockerfile
FROM myweb:v0.3-12
RUN mkdir /tmp/test
docker run --name test1 --rm test:v0.1-1 ls /etc/yum.repos.d/ 驗證
私有倉建立
docker-distribution項目
rpm -ql docker-distribution
registry倉庫
yum install docker-registry -y 安裝的包是docker-distribution
鏡像保存目錄:/var/lib/registry
配置文件:/etc/docker-distribution/registry/config.yml
systemctl start docker-distribution
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],
"insecure-registries": ["node1:5000"] #接受不安全服務器
}
systemctl restart docker
docker tag myweb:v0.3-11 node1:5000/myweb:v0.3-11
docker push node1:5000/myweb:v0.3-11
下載節點要這樣設置
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],
"insecure-registries": ["node1:5000"] #接受不安全服務器
}
systemctl restart docker
測試下載
docker pull node1:5000/myweb:v0.3-11
鏡像層在/var/lib/registry/docker/registry/v2/repositories/myweb/_layers/sha256
vmware harbor企業鏡像倉
1,多租戶
2,安全及風險掃描
3,日誌審計
4,標識集成和基於角色訪問控制策略
5,主備倉鏡像同步
6,擴展的API和圖形用戶界面
7,支持中文
安裝手冊 https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
https://github.com/goharbor/harbor
https://github.com/goharbor/harbor/releases/tag/v1.5.2
下載https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.2.tgz
tar xf harbor-offline-installer-v1.5.2.tgz -C /usr/local/
/usr/local/harbor
vim harbor.cfg
hostname = node1.com
max_job_workers = 3
harbor_admin_password = 123456
db_password = 123456
yum install docker-compose -y
./install.sh 工做端口 80 443 4443
測試
admin/123456
使用
用戶管理 -->建立用戶 lwb/She5216600
倉庫管理 -->新建目標 目標名:myproject 目標url;http://node1/myproject 用戶名:lwb 密碼:同上 不驗證遠程證書
複製規則 -->
用普通用戶登錄 --> 項目 -->新建項目 devel 公開 -->點擊推送鏡像
docker tag SOURCE_IMAGE[:TAG] node1/devel/IMAGE[:TAG] / docker push node1/devel/IMAGE[:TAG]
測試: 在node2 上測試
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],
"insecure-registries": ["node1.com"]
}
systemctl restart docker
docker login node1.com
docker tag myweb:v0.3-10 node1.com/devel/myweb:v0.3-10
docker tag myweb:v0.3-11 node1.com/devel/myweb:v0.3-11
docker tag myweb:v0.3-12 node1.com/devel/myweb:v0.3-12
docker push node1.com/devel/myweb 將myweb倉庫的全部鏡像都推上去
項目名 倉庫名
中止harbor服務
cd /usr/local/harbor
docker-compose pause 暫停
docker-compose unpause 取消暫停
docker-compose 單機編排工具
yum info docker-compose
資源限制
OOM_ADJ: out of memory的權重 權重越高評分就越高
OOM_SCORE: out of memory 評分
memory-swap memory
正數s 正數m 經常使用可用總空間爲s,其中ram爲m, swap爲(s-m),若s=m,則無可用 swap資源
0 正數m 至關於未設置swap(unset)
unset 正數m 若主機(docker host)啓用了 swap,則容器的可用swap爲2*m
-1 正數m 若主機(docker host)啓用了swap,則容器可以使用最大至主機上的全部swap空間的swap資源
-m --memory 最大使用內存
--memory-swappiness 使用swap傾向性 值0-100 0表示能不用 swap就儘可能不用,100表示到了能用 swap就用swap
--oom-kill-disable=true 不會被oom kill掉
--memeory-reservation 能預留的內存空間
--cpu-period 每次使用cpu的時間
CFS scheduler:同時運行的進程小於等於CPU核心數,因此其餘進程須要CFS scheduler來調度運行
--cpu-shares=<values> 按比例切分可用CPU
--cpus=<values> 定義最多使用幾核CPU
--cpuset-cpus 限制在哪一個CPU核心上運行
lscpu 查看cpu信息
docker run --help
壓測鏡像 docker pull lorel/docker-stress-ng
驗證memory
docker run --name stress -it --rm -m 256m lorel/docker-stress-ng stress --help
docker run --name stress -it --rm -m 256m lorel/docker-stress-ng stress --vm 2
限制memory 256m ---vm 開啓兩個進程(每一個進程用256m內存)
docker top stress 查看 stress容器資源佔用
docker stats 查看容器資源變更
驗證 CPU
docker run --name stress -it --rm --cpus=2 lorel/docker-stress-ng stress --cpu 8
限制使用2核CPU 開啓8個測試cpu進程
docker stats 查看
docker run --name stress -it --rm --cpuset-cpus 0,2 lorel/docker-stress-ng stress --cpu 8
選定在哪顆cpu上
docker run --name stress2 -it --rm --cpu-shares 512 lorel/docker-stress-ng stress --cpu 8
按比例分cpu 512是最小單位