天天看點

190520Docker2

一、容器概念

  • Linux六大名稱空間
UTS 主機名和域名
IPC 信号量、消息隊列和共享記憶體
PID 程序編号
Network 網絡裝置、網線棧、端口等
Mount   挂載點(檔案系統)
User    使用者和使用者組,核心3.8支援           
  • Control Group(cgroups)
blkio   塊裝置IO
cpu cpu
cpuacct cpu資源使用報告
cpuset  多處理器平台上的CPU集合
devices 裝置通路
freezer 挂起或恢複任務
memory  記憶體用量及報告
perf_event  對cgroup中的任務進行統一性能測試
net_cls cgroup中的任務建立的資料封包的類别辨別符           
  • 容器核心技術
chroot
namespace
cgroups           
  • Docker容器引擎:LXC --> libcontainer --> runC
  • Docker Daemon:Docker server端,預設隻提供socket檔案接入
  • Registry:鏡像倉庫,預設通信協定HTTPS
  • Containers:容器
  • Images:鏡像

二、Docker安裝使用

  • 基礎環境
64 bits CPU
kernel-3.10+           
  • 安裝
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
# yum list docker-ce.x86_64 --showduplicates | sort -r
# yum install https://mirrors.aliyun.com/centos-vault/7.3.1611/extras/x86_64/Packages/container-selinux-2.9-4.el7.noarch.rpm
# yum install docker-ce-18.06.0.ce-3.el7 -y            
  • 配置鏡像加速(以阿裡雲為例)
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]  #加速位址登入阿裡雲後在容器鏡像服務中擷取
}
EOF
# systemctl daemon-reload
# systemctl start docker
# systemctl enable docker.service           
  • 配置Unix Socket監聽
