docker資源限制和compose部署詳解
一、私有倉庫建立
docker pull registry
在docker 引擎終端設(shè)置
vim /etc/docker/daemon.json { "insecure-registries": ["ip網(wǎng)址:5000"], 添加 "registry-mirrors": ["https://05vz3np5.mirror.aliyuncs.com"] } systemctl restart docker.service docker create -it registry /bin/bash docker ps -a
會(huì)是異常狀態(tài)
docker start
宿主機(jī)的/data/registry自動(dòng)創(chuàng)建掛載容器中的/tmp/registry
docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry
更改標(biāo)記為ip網(wǎng)址:5000/nginx
docker tag nginx:latest ip網(wǎng)址:5000/nginx
上傳
docker push ip網(wǎng)址:5000/nginx The push refers to repository [ip網(wǎng)址:5000/nginx]
獲取私有倉庫列表
獲取registry的鏡像倉庫中的鏡像信息
curl -XGET http://ip網(wǎng)址:5000/v2/_catalog
測(cè)試私有倉庫下載
docker pull ip網(wǎng)址:5000/nginx
二、Cgroup 資源配置方法
docker 使用cgroup控制資源
respones request
Docker通過 Cgroup 來控制容器使用的資源配額,包括 CPU、內(nèi)存、磁盤三大方面, 基本覆蓋了常見的資源配額和使用量控制。
Cgroup 是 Control Groups 的縮寫,是Linux 內(nèi)核提供的一種可以限制、記錄、隔離進(jìn)程組所使用的物理資源(如 CPU、內(nèi)存、磁盤 IO 等等)的機(jī)制
07年谷歌,可以控制資源分配通過操作系統(tǒng)內(nèi)核,控制應(yīng)用程序使用內(nèi)存資源、cpu資源、 文件系統(tǒng)資源等等
cgroup是一種資源控制手段
也是容器隔離的6個(gè)名稱空間的一種實(shí)現(xiàn)手段
每個(gè)容器相當(dāng)于一個(gè)進(jìn)程
三、CPU使用率控制
cpu周期: 1s為一個(gè)周期的定律,參數(shù)值一般為100000 (CPU衡量單位是秒)。
假如需要給此容器分配cpu使用率的20%,則參數(shù)需要設(shè)置為20000,相當(dāng)于每個(gè)周期分配給這個(gè)容器0.2s。
cpu在一個(gè)時(shí)刻,只能給一個(gè)進(jìn)程占用。
使用 stress 工具測(cè)試 CPU 和內(nèi)存
使用 Dockerfile 來創(chuàng)建一個(gè)基于 Centos 的 stress 工具鏡像。
mkdir /opt/stress vim /opt/stress/Dockerfile FROM centos:7 RUN yum install -y wget RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo RUN yum install -y stress cd /opt/stress/ docker build -t centos:stress .使用如下命令創(chuàng)建容器,命令中的--cpu-shares 參數(shù)值不能保證可以獲得 1 個(gè) vcpu 或 者多少 GHz 的 CPU 資源,它僅是一個(gè)彈性的加權(quán)值。
docker run -itd --cpu-shares 100 centos:stress默認(rèn)情況下,每個(gè) Docker容器的CPU份額都是1024。單獨(dú)一個(gè)容器的份額是沒有意義的。只有在同時(shí)運(yùn)行多個(gè)容器時(shí),容器的 CPU 加權(quán)的效果才能體現(xiàn)出來。
兩個(gè)容器 A、B 的 CPU 份額分別為 1000 和 500,在CPU進(jìn)行時(shí)間片分配的時(shí)候,容器A比容器B多一倍的機(jī)會(huì)獲得 CPU 的時(shí)間片。
但分配的結(jié)果取決于當(dāng)時(shí)主機(jī)和其他容器的運(yùn)行狀態(tài), 實(shí)際上也無法保證容器 A一定能獲得CPU時(shí)間片。比如容器A的進(jìn)程一直是空閑的,那么容器B是可以獲取比容器A更多的CPU時(shí)間片的。極端情況下,例如主機(jī)上只運(yùn)行了一個(gè)容器,即使它的 CPU 份額只有 50,它也可以獨(dú)占整個(gè)主機(jī)的CPU資源。一個(gè)主機(jī)運(yùn)行一個(gè)容器,只運(yùn)行了一個(gè)應(yīng)用(容器也是虛擬化技術(shù) )
一個(gè)主機(jī)運(yùn)行一個(gè)應(yīng)用Cgroups 只在容器分配的資源緊缺時(shí),即在需要對(duì)容器使用的資源進(jìn)行限制時(shí),才會(huì)生效。因此,無法單純根據(jù)某個(gè)容器的CPU份額來確定有多少CPU資源分配給它,
資源分配 結(jié)果取決于同時(shí)運(yùn)行的其他容器的CPU分配和容器中進(jìn)程運(yùn)行情況。
可以通過 cpu share 可以設(shè)置容器使用 CPU 的優(yōu)先級(jí)/權(quán)重,比如啟動(dòng)了兩個(gè)容器及運(yùn)行查看 CPU 使用百分比。docker run -tid --name cpu512 --cpu-shares 512 centos:stress stress -c 10 容器產(chǎn)生10個(gè)子函數(shù)進(jìn)程 docker exec -it f4953c0d7e76 bash 進(jìn)入容器使用top查看cpu使用情況 再開啟一個(gè)容器做比較 docker run -tid --name cpu1024 --cpu-shares 1024 centos:stress stress -c 10 docker exec -it 5590c57d27b0 bash //進(jìn)容器使用top對(duì)比兩個(gè)容器的%CPU,比例是1:2 docker stats 查看資源使用
四、 CPU 周期限制
Docker 提供了--cpu-period、--cpu-quota 兩個(gè)參數(shù)控制容器可以分配到的 CPU 時(shí)鐘周期。
--cpu-period 是用來指定容器對(duì) CPU 的使用要在多長時(shí)間內(nèi)做一次重新分配。cd /sys/fs/cgroup/cpu/docker容器ID/cpu.cfs_quota_us宿主機(jī)怎么提供資源、怎么控制docker容器中的應(yīng)用的:
CPU→VCPU→以進(jìn)程的方式體現(xiàn)在workstation環(huán)境(docker環(huán)境中)→docker表現(xiàn)形式是容器→Vcpu以進(jìn)程的方式控制容器→容器中的應(yīng)用需要的是服務(wù)進(jìn)程支持→宿主機(jī)內(nèi)核中cpu可以被cgroup管理(通過分配資源手段)→linux 內(nèi)核中的cgroup可以控制管理docker 容器中的應(yīng)用。--cpu-quota 是用來指定在這個(gè)周期內(nèi),最多可以有多少時(shí)間用來跑這個(gè)容器。
與 --cpu-shares 不同的是,這種配置是指定一個(gè)絕對(duì)值,容器對(duì) CPU 資源的使用絕對(duì)不會(huì)超過配置的值。cpu-period 和 cpu-quota 的單位為微秒(μs)。cpu-period 的最小值為 1000 微秒, 最大值為 1 秒(10^6 μs),默認(rèn)值為 0.1 秒(100000 μs)。
cpu-quota 的值默認(rèn)為 -1, 表示不做控制。cpu-period 和 cpu-quota 參數(shù)一般聯(lián)合使用。redis 中,用來表示的永久 -1ttl teacher
-1
lrange teacher 0 -1容器進(jìn)程需要每 1 秒使用單個(gè) CPU 的 0.2 秒時(shí)間,可以將 cpu-period 設(shè)置 為 100000(即 1 秒),cpu-quota 設(shè)置為 20000(0.2 秒)。
當(dāng)然,在多核情況下,如果允許容器進(jìn)程完全占用兩個(gè) CPU,則可以將 cpu-period 設(shè)置為 10000(即 0.1 秒), cpu-quota 設(shè)置為 200000(0.2 秒)。
選項(xiàng) 描述 --pus= 指定容器可以使用多少可用CPU資源。例如,如果主機(jī)有兩個(gè)CPU,并且您設(shè)置了而Cpus ="1.5", 那么該容器將保證最多可以訪問一個(gè)半的CPU。這相當(dāng)于設(shè)置-cpu-period ="100000"和--cpu- quota ="150000"。在Docker 1.13和更高版本中可用。 --Cpu-period= 指定CPU CFS調(diào)度程序周期,該周期與--pu-quota-起使用。默認(rèn)為100000微妙,以微秒表示。 大多數(shù)用戶不會(huì)從默認(rèn)值更改此設(shè)置。如果您使用Docker 1.13或更高版本,請(qǐng)改用--cpus。 --Cpu-quota= 在容器上添加CPU CFS配額。每個(gè)--cpu-period允許CPU訪問的容器數(shù)微秒數(shù)。換句話說,cpu- quota/ cpu-period。如果您使用Docker 1.13或更高版本,請(qǐng)改用-cpuS。 --cpuset-cpus 限制容器可以使用的特定CPU或核心。如果您有多個(gè)CPU,則容器可以使用的逗號(hào)分隔列表或連字 符分隔的CPU范圍。第一個(gè)CPU編號(hào)為0.有效值可能為0-3 (使用第一,第二,第三和第四個(gè) CPU)或1,3 (使用第二個(gè)和第四個(gè)CPU)。 --Cpu-shares 將此標(biāo)志設(shè)置為大于或小于默認(rèn)值1024的值,以增加或減少容器的重量,并使其能夠訪問主機(jī) CPU周期的更大或更小比例。這僅在CPU周期受到限制時(shí)才會(huì)執(zhí)行。當(dāng)大量CPU周期可用時(shí),所有 容器都使用盡可能多的CPU。這樣,這是一個(gè)軟限制。 --cpu-shares不會(huì)阻 止容器在群集模式下進(jìn) 行調(diào)度。它優(yōu)先考慮容器CPU資源的可用CPU周期。它不保證或保留任何特定的CPU訪問權(quán)限。 查詢?nèi)萜鞯馁Y源限制參數(shù)docker run -tid --cpu-period 100000 --cpu-quota 200000 centos:stress docker exec -it 98d2aaa50019 bash
(1)在指定容器目錄中(2)使用docker inspect 容器ID/容器名cat /sys/fs/cgroup/cpu/docker/容器ID/cpu.cfs_period_us cat /sys/fs/cgroup/cpu/docker/容器ID/cpu.cfs_quota_us"CpuPeriod": "CpuQuota":
五、 CPU Core 控制
對(duì)多核 CPU 的服務(wù)器,Docker 還可以控制容器運(yùn)行使用哪些 CPU 內(nèi)核,即使用--cpuset-cpus 參數(shù)。
這對(duì)具有多 CPU 的服務(wù)器尤其有用,可以對(duì)需要高性能計(jì)算的容器進(jìn)行性能最優(yōu)的配置。docker run -tid --name cpu1 --cpuset-cpus 0-1 centos:stress執(zhí)行以上命令需要宿主機(jī)為雙核,表示創(chuàng)建的容器只能用 0、1兩個(gè)內(nèi)核。最終生成 的 cgroup 的 CPU 內(nèi)核配置
cat /sys/fs/cgroup/cpuset/docker/通過下面指令可以看到容器中進(jìn)程與 CPU 內(nèi)核的綁定關(guān)系,達(dá)到綁定 CPU 內(nèi)核的目的。
docker exec taskset -c -p 1 容器內(nèi)部第一個(gè)進(jìn)程號(hào)pid為1被綁定到指定CPU上運(yùn)行pid 1's current affinity list: 0,1創(chuàng)建容器時(shí) 直接使用參數(shù)指定資源限制
創(chuàng)建容器后,指定資源分配
修改宿主機(jī)對(duì)應(yīng)容器資源控制的文件
/sys/fs/cgroup/*
六、 CPU 配額控制參數(shù)的混合使用
通過 cpuset-cpus 參數(shù)指定容器 A 使用 CPU 內(nèi)核 0,容器 B 只是用 CPU 內(nèi)核 1。
在主機(jī)上只有這兩個(gè)容器使用對(duì)應(yīng) CPU 內(nèi)核的情況,它們各自占用全部的內(nèi)核資源,cpu-shares 沒有明顯效果。cpuset-cpus、cpuset-mems 參數(shù)只在多核、多內(nèi)存節(jié)點(diǎn)上的服務(wù)器上有效,并且必須與實(shí)際的物理配置匹配,否則也無法達(dá)到資源控制的目的。
在系統(tǒng)具有多個(gè) CPU 內(nèi)核的情況下,需要通過 cpuset-cpus 參數(shù)為設(shè)置容器 CPU 內(nèi)核才能方便地進(jìn)行測(cè)試。
宿主系統(tǒng)修改為4核心CPUdocker run -tid --name cpu3 --cpuset-cpus 1 --cpu-shares 512 centos:stress stress -c 1 docker exec -it 84598dfadd34 bash exit top 按1查看每個(gè)核心的占用 docker run -tid --name cpu4 --cpuset-cpus 3 --cpu-shares 1024 centos:stress stress -c 1 docker exec -it bash上面的 centos:stress 鏡像安裝了 stress 工具,用來測(cè)試 CPU 和內(nèi)存的負(fù)載。通過 在兩個(gè)容器上分別執(zhí)行 stress -c 1 命令,將會(huì)給系統(tǒng)一個(gè)隨機(jī)負(fù)載,產(chǎn)生 1 個(gè)進(jìn)程。這個(gè)進(jìn)程都反復(fù)不停的計(jì)算由 rand產(chǎn)生隨機(jī)數(shù)的平方根,直到資源耗盡。
觀察到宿主機(jī)上的 CPU 使用率,第三個(gè)內(nèi)核的使用率接近 100%, 并且一批進(jìn)程的 CPU 使用率明顯存在 2:1 的使用比例的對(duì)比。
七、 內(nèi)存限額
與操作系統(tǒng)類似,容器可使用的內(nèi)存包括兩部分:物理內(nèi)存和 Swap。
Docker 通過下面兩組參數(shù)來控制容器內(nèi)存的使用量。-m 或 --memory:設(shè)置內(nèi)存的使用限額,例如 100M、1024M。
--memory-swap:設(shè)置 內(nèi)存+swap 的使用限額。
執(zhí)行如下命令允許該容器最多使用 200M 的內(nèi)存和 300M 的 swap。
#單純做swap 和物理內(nèi)存的硬限制docker run -it -m 200M --memory-swap=300M centos:stress--vm 1:啟動(dòng) 1 個(gè)內(nèi)存工作線程。
--vm-bytes 280M:每個(gè)線程分配 280M 內(nèi)存。
默認(rèn)情況下,容器可以使用主機(jī)上的所有空閑內(nèi)存。
與 CPU 的 cgroups 配置類似, Docker 會(huì)自動(dòng)為容器在目錄 /sys/fs/cgroup/memory/docker/<容器的完整長 ID>
中創(chuàng)建相應(yīng) cgroup 配置文件如果讓工作線程分配的內(nèi)存超過 300M,分配的內(nèi)存超過限額,stress 線程報(bào)錯(cuò),容器 退出。
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 310M
八、Block IO 的限制
默認(rèn)情況下,所有容器能平等地讀寫磁盤,可以通過設(shè)置--blkio-weight 參數(shù)來改變 容器 block IO 的優(yōu)先級(jí)。
--blkio-weight 與 --cpu-shares 類似,設(shè)置的是相對(duì)權(quán)重值,默認(rèn)為 500。
在下面 的例子中,容器 A 讀寫磁盤的帶寬是容器 B 的兩倍。docker run -it --name container_A --blkio-weight 600 centos:stress cat /sys/fs/cgroup/blkio/blkio.weight docker run -it --name container_B --blkio-weight 300 centos:stress cat /sys/fs/cgroup/blkio/blkio.weight
九、 bps 和 iops 的限制
bps 是 byte per second,每秒讀寫的數(shù)據(jù)量。
iops 是 io per second,每秒 IO 的次數(shù)。
可通過以下參數(shù)控制容器的 bps 和 iops:--device-read-bps,限制讀某個(gè)設(shè)備的 bps。
--device-write-bps,限制寫某個(gè)設(shè)備的 bps。
--device-read-iops,限制讀某個(gè)設(shè)備的 iops。
--device-write-iops,限制寫某個(gè)設(shè)備的 iops。限制容器寫 /dev/sda 的速率為 5 MB/s。
docker run -it --device-write-bps /dev/sda:5MB centos:stress dd if=/dev/zero of=test bs=1M count=1024 oflag=direct 可以按ctrl+c中斷查看通過 dd 命令測(cè)試在容器中寫磁盤的速度。因?yàn)槿萜鞯奈募到y(tǒng)是在 host /dev/sda上的,在容器中寫文件相當(dāng)于對(duì) host /dev/sda 進(jìn)行寫操作。另外,oflag=direct 指定用 direct IO 方式寫文件,這樣 --device-write-bps 才能生效。
結(jié)果表明限速 5MB/s 左右。作為對(duì)比測(cè)試,如果不限速,結(jié)果如下。
docker run -it centos:stress dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
十、 構(gòu)建鏡像(docker build)時(shí)指定資源限制
build-arg=[] | 設(shè)置鏡像創(chuàng)建時(shí)的變量 |
cpu-shares | 設(shè)置 cpu 使用權(quán)重 |
cpu-period | 限制 CPU CFS周期 |
cpu-quota | 限制 CPU CFS配額 |
cpuset-cpus | 指定使用的CPU id |
cpuset-mems | 指定使用的內(nèi)存 id |
disable-content-trust | 忽略校驗(yàn),默認(rèn)開啟 |
-f | 指定要使用的Dockerfile路徑 |
force-rm | 設(shè)置鏡像過程中刪除中間容器 |
isolation | 使用容器隔離技術(shù) |
label=[] | 設(shè)置鏡像使用的元數(shù)據(jù) |
-m | 設(shè)置內(nèi)存最大值 |
memory-swap | 設(shè)置Swap的最大值為內(nèi)存+swap,"-1"表示不限swap |
no-cache | 創(chuàng)建鏡像的過程不使用緩存 |
pull | 嘗試去更新鏡像的新版本 |
quiet, -q | 安靜模式,成功后只輸出鏡像 ID |
rm | 設(shè)置鏡像成功后刪除中間容器 |
shm-size | 設(shè)置/dev/shm的大小,默認(rèn)值是64M |
ulimit | Ulimit配置 |
squash | 將 Dockerfile 中所有的操作壓縮為一層 |
tag, -t | 鏡像的名字及標(biāo)簽,通常 name:tag 或者 name 格式;可以在一次構(gòu)建中為一個(gè)鏡像設(shè)置多個(gè)標(biāo)簽。 |
network | 默認(rèn) default。在構(gòu)建期間設(shè)置RUN指令的網(wǎng)絡(luò)模式 |
1.資源限制的主要類型1)CPU 權(quán)重shares、quota、cpuset
2)磁盤 BPS、TPS限制,指定使用哪個(gè)磁盤、磁盤分區(qū)
3)內(nèi)存 -m -swap 內(nèi)存、交換分區(qū)
大部分做的是上限的限制
2.資源限制的幾種方式1)build 構(gòu)建鏡像時(shí),可以指定該鏡像的資源限制
2)run 將鏡像跑為容器的時(shí)候,可以指定容器的資源限制3)容器啟動(dòng)之后, 可以在宿主機(jī)對(duì)應(yīng)容器的目錄下。修改資源限制,然后重載
/sys/fs/cgroup/*(cpu、blk、mem)/docker/容器ID/→修改對(duì)應(yīng)的資源限制文件參數(shù)就可以3.資源限制的狀態(tài)查詢
1)docker inspect 鏡像ID/容器ID
2)直接查看宿主機(jī)對(duì)應(yīng)容器ID資源限制的文件
3)docker statscgroup 資源 docker 原理之一 ,namespaces 6個(gè)名稱空間
十一、 compose部署
Docker Compose配置常用字段
字段
描述
build dockerfile context
指定Dockerfile文件名構(gòu)建鏡像上下文路徑
image
指定鏡像
command
執(zhí)行命令,覆蓋默認(rèn)命令
container name
指定容器名稱,由于容器名稱是唯一的如果指定自定
義名稱,則無法scale
deploy
指定部署和運(yùn)行服務(wù)相關(guān)配置,只能在Swarm模式使用
environment
添加環(huán)境變量
networks
加入網(wǎng)絡(luò)
ports
暴露容器端口,與-p相同,但端口不能低于60
volumes
掛載宿主機(jī)路徑或命令卷
restart
重啟策略,默認(rèn)no,always,no-failure,unless-stoped
hostname
容器主機(jī)名
Docker Compose常用命令
字段
描述
build
重新構(gòu)建服務(wù)
ps
列出容器
up
創(chuàng)建和啟動(dòng)容器
exec
在容器里面執(zhí)行命令
scale
指定一個(gè)服務(wù)容器啟動(dòng)數(shù)量
top
顯示容器進(jìn)程
logs
查看容器輸出
down
刪除容器、網(wǎng)絡(luò)、數(shù)據(jù)卷和鏡像
stop/start/restart
停止/啟動(dòng)/重啟服務(wù)
環(huán)境部署所有主機(jī)安裝docker環(huán)境(內(nèi)容為docker基礎(chǔ))
yum install docker-ce -y下載compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose cp -p docker-compose /usr/local/bin/ chmod +x /usr/local/bin/docker-compose mkdir /root/compose_nginx tree ./ ./ ├── docker-compose.yml 創(chuàng)建模板腳本 ├── nginx ├── Dockerfile 創(chuàng)建容器腳本 ├── nginx-1.15.9.tar.gz 復(fù)制源碼包 └── wwwroot └── index.html 站點(diǎn)vim /root/compose_nginx/docker-compose.yml version: '3' services: nginx: hostname: nginx build: context: ./nginx dockerfile: Dockerfile ports: - 1216:80 - 1217:443 networks: - cluster volumes: - ./wwwroot:/usr/local/nginx/html networks: cluster:docker-compose -f docker-compose.yml up -ddocker 基礎(chǔ)操作/常規(guī)操作
1)image 容器的管理命令
2)dockerfile
3)docker 網(wǎng)絡(luò)
4)docker 私有倉庫
registry
harbordocker-compose→資源編排和管理手段 (docker swarm)
Harbor 服務(wù)
Harbor被部署為多個(gè)Docker 容器,因此可以部署在任何支持Docker 的Linux 發(fā)行版
上。(registry 為其核心組件)
Harbor比registry相比好處是: harbor 支持多種功能、圖形化界面管理、多用戶權(quán)限、角色管理機(jī)制、安全機(jī)制。
服務(wù)端主機(jī)需要安裝Python、 Docker 和Docker Compose。(web 環(huán)境支持的是PY語言,故需要安裝Python)。
1.下載Harbor 安裝程序wget http:// harbor.orientsoft.cn/habor-1.2.2/harborofline-installer-v1.2.2.tgz
2.配置Harbor 參數(shù)文件tar zxvf harbor oflie-installer-v1.2.2.tgz -C /usr/local/vim /us/local/harbor/harbor.cfg 第五行 hostname = 主機(jī)ip關(guān)于Harbor.cfg 配置文件中有兩類參數(shù):所需參數(shù)和可選參數(shù)
(1)參數(shù)所需參數(shù)這些參數(shù)需要在配置文件Harbor.cfg 中設(shè)置。
如果用戶更新它們并運(yùn)行install.sh 腳本重新安裝Harbor,參數(shù)將生效。
具體參數(shù)
①hostname:用于訪問用戶界面和reeister 服務(wù)。它應(yīng)該是目標(biāo)機(jī)器的IP 地址或完全限定
的域名(FQDN)。
②ui url _protocol: (http 或https, 默認(rèn)為http) 用于訪問UI和令牌/通知服務(wù)的協(xié)議。如
果公證處于啟用狀態(tài),則此參數(shù)必須為https。(身份驗(yàn)證時(shí)會(huì)向Mysql數(shù)據(jù)庫進(jìn)行比對(duì),
然后授予令牌)
③max_ job_workers: 鏡像復(fù)制作業(yè)線程。
④db_ password: 用于db_ auth的MySQL數(shù)據(jù)庫root用戶的密碼。
⑤customize_ crt:該屬性可設(shè)置為打開或關(guān)閉,默認(rèn)打開。打開此屬性時(shí),準(zhǔn)備腳本創(chuàng)建私鑰和根證書,用于生成/驗(yàn)證注冊(cè)表令牌。
當(dāng)由外部來源提供密鑰和根證書時(shí),將此屬性設(shè)置為off。
⑥ssl_cert: SSL 證書的路徑,僅當(dāng)協(xié)議設(shè)置為https 時(shí)才應(yīng)用。
⑦ssl cert_key: SSL 密鑰的路徑,僅當(dāng)協(xié)議設(shè)置為https 時(shí)才應(yīng)用。
⑧secretkey_ path:用于在復(fù)制策略中加密或解密遠(yuǎn)程register 密碼的密鑰路徑。
(2)可選參數(shù)這些參數(shù)對(duì)于更新是可選的,即用戶可以將其保留為默認(rèn)值,并在啟動(dòng)Harbor 后在Web UI上進(jìn)行更新。
如果進(jìn)入Harbor.cfg, 只會(huì)在第一次啟動(dòng) Harbor時(shí)生效,隨后對(duì)這些參數(shù)的更新,Harbor.cfg將被忽略。
注意:如果選擇通過UI設(shè)置這些參數(shù),請(qǐng)確保在啟動(dòng)Harbour后立即執(zhí)行此操作。具體來
說,必須在注冊(cè)或在Harbor 中創(chuàng)建任何新用戶之前設(shè)置所需的auth_mode。當(dāng)系統(tǒng)中有用戶時(shí)(除了默認(rèn)的admin 用戶),auth_mode 不能被修改。具體參數(shù)如下:
①Email: Harbor 需要該參數(shù)才能向用戶發(fā)送“密碼重置”電子郵件,并且只有在需要該功能
時(shí)才需要。
請(qǐng)注意,在默認(rèn)情況下SSL連接時(shí)沒有啟用。如果SMTP服務(wù)器需要SSL,但不支持STARTTLS,那么應(yīng)該通過設(shè)置啟用SSLemailssl=TRUE。
②harbour_admin_password: 管理員的初始密碼,只在Harbour第-次啟動(dòng)時(shí)生效。之后,此
設(shè)置將被忽略,并且應(yīng)UI中設(shè)置管理員的密碼。
請(qǐng)注意,默認(rèn)的用戶名/密碼是admin/Harbor12345 。
③auth mode:使用的認(rèn)證類型,默認(rèn)情況下,它是db_auth, 即憑據(jù)存儲(chǔ)在數(shù)據(jù)庫中。對(duì)于
LDAP身份驗(yàn)證(以文件形式驗(yàn)證),請(qǐng)將其設(shè)置為ldap_auth。
④self_registration: 啟用/禁用用戶注冊(cè)功能。禁用時(shí),新用戶只能由Admin 用戶創(chuàng)建,只有
管理員用戶可以在Harbour中創(chuàng)建新用戶。
注意:當(dāng)auth_mode設(shè)置為ldap_auth時(shí),自注冊(cè)功能將始終處于禁用狀態(tài),并且該標(biāo)志
被忽略。
⑤Token_ expiration: 由令牌服務(wù)創(chuàng)建的令牌的到期時(shí)間(分鐘),默認(rèn)為30分鐘。
project_creation. restriction: 用于控制哪些用戶有權(quán)創(chuàng)建項(xiàng)目的標(biāo)志。默認(rèn)情況下,每個(gè)人
都可以創(chuàng)建一個(gè)項(xiàng)目。
如果將其值設(shè)置為“adminonly",那么只有admin可以創(chuàng)建項(xiàng)目。
⑥verify_remote_cert: 打開或關(guān)閉,默認(rèn)打開。此標(biāo)志決定了當(dāng)Harbor與遠(yuǎn)程register 實(shí)例通信時(shí)是否驗(yàn)證SSL/TLS 證書。
將此屬性設(shè)置為off 將繞過SSL/TLS 驗(yàn)證,這在遠(yuǎn)程實(shí)例具有自簽名或不可信證書時(shí)經(jīng)常使用。
另外,默認(rèn)情況下,Harbor 將鏡像存儲(chǔ)在本地文件系統(tǒng)上。在生產(chǎn)環(huán)境中,可以考慮使用其他存儲(chǔ)后端而不是本地文件系統(tǒng),如S3、Openstack Swif、Ceph 等。但需要更新common/templates/egistry/config.yml 文件。
3.啟動(dòng)Harbor
sh /usr/local/harbor/install.sh
打開瀏覽器輸入主機(jī)ip即可訪問harbor
4.查看Harbor啟動(dòng)鏡像查看鏡像
docker images查看容器
docker ps -a cd /usr/local/harbor/ docker-compose ps此時(shí)可使用Docker 命令在本地通過127.0.0.1 來登錄和推送鏡像。默認(rèn)情況下,
Register服務(wù)器在端口80. 上偵聽。
登錄
docker login -u admin -P Harbor12345 http://127.0.0.1
下載鏡像進(jìn)行測(cè)試
docker pull cirros
鏡像打標(biāo)簽
docker tag cirros 127.0.0.1/myproject-kgcirros:v1
上傳鏡像到Harbor
docker push 127.0.0.1/myproject-kgc/cirros:v1
以上操作都是在Harbor 服務(wù)器本地操作。如果其他客戶端上傳鏡像到Harbor, 就會(huì)報(bào)
如下錯(cuò)誤。出現(xiàn)這問題的原因Docker Registry 交互默認(rèn)使用的是HTTPS,但是搭建私有鏡
像默認(rèn)使用的是HTTP 服務(wù),所以與私有鏡像交互時(shí)出現(xiàn)以下錯(cuò)誤。
docker login -u admin -P Harbor12345 http://主機(jī)ip 會(huì)報(bào)錯(cuò)解決
vim /us/ib/systemd/system/docker.service ExecStart=/us/bin/dockerd -H fd:// -insecure-registry 主機(jī)ip --containerd=/run/containerd/containerd.socksystemctl daemon-reload systemctl restart docker docker login -u admin -p Harbor12345 http://主機(jī)ip
十二、 consul部署
consul 注冊(cè)中心/注冊(cè)機(jī)
服務(wù)器nginx: Nginx 、Consul、 Consul-template
服務(wù)器docker: Docker-ce、registrator(自動(dòng)發(fā)現(xiàn)、注冊(cè)的組件)template 模板(更新)
1.consul服務(wù)器
registrator(自動(dòng)發(fā)現(xiàn))
后端每構(gòu)建出一個(gè)容器,會(huì)向registrator進(jìn)行注冊(cè),控制consul 完成更新操作,consul會(huì)觸發(fā)consul template模板進(jìn)行熱更新。
核心機(jī)制:consul :自動(dòng)發(fā)現(xiàn)、自動(dòng)更新,為容器提供服務(wù)(添加、刪除、生命周期輔助功能)。
mkdir /root/consul cp consul_0.9.2_linux_amd64.zip /root/consul cd /root/consul unzip consul_0.9.2_linux_amd64.zip mv consul /usr/bin consul agent \ -server \ server模式 -bootstrap \ 前端框架(node.js) -ui \ 可被訪問的web界面 -data-dir=/var/lib/consul-data \ -bind= \ -client=0.0.0.0 \ -node=consul-server01 &> /var/log/consul.log & consul agent \ -server \ -bootstrap \ -ui \ -data-dir=/var/lib/consul-data \ -bind= \ -client=0.0.0.0 \ -node=consul-server01 &> /var/log/consul.log &
2.通過httpd api 獲取集群信息
curl 127.0.0.1:8500/v1/status/peers 看集群server成員 curl 127.0.0.1:8500/v1/status/leader 集群 Raf leader curl 127.0.0.1:8500/v1/catalog/services 注冊(cè)的所有服務(wù) curl 127.0.0.1:8500/v1/catalog/nginx 查看 nginx 服務(wù)信息 curl 127.0.0.1:8500/v1/catalog/nodes 集群節(jié)點(diǎn)詳細(xì)信息
3.容器服務(wù)自動(dòng)加入consul集群
(1)安裝 Gliderlabs/Registrator
可檢查容器運(yùn)行狀態(tài)自動(dòng)注冊(cè),還可注銷 docker 容器的服務(wù) 到服務(wù)配置中心。
目前支持 Consul、Etcd 和 SkyDNS2。
執(zhí)行操作:docker run -d \ --name=registrator \ --net=host \ -v /var/run/docker.sock:/tmp/docker.sock \ --restart=always \ gliderlabs/registrator:latest \ -ip=ip網(wǎng)址 \ consul://ip網(wǎng)址:8500
(2)測(cè)試服務(wù)發(fā)現(xiàn)功能是否正常
docker run -itd -p:83:80 --name test-01 -h test01 nginx docker run -itd -p:84:80 --name test-02 -h test02 nginx docker run -itd -p:88:80 --name test-03 -h test03 httpd docker run -itd -p:89:80 --name test-04 -h test04 httpd
(3)驗(yàn)證 http 和 nginx 服務(wù)是否注冊(cè)到 consul
瀏覽器輸入 http://ip網(wǎng)址:8500,“單擊 NODES”,然后單擊 “consurl-server01”,會(huì)出現(xiàn) 5 個(gè)服務(wù).
在consul服務(wù)器上查看服務(wù)
(4)安裝 consul-templatecurl 127.0.0.1:8500/v1/catalog/servicesConsul-Template 是一個(gè)守護(hù)進(jìn)程,用于實(shí)時(shí)查詢 Consul 集群信息,并更新文件系統(tǒng) 上任意數(shù)量的指定模板,生成配置文件。更新完成以后,可以選擇運(yùn)行 shell 命令執(zhí)行更新 操作,重新加載 Nginx。Consul-Template ,可以查詢 Consul 中的服務(wù)目錄、Key、Key-values 等。
(5)準(zhǔn)備 template nginx 模板文件
這種強(qiáng)大的抽象功能和查詢語言模板可以使 Consul-Template 特別適合動(dòng)態(tài)的創(chuàng)建配置文件。
創(chuàng)建 Apache/Nginx Proxy Balancers、Haproxy Backends在consul上操作
vim /root/consul/nginx.ctmpl upstream http_backend { {{range service "nginx"}} server {{.Address}}:{{.Port}}; 此處引用的變量會(huì)指向后端的地址和端口(動(dòng)態(tài)變化) {{end}} } server { listen 85; server_name localhost ip網(wǎng)址; 反向代理的IP地址(前端展示的NG服務(wù)的IP) access_log /var/log/nginx/kgc.cn-access.log; index index.html index.php; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; 后端真實(shí)IP proxy_set_header Client-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 轉(zhuǎn)發(fā)地址 proxy_pass http://http_backend; } }
(6)編譯安裝nginx
(7)配置 nginxyum install gcc pcre-devel zlib-devel -y tar zxvf nginx-1.12.0.tar.gz -C /opt ./configure --prefix=/usr/local/nginx make && make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbinvim /usr/local/nginx/conf/nginx.conf http { include mime.types; 默認(rèn)存在的 include vhost/*.conf; 添加虛擬主機(jī)目錄(consul動(dòng)態(tài)生成的配置文件就會(huì)放在這里) default_type application/octet-stream;
創(chuàng)建虛擬主機(jī)目錄
mkdir /usr/local/nginx/conf/vhost
創(chuàng)建日志文件目錄
mkdir /var/log/nginx
啟動(dòng)nginx
usr/local/nginx/sbin/nginx
(8)配置并啟動(dòng) template
cp consul-template_0.19.3_linux_amd64.zip /root/ unzip consul-template_0.19.3_linux_amd64.zip mv consul-template /usr/bin/關(guān)聯(lián)nginx 虛擬目錄中的子配置文件操作
consul-template -consul-addr 192.168.226.130:8500 \ -template "/opt/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/benet.conf:/usr/local/nginx/sbin/nginx -s reload" \ --log-level=info
另外打開一個(gè)終端查看生成配置文件
cat /usr/local/nginx/conf/vhost/kgc.conf upstream http_backend { server ip網(wǎng)址:83; server iP網(wǎng)址:84; } server { listen 83; server_name localhost ip網(wǎng)址; access_log /var/log/nginx/kgc.cn-access.log; index index.html index.php; location / { proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Client-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://http_backend; } }
4.增加一個(gè)nginx容器節(jié)點(diǎn)
增加一個(gè) nginx 容器節(jié)點(diǎn),測(cè)試服務(wù)發(fā)現(xiàn)及配置更新功能
在registrator服務(wù)端注冊(cè)docker run -itd -p 85:80 --name test-05 -h test05 nginx查看三臺(tái)nginx容器日志,請(qǐng)求正常輪詢到各個(gè)容器節(jié)點(diǎn)上
docker logs -f test-01 docker logs -f test-02 docker logs -f test-05
總結(jié)
到此這篇關(guān)于docker資源限制和compose部署詳解的文章就介紹到這了,更多相關(guān)docker資源限制和compose內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker容器下配置jupyter notebook的操作
這篇文章主要介紹了docker容器下配置jupyter notebook的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03Docker開啟遠(yuǎn)程連接并實(shí)現(xiàn)安全通信詳解
這篇文章主要為大家介紹了Docker開啟遠(yuǎn)程連接并實(shí)現(xiàn)安全通信過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08docker部署nginx并且實(shí)現(xiàn)https的方法步驟
啟用HTTPS可以提高網(wǎng)站的安全性、可信度,同時(shí)符合法規(guī)要求,本文主要介紹了docker部署nginx并且實(shí)現(xiàn)https的方法步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07使用遠(yuǎn)程Docker進(jìn)行集成測(cè)試的環(huán)境搭建過程
使用docker可以幫助我們快速的搭建項(xiàng)目依賴環(huán)境,但是本地化的docker依賴,依然讓我們的代碼在測(cè)試時(shí),不夠純粹,對(duì)其各個(gè)運(yùn)行環(huán)境,都有本地docker安裝的要求2021-07-07Docker部署RabbitMQ的實(shí)現(xiàn)方法(圖文并茂)
本文詳細(xì)介紹了如何使用Docker部署RabbitMQ的步驟,包括拉取RabbitMQ鏡像,創(chuàng)建與授權(quán)文件夾,創(chuàng)建RabbitMQ容器,查看啟動(dòng)日志,訪問控制臺(tái)和登錄等,全程詳細(xì)的參數(shù)解釋和操作步驟,讓Docker部署RabbitMQ變得簡單易行2024-10-10利用docker-compsoe部署前后端分離的項(xiàng)目方法
這篇文章主要介紹了利用docker-compsoe部署前后端分離的項(xiàng)目方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08docker環(huán)境下分布式運(yùn)行jmeter的教程詳解
這篇文章主要介紹了docker環(huán)境下分布式運(yùn)行jmeter的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10