# vim /etc/docker/daemon.json
{
  "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
# systemctl restart docker
# docker -H 192.168.100.9:2375 ps  #用戶端使用tcp連接配接           
  • 修改docker0網橋的IP資訊
# vim /etc/docker/daemon.json
{
  "bip": "10.0.0.254/16",
  "fixed-cidr": "10.0.0.0/16",
  "mtu": 1500,
  "default-gateway": "10.0.0.1",
  "dns": ["114.114.114.114","8.8.8.8"]
}           
  • 建立自定義橋
# docker network create --driver bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" docker1
# docker network ls
# ip link set br-0a9309aaa170 down
# ip link set br-0a9309aaa170 name docker1  #修改接口名字
# ip link set docker1 up
# docker network rm docker1  #删除網橋           
  • 驗證
# docker info
# docker version           
  • 啟動一個容器
# docker pull centos
# docker run --name d1 -it centos:latest
# docker start -ai 64d96be72c59  #再次進入容器           
  • 啟動一個nginx容器
# docker run --name web1 -d nginx:1.14
# docker inspect e75cfa7018ce |grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
# curl 172.17.0.2           

三、Docker Client指令

  • 常見用法(舊)
attach          将本地标準輸入,輸出和錯誤流附加到正在運作的容器
build           從Dockerfile建構映像
commit          根據容器的更改建立新圖像
cp              在容器和本地檔案系統之間複制檔案/檔案夾
create          建立一個新容器
diff            檢查容器檔案系統上檔案或目錄的更改
events          從伺服器擷取實時事件
exec            在正在運作的容器中運作指令
export          将容器的檔案系統導出為tar存檔
history         顯示圖像的曆史記錄
images          列出圖像
import          從tarball導入内容以建立檔案系統映像
info            顯示系統範圍的資訊
inspect         傳回有關Docker對象的低級資訊
kill            殺死一個或多個正在運作的容器
load            從tar存檔或STDIN加載圖像
login           登入Docker系統資料庫
logout          從Docker系統資料庫登出
logs            擷取容器的日志
pause           暫停一個或多個容器中的所有程序
port            列出端口映射或容器的特定映射
ps              列出容器
pull            從docker倉庫中拉取鏡像
push            将圖像或存儲庫推送到系統資料庫
rename          重命名容器
restart         重新啟動一個或多個容器
rm              删除一個或多個容器
rmi             删除一個或多個圖像
run             在新容器中運作指令
save            将一個或多個圖像儲存到tar存檔(預設情況下流式傳輸到STDOUT)
search          在Docker Hub中搜尋圖像
start           啟動一個或多個已停止的容器
stats           顯示容器資源使用情況統計資訊的實時流
stop            停止一個或多個正在運作的容器
tag             建立一個引用SOURCE_IMAGE的标記TARGET_IMAGE
top             顯示容器的運作程序
unpause         取消暫停一個或多個容器中的所有程序
update          更新一個或多個容器的配置
version         顯示Docker版本資訊
wait            阻止,直到一個或多個容器停止,然後列印退出代碼           

四、Docker鏡像(image)

  • docker采用分層建構機制,最底層為bootfs,次之為rootfs
    • bootfs: 用于系統引導的檔案系統,包括BootLoader和kernel,容器啟動完成後會被解除安裝以節約記憶體資源
    • rootfs: 位于bootfs之上,表現為docker容器的根檔案系統,docker采用聯合挂載,每一層都是隻讀的,在最上層有一個可寫層
  • Aufs:進階多層統一檔案系統,由Junjiro Okajima開發,早期使用
  • overlayfs & overlay2fs:至3.18版本開始被合并到Linux核心
# docker info |grep "Storage Driver"
Storage Driver: overlay2           
  • Docker Registry分類
Sponsor Registry
Mirror Registry
Vendor Registry
Private Registry           
  • Docker Hub
Image Repositories  鏡像倉庫
Automated Build  自動建構
Webhooks  可以将GitHub中的dockerfile自動建構為鏡像
Organizations  組織
GitHub and Bitbucket integration           
  • docker image
build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE           
  • docker image的制作(commit)
  1. 手工組織檔案系統,打包成docker image
  2. 基于容器制作,在運作的容器上commit将可寫層制作成image
  3. 基于Dockerfile手動build或者自動建構,Dockerfile基于Base image制作
# docker pull centos:centos7.5.1804
# docker run --name centos -it centos:centos7.5.1804
[root@xxxxxxxxxxx /]# yum install vim wget lftp bash-completion net-tools bind-utils telnet screen tree psmisc bc httpd -y
# docker commit -p centos
# docker image ls
<none>                   <none>              484173886091        22 seconds ago      362MB
# docker tag 484173886091 dongfeimg/mycentos:v0.1
# docker image ls
dongfeimg/mycentos       v0.1                484173886091        5 minutes ago       362MB           
# docker run --name mycentos -it dongfeimg/mycentos:v0.1
[root@3c21ac1d0496 /]# mkdir -p /data/html/
[root@3c21ac1d0496 /]# vim /var/www/html/index.html
<h1>Welcome Dongfei website.</h1>
# docker commit -a "Dongfei" -c 'CMD ["/usr/bin/systemctl","start","httpd"]' -p mycentos dongfeimg/mycentos:v0.2
# docker run --name mycentos2 --privileged=true -d dongfeimg/mycentos:v0.2 /usr/sbin/init
[root@docker ~]# docker exec -it 7cec67f74460 bash
[root@7cec67f74460 /]# systemctl start httpd
# docker inspect 7cec67f74460 |grep IPAddress
"IPAddress": "172.17.0.4",
# curl 172.17.0.4
<h1>Welcome Dongfei website.</h1>           
  • docker push
# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: dongfeimg
Password: ******
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# docker push dongfeimg/mycentos:v0.1
# docker push dongfeimg/mycentos:v0.2           
  • 鏡像打包和導入
# docker save -o myimages.gz centos:centos7.5.1804 dongfeimg/mycentos:v0.1
# docker load -i myimages.gz           
  • 将docker images批量全部打包
# docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o images_name.gz           

五、Docker網絡(network)

  • 橋接
  • NET
  • Overlay Network 疊加網絡,IP承載IP的隧道通信
# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f0867978e324        bridge              bridge              local  #net橋接式網絡(預設)
f2ecf4873c28        host                host                local  #容器使用主控端的名稱空間
07123e30eddb        none                null                local  #隻有lo網卡           
# yum install bridge-utils
# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.02420a3bea55       no              vethd1d80f0
# docker network inspect bridge  #檢視網絡的詳細資訊
# docker run --name centos --network host -it dongfeimg/mycentos:v0.1  #使用host網絡           
  • ip指令管理網絡名稱空間
# rpm -q iproute
iproute-4.11.0-14.el7.x86_64
# ip netns add r1  #建立網絡名稱空間
# ip netns add r2
# ip netns list
# ip netns exec r1 ifconfig -a  #在網絡名稱空間中執行指令
# ip link add name veth1.1 type veth peer name veth1.2  #建立一對虛拟網卡
# ip link show
# ip link set dev veth1.1 netns r1  #将veth1.1網卡移動到網絡名稱空間r1中
# ip link set dev veth1.2 netns r2
# ip netns exec r1 ifconfig veth1.1 10.0.0.1/24 up
# ip netns exec r2 ifconfig veth1.2 10.0.0.2/24 up
# ip netns exec r1 ping 10.0.0.2           

1. 封閉式容器:隻有lo網卡

  • 建立封閉式容器
# docker run --name  centos7 -it --network none --rm dongfeimg/mycentos:v0.1           

2. 聯盟式容器:兩個容器使用一個名稱空間

  • 建立聯盟式容器(共享網絡名稱空間)
# docker run --name b1 -it --rm busybox
/ # echo "hello" > /tmp/index.html
/ # httpd -h /tmp/
# docker run --name b2 -it --rm --network container:b1 busybox
/ # wget -O - -q 127.0.0.1           

3. 連接配接docker0網橋的橋接容器

  • 建立橋接式容器并且建立時注入主機名、DNS和hosts
# docker run --name  centos7 -it --network bridge --rm --hostname mydocker.dongfei.com --dns 8.8.8.8 --add-host www.dongfei.com:192.168.0.111 dongfeimg/mycentos:v0.1           
  • 開放橋接容器端口至主控端(-p選項可使用多次)
# docker run --name web01 --rm -p 80 nginx:1.14  #将容器的80映射至主控端上的随機端口
# docker run --name web01 --rm -p 192.168.100.9::80 nginx:1.14  #指定映射主控端位址
# docker run --name web01 --rm -p 80:80 nginx:1.14  #将容器的80映射至主控端的80端口
# docker run --name web01 --rm -p 192.168.100.9:80:80 nginx:1.14  #指定映射端口和位址
# docker port web01  #檢視映射關系
# iptables -t nat -vnL |grep DNAT
# docker inspect bc337aa4d9fc |grep HostPort           
  • 修改docker0網橋位址資訊
# vim /etc/docker/daemon.json
{
  "bip": "10.0.0.254/16",
  "fixed-cidr": "10.0.0.0/16",
  "mtu": 1500,
  "default-gateway": "10.0.0.1",
  "dns": ["114.114.114.114","8.8.8.8"]
}           
  • 建立自定義網橋
# docker network create --driver bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" docker1
# docker network ls
# ip link set br-0a9309aaa170 down
# ip link set br-0a9309aaa170 name docker1  #修改接口名字
# ip link set docker1 up
# docker network rm docker1  #删除網橋           

4. 共享主控端網絡容器

  • 建立共享主控端網絡容器
# docker run --name b1 -it --rm --network host busybox           

六、Docker 存儲卷(volume)

COW:寫時複制
  • Bind mount volume:手動mount綁定的卷
# docker run --name centos-3 -it -v /data centos:centos7.5.1804
# docker inspect 638374f203ab |grep -A 10 Mounts           
  • Docker-managed volume:docker自動管理的卷
# docker run --name centos-4 -it --rm -v /data/volumes/centos-4:/data centos:centos7.5.1804
# docker inspect -f {{.Mounts}} centos-4   #指定js模闆檢視資料
[{bind  /data/volumes/centos-4 /data   true rprivate}]
# docker inspect -f {{.NetworkSettings.IPAddress}} centos-4           
  • 共享volume
# docker run --name centos-5 -it --rm -v /data/volumes/centos-share:/data centos:centos7.5.1804
# docker run --name centos-6 -it --rm -v /data/volumes/centos-share:/data centos:centos7.5.1804           
  • 複制其他容器的卷設定
# docker run --name infracon -it -v /data/infracon/volume/:/data/web/html centos:centos7.5.1804 基礎架構支援容器
# docker run --name nginx --network container:infracon --volumes-from infracon -it nginx           

七、Docker File

  • .dockeringore:打包忽略的檔案清單,每行寫一個檔案的路徑,可使用通配符
  • FROM指令:指定基礎鏡像
FROM <repository>[:<tag>]  or FROM <repository>@<digest>           
~]# mkdir img_work  #建立工作目錄
~]# cd img_work/
img_work]# vim Dockerfile  #注意D大寫
# Description: my image  #描述資訊
FROM centos:centos7.5.1804  #基礎鏡像
LABEL maintainer="Dongfei <[email protected]>"  #中繼資料           
  • COPY指令:
COPY ["<src>",..."<dest>"]
    1.<src>必須是build上下午中的路徑,不能是父目錄中的檔案
    2.如果<src>是目錄,則其内部檔案或子目錄會被遞歸複制,但<src>目錄本身不會被複制
    3.如果指定多個<src>,或在<src>中使用了通配符,則<dest>必須是一個目錄,且必須以/結尾
    4.如果<dest>事先不存在,它将會被自動建立,這包括其父目錄           
# 複制網頁檔案
img_work]# vim Dockerfile
COPY ["index.html","/var/www/html/"]
img_work]# vim index.html
<h1>My Docker website.</h1>
img_work]# docker build -t tinyhttpd:v0.1 ./
img_work]# docker run --name h1 --rm tinyhttpd:v0.1 cat /var/www/html/index.html
<h1>My Docker website.</h1>
# 複制yum源
img_work]# cp -r /etc/yum.repos.d/ ./
img_work]# vim Dockerfile
COPY ["yum.repos.d/","/etc/yum.repos.d/"]
img_work]# docker build -t tinyhttpd:v0.2 ./  
img_work]# docker run --name h2 --rm tinyhttpd:v0.2 ls /etc/yum.repos.d/           
  • ADD指令:将主控端的檔案打包到docker鏡像,支援URL和tar檔案
ADD ["<src>",..."<dest>"]
    1.<src>如果是本地的tar檔案,則會自動展開至鏡像中
    2.<src>如果是URL的tar檔案,則不會自動展開           
img_work]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
img_work]# vim Dockerfile
ADD ["http://nginx.org/download/nginx-1.16.0.tar.gz","/usr/local/src/"]
ADD ["nginx-1.16.0.tar.gz","/usr/local/src/"]
img_work]# docker build -t tinyhttpd:v0.3 ./
img_work]# docker run --name h3 --rm tinyhttpd:v0.3 ls /usr/local/src/           
  • WORKDIR:指定工作目錄,逆序往上找到第一個就是工作路徑
WORKDIR /usr/local/src/
ADD http://nginx.org/download/nginx-1.16.0.tar.gz ./
ADD ["nginx-1.16.0.tar.gz","./"]           
  • VOLUME:隻能挂載Docker-managed volume
VOLUME /data/mysql/           
  • EXPOSE:用于為容器打開指定要監聽的端口實作以外部通信,隻能綁定暴露容器中的端口,動态綁定在主控端的随機端口
EXPOSE <port>[/<protocol>][<port>[/<protocol>]...] #protocol 協定           
EXPOSE 80/tcp 22/tcp           
  • ENV:定義環境變量,可注入容器,可以被ADD,COPY等指令所調用
ENV <key>=<value> ...           
ENV DOC_ROOT="/var/www/html/"
COPY ["index.html","$DOC_ROOT"]           
# docker run --name h5 -e HTTP_PORT=8888 --rm tinyhttpd:v0.5 printenv #啟動容器時注入環境變量           
  • RUN:在docker build時執行指令
RUN cd /usr/local/src/ && \
    tar -xf nginx-1.16.0.tar.gz           
  • CMD:在docker run時執行的預設指令,可以寫多個,但隻有最後一個生效
1.CMD <command>  #使用bash解析指令執行
2.CMD ["<executable>","<param1>","<param2>"]
3.CMD ["/bin/bash","-c","<executable>","<param1>"]
4.CMD ["<param1>","<param2>"]  #CMD的參數傳遞給ENTRYPOINT           
image_work2]# vim Dockerfile
FROM busybox
LABEL Author="Dongfei"
ENV WEB_DOC_ROOT="/data/web/html"
RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html
CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
image_work2]# docker build -t tinyhttpd:v0.7 ./
image_work2]# docker image inspect tinyhttpd:v0.7 |grep "CMD"                      "CMD [\"/bin/sh\" \"-c\" \"/bin/httpd -f -h ${WEB_DOC_ROOT}\"]"
# docker run --name tinyweb7 -it --rm -P tinyhttpd:v0.7
# docker exec -it tinyweb7 /bin/sh           
CMD ["/bin/httpd","-f","-h","/data/web/html"]
image_work2]# docker image inspect tinyhttpd:v0.8 |grep "CMD"       
                "CMD [\"/bin/httpd\" \"-f\" \"-h ${WEB_DOC_ROOT}\"]"           
  • ENTRYPOINT:類似CMD指令的功能,用于為容器指定預設運作程式,進而使得容器像是一個單獨的可執行程式;與CMD不同的是,由ENTRYPOINT啟動的程式不會被docker run指令行指定的參數所覆寫,而且這些指令行參數會被當作參數傳遞給ENTRYPOINT指定的程式
1.ENTRYPOINT <command>  #使用bash解析指令執行
2.ENTRYPOINT ["<executable>","<param1>","<param2>"]
3.ENTRYPOINT ["/bin/bash","-c","<executable>","<param1>"]           
# vim Dockerfile
FROM busybox
LABEL Author="Dongfei"
ENV WEB_DOC_ROOT="/data/web/html"
RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
# docker build -t tinyhttpd:v0.10 ./
# docker run --name tinyweb2 -it --rm -P tinyhttpd:v0.10           
img3]# 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
exec "$@"  #執行所有傳入的參數

img3]# vim Dockerfile
FROM nginx:1.14-alpine
LABEL maintainer="Dongfei"
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"]

img3]# vim index.html
<h1>dongfei index</h1>

img3]# docker build -t myweb:v0.1 ./
# docker run --name myweb1 --rm -P myweb:v0.1

[root@docker ~]# docker exec -it b41252ebbaa8 sh
/ # wget -O - -q b41252ebbaa8
<h1>dongfei index</h1>           
注意:json數組中,注意要使用雙引号
  • USER:指定使用者
USER <UID>|<UserName>           
  • HEALTHCHECK:容器健康監測
--interval=DURATION  :每隔多次時間檢測一次,預設30s
--timeout=DURATION :每次檢測逾時時長,預設30s
--start-period=DURATION :等待主程序啟動的時間,預設0s
--retries=N :檢測幾次失敗任務為false,預設3次           
0: success  :指令傳回值
1:unhealthy
2:reserved           
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1           
EXPOSE 80/tcp
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/           
  • SHELL:設定使用的shell,預設使用/bin/sh
  • STOPSIGNAL signal :設定使用docker stop指令停止容器時向主程序發的信号
  • ARG:定義Dockerfile變量,在docker build 傳值
ARG author="Dongfei"
LABEL maintainer="${author}"           
  • ONBUILD:用于在Dockerfile中定義一個觸發器,當其他Dockerfile将自己的鏡像當做基礎鏡像時執行;不能自我嵌套,不能執行MAINTAINER指令
ONBUILD ADD http://xxxx.bat           

八、Docker Registry

1、distribution:由docker官方提供

  • 安裝registry
# yum install docker-registry
# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml  #配置檔案
/usr/lib/systemd/system/docker-distribution.service  #服務腳本
/var/lib/registry  #鏡像存放目錄
# vim /etc/docker-distribution/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry  #目錄
http:
    addr: :5000  #端口
# systemctl start docker-distribution.service
# systemctl enable docker-distribution.service           
  • 修改docker daemon使用HTTP協定
# vim /etc/docker/daemon.json
{
    "insecure-registries": ["192.168.100.9:5000"]
}
# systemctl restart docker.service           
  • 推送docker鏡像
# docker tag quay.io/coreos/flannel:v0.11.0-amd64 192.168.100.9:5000/flannel:v0.11.0-amd64
# docker push 192.168.100.9:5000/flannel:v0.11.0-amd64
# ls /var/lib/registry/docker/registry/v2/repositories/           

2、harbor:由VMware公司在distribution二次開發

  1. yum install docker-ce-18.06.0.ce-3.el7 -y #docker-ce源提供
  2. yum install docker-compose -y #epel源提供
  3. 硬體:2C4G

下載下傳:https://github.com/goharbor/harbor/releases

~]# wget https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-offline-installer-v1.4.0.tgz
~]# tar xf harbor-offline-installer-v1.4.0.tgz -C /usr/local/
~]# cd /usr/local/harbor/
harbor]# vim harbor.cfg
hostname = harbor.com
ui_url_protocol = http
max_job_workers = 3  #cpu啟動幾個程序,小于等于總cpu核心數
customize_crt = on  #自定義證書,需要用戶端信任
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA  #管理URL,未定義
harbor_admin_password = Harbor12345  #admin登入密碼
harbor]# ./install.sh           
通路:http://192.168.100.11/harbor/sign-in,admin/Harbor12345
harbor]# docker-compose pause  #暫停服務,注意需要在/usr/local/harbor/目錄下執行
harbor]# docker-compose unpause  #繼續
harbor]# docker-compose stop  #停止
harbor]# docker-compose start  #啟動           

九、Docker資源限制

  • 記憶體資源
-m or --memory=  #限制記憶體大小 例: --memory=4m
--memory-swap *  #限制交換分區,必須先設定記憶體大小,可設定的值:正數,0,-1
    正數:swap為swap-memory
    0:swap為實體機mem*2
    -1:不限制
    注意:在容器内free看到的swap不具有展現出空間訓示的意義
--oom-kill-disable  #禁止容器被oom           
  • CPU資源
--cpu-shares  #CPU資源共享,按比例切分目前系統上的CPU資源
--cpuset-cpus=0,1  #限制在哪個CPU上
--cpus=  #配置設定幾個CPU           
  • 壓測
# docker pull lorel/docker-stress-ng
# docker run --name stress -it --rm -m 256m lorel/docker-stress-ng stress --vm 2
# docker top stress
# docker state
# docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng stress  --cpu 8
# docker run --name stress -it --rm --cpuset-cpus 0,2 lorel/docker-stress-ng stress  --cpu 8
# docker run --name stress -it --rm --cpu-shares 1024 lorel/docker-stress-ng stress  --cpu 8
# docker run --name stress2 -it --rm --cpu-shares 512 lorel/docker-stress-ng stress  --cpu 8           

++完結撒花++

繼續閱讀