Docker容器技術(shù)-配置、部署與應(yīng)用-項(xiàng)目四(資源限制)_第1頁(yè)
Docker容器技術(shù)-配置、部署與應(yīng)用-項(xiàng)目四(資源限制)_第2頁(yè)
Docker容器技術(shù)-配置、部署與應(yīng)用-項(xiàng)目四(資源限制)_第3頁(yè)
Docker容器技術(shù)-配置、部署與應(yīng)用-項(xiàng)目四(資源限制)_第4頁(yè)
Docker容器技術(shù)-配置、部署與應(yīng)用-項(xiàng)目四(資源限制)_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Docker容器技術(shù)配置、部署與應(yīng)用工業(yè)和信息化“十三五”人才培養(yǎng)規(guī)劃教材項(xiàng)目四Docker容器與守護(hù)進(jìn)程運(yùn)維人民郵電出版社能力CAPACITY要求了解容器的高級(jí)配置,掌握相應(yīng)的配置方法。了解容器資源控制技術(shù),學(xué)會(huì)限制容器使用資源的操作。了解容器監(jiān)控知識(shí),掌握容器監(jiān)控的實(shí)施方法。了解容器日志知識(shí),掌握日志查看和配置方法。了解Docker對(duì)象,掌握通用的配置與管理方法。掌握Docker守護(hù)進(jìn)程的配置與管理方法。任務(wù)二限制容器的資源使用任務(wù)一Docker容器配置進(jìn)階任務(wù)三容器監(jiān)控與日志管理任務(wù)四配置Docker對(duì)象任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)一

Docker容器配置進(jìn)階任務(wù)說(shuō)明01OPTION02OPTION03OPTION04OPTION掌握容器的自動(dòng)重啟配置了解Docker的實(shí)時(shí)恢復(fù)功能,能夠讓容器保持持續(xù)運(yùn)行在一個(gè)容器中運(yùn)行多個(gè)服務(wù)了解容器健康檢查機(jī)制05OPTION了解容器運(yùn)行時(shí)如何覆蓋鏡像的默認(rèn)設(shè)置任務(wù)一

Docker容器配置進(jìn)階知識(shí)引入容器的自動(dòng)重啟Docker提供重啟策略控制容器退出時(shí)或Docker重啟時(shí)是否自動(dòng)啟動(dòng)該容器。重啟策略能夠確保關(guān)聯(lián)的多個(gè)容器按照正確的順序啟動(dòng)。Docker建議使用重啟策略,并避免使用進(jìn)程管理器啟動(dòng)容器。使用重啟策略時(shí)的注意事項(xiàng)重啟策略只在容器成功啟動(dòng)后才會(huì)生效。如果手動(dòng)停止一個(gè)容器,那么它的重啟策略會(huì)被忽略,直到Docker守護(hù)進(jìn)程重啟或容器手動(dòng)重啟。DockerSwarm服務(wù)的重啟策略采用不同的配置方式。重啟策略不同于dockerd命令的--live-restore選項(xiàng)。任務(wù)一

Docker容器配置進(jìn)階知識(shí)引入在Docker停止時(shí)保持容器繼續(xù)運(yùn)行啟用實(shí)時(shí)恢復(fù)功能Docker守護(hù)進(jìn)程配置文件中進(jìn)行設(shè)置{"live-restore":true}手動(dòng)啟動(dòng)dockerd進(jìn)程時(shí)指定--live-restore選項(xiàng)。升級(jí)期間的實(shí)時(shí)恢復(fù)重啟時(shí)的實(shí)時(shí)恢復(fù)實(shí)時(shí)恢復(fù)功能對(duì)運(yùn)行容器的影響

任務(wù)一

Docker容器配置進(jìn)階知識(shí)引入一個(gè)容器中運(yùn)行多個(gè)服務(wù)將所有命令放入包裝器腳本中,并提供測(cè)試和調(diào)試信息,使用CMD指令運(yùn)行包裝器腳本。如果有一個(gè)主進(jìn)程需要首先啟動(dòng)并保持運(yùn)行,但是臨時(shí)需要運(yùn)行一些其他進(jìn)程(可能與主進(jìn)程交互),可以使用bash腳本的作業(yè)控制實(shí)現(xiàn)。在容器中使用supervisord等進(jìn)程管理器。一個(gè)容器可以有多個(gè)進(jìn)程,但為了高效利用Docker,不要讓一個(gè)容器負(fù)責(zé)整個(gè)應(yīng)用程序的多個(gè)方面,而要通過(guò)用戶定義網(wǎng)絡(luò)和共享卷連接多個(gè)容器來(lái)實(shí)現(xiàn)應(yīng)用程序的多個(gè)方面。任務(wù)一

Docker容器配置進(jìn)階知識(shí)引入容器健康檢查機(jī)制在Dockerfile中使用HEALTHCHECK指令HEALTHCHECK[選項(xiàng)]CMD<命令>HEALTHCHECKNONE其中CMD指令后面的“命令”執(zhí)行完畢返回值表示容器的運(yùn)行狀況。0:成功。容器是健康且可用的。1:失敗。容器不健康,不能正常工作。2:保留值。暫時(shí)不要使用。在Dockerfile中HEALTHCHECK指令只可以出現(xiàn)一次,如果出現(xiàn)多次,則只有最后一次生效。一旦有一次健康檢查成功,Docker就會(huì)確認(rèn)容器為健康狀態(tài)。任務(wù)一

Docker容器配置進(jìn)階知識(shí)引入容器健康檢查機(jī)制啟動(dòng)容器時(shí)通過(guò)相應(yīng)選項(xiàng)實(shí)現(xiàn)健康檢查--health-cmd選項(xiàng)用于指定健康檢查命令對(duì)應(yīng)于Dockerfile中HEALTHCHECK指令的“命令”參數(shù)。--health-interval、--health-retries、--health-timeout和--health-start-period分別對(duì)應(yīng)于Dockerfile中HEALTHCHECK指令的--interval、--retries、--timeout和--start-period選項(xiàng)。--no-healthcheck選項(xiàng)用于禁用容器的任何HEALTHCHECK指令。任務(wù)一

Docker容器配置進(jìn)階知識(shí)引入運(yùn)行時(shí)選項(xiàng)覆蓋Dockerfile指令Dockerfile中的FROM、MAINTAINER、RUN和ADD指令在運(yùn)行時(shí)是不能被覆蓋的,其他的指令在執(zhí)行dockerrun(或dockercreate)命令時(shí)都會(huì)被相應(yīng)地覆蓋。從鏡像運(yùn)行一個(gè)容器時(shí),可以指定一個(gè)新的命令來(lái)覆蓋Dockerfile的CMD指令。如果鏡像的Dockerfile還聲明了ENTRYPOINT指令,則Dockerfile的CMD指令或容器運(yùn)行時(shí)指定的命令均作為參數(shù)追加到ENTRYPOINT指令中。任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)配置容器使用重啟策略

要為容器配置重啟策略,可以在執(zhí)行dockerrun或dockercreate命令啟動(dòng)或創(chuàng)建容器時(shí)使用--restart選項(xiàng)。選項(xiàng)值功能no容器退出時(shí)不要自動(dòng)重啟。這是默認(rèn)設(shè)置on-failure[:max-retries]只在容器以非0狀態(tài)碼退出時(shí)重啟。這種策略還可以使用max-retries參數(shù)指定Docker守護(hù)進(jìn)程嘗試重啟容器的次數(shù)always不管是什么退出狀態(tài)都始終重啟容器,Docker守護(hù)進(jìn)程將無(wú)限次地重啟容器。容器也會(huì)在Docker守護(hù)進(jìn)程啟動(dòng)時(shí)嘗試重啟,不管容器當(dāng)時(shí)的狀態(tài)如何unless-stopped不管是什么退出狀態(tài)都始終重啟容器,只是當(dāng)Docker守護(hù)進(jìn)程啟動(dòng)時(shí),如果容器之前已經(jīng)為停止?fàn)顟B(tài),則不會(huì)嘗試啟動(dòng)它任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)測(cè)試Docker的實(shí)時(shí)恢復(fù)功能

①編輯Docker守護(hù)進(jìn)程配置文件/etc/docker/daemon.json,啟用實(shí)時(shí)恢復(fù)功能。{"registry-mirrors":[""],"insecure-registries":["1:5000"],"live-restore":true}②重啟Docker守護(hù)進(jìn)程。③基于httpd鏡像創(chuàng)建一個(gè)運(yùn)行Apache服務(wù)的容器。[root@host1~]#dockerrun--rm-d-p8080:80httpd014ea3da05cd9e1293bc9fc4c95dbc30efeb4453755d2458f98982bff15dfb60④重新加載Docker守護(hù)進(jìn)程。⑤查看當(dāng)前容器,可以發(fā)現(xiàn)該容器并沒(méi)有停止,依然在運(yùn)行。任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)測(cè)試Docker的實(shí)時(shí)恢復(fù)功能

⑥使用kill命令結(jié)束進(jìn)程需要獲取進(jìn)程號(hào),先獲取dockerd的進(jìn)程號(hào)。[root@host1~]#ps-e|grepdockerd28002?00:00:00dockerd⑦向dockerd進(jìn)程發(fā)送SIGHUP信號(hào)。kill-SIGHUP28002⑧再次查看當(dāng)前容器,發(fā)現(xiàn)該容器在運(yùn)行。⑨訪問(wèn)該容器提供的Apache服務(wù),結(jié)果正常。[root@host1~]#curl:8080<html><body><h1>Itworks!</h1></body></html>⑩實(shí)驗(yàn)完畢,停止該容器后其自動(dòng)被刪除,恢復(fù)實(shí)驗(yàn)環(huán)境。任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)在容器中使用supervisord管理PHP和Nginx服務(wù)

①創(chuàng)建項(xiàng)目目錄。②在項(xiàng)目目錄下創(chuàng)建nginx子目錄,準(zhǔn)備N(xiāo)ginx服務(wù)的配置文件,包括nginx.conf和conf.d/site.conf。③在項(xiàng)目目錄下創(chuàng)建supervisor子目錄,準(zhǔn)備supervisord的配置文件(supervisord管理兩個(gè)進(jìn)程)。[supervisord]#設(shè)置是否在前臺(tái)啟動(dòng)(默認(rèn)是false,表示以守護(hù)進(jìn)程方式啟動(dòng))nodaemon=true#定義被管理的進(jìn)程[program:nginx]command=/usr/sbin/nginx[program:php7-fpm]command=/usr/local/sbin/php-fpm任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)在容器中使用supervisord管理PHP和Nginx服務(wù)

④在項(xiàng)目目錄下編寫(xiě)Dockerfile。FROMphp:7.3-fpmRUNapt-get-yupdate&&apt-get-yinstallnginxsupervisorRUNmkdir-p/var/log/supervisorCOPYnginx/etc/ngnixCOPYsupervisor/etc/supervisorWORKDIR/var/wwwRUNusermod-u1000www-dataEXPOSE80CMD["/usr/bin/supervisord"]⑤在項(xiàng)目目錄下基于Dockerfile構(gòu)建鏡像。⑥在項(xiàng)目目錄下執(zhí)行基于新建鏡像啟動(dòng)容器。⑦實(shí)際測(cè)試Web服務(wù)。任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)測(cè)試容器健康檢查功能

①為便于快速啟動(dòng)鏡像以檢測(cè)初始狀態(tài),先下載busybox鏡像。②一次執(zhí)行兩條命令。[root@host1~]#dockerrun--rm--nametest-health–d --health-cmd'stat/etc/passwd||exit1'--health-interval20s--health-retries1 busyboxsleep1d;dockerinspect--format'{{.State.Health.Status}}'test-health其中第1條命令基于busybox鏡像創(chuàng)建名為test-health的容器,并為該容器設(shè)置健康檢查選項(xiàng)。第2條命令用于獲取該容器的健康狀態(tài)信息。③一次執(zhí)行以下兩條命令。[root@host1~]#sleep20s;dockerinspect--format'{{.State.Health.Status}}'test-healthhealthy任務(wù)一

Docker鏡像的使用與操作任務(wù)實(shí)現(xiàn)測(cè)試容器健康檢查功能

④執(zhí)行命令在該容器中刪除/etc/passwd文件,以模擬產(chǎn)生健康問(wèn)題。[root@host1~]#dockerexectest-healthrm/etc/passwd⑤一次執(zhí)行以下兩條命令。[root@host1~]#sleep20s;dockerinspect--format'{{json.State.Health}}'test-health{"Status":"unhealthy","FailingStreak":1,"Log":[{"Start":"2020-01-29T20:26:50.924833037Z","End":"2020-01-29T20:26:51.089623705Z","ExitCode":0,"Output":"File:/etc/passwd\nSize:340\tBlocks:8IOBlock:4096regularfile\nDevice:29h/41d\tInode:102259649Links:1\nAccess:(0644/-rw-r--r--)Uid:(0/root)Gid:(0/root)\nAccess:2019-12-0121:39:47.000000000\nModify:2019-12-0121:39:47.000000000\nChange:2020-01-2919:34:17.000000000\n\n"},{"Start":"2020-01-29T20:27:11.094950958Z","End":"2020-01-29T20:27:11.303039454Z","ExitCode":1,"Output":"stat:can'tstat'/etc/passwd':Nosuchfileordirectory\n"}]}⑥查看該容器的當(dāng)前信息,也可以發(fā)現(xiàn)它處于不健康狀態(tài)。任務(wù)二限制容器的資源使用任務(wù)一Docker容器配置進(jìn)階任務(wù)三容器監(jiān)控與日志管理任務(wù)四配置Docker對(duì)象任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)二限制容器的資源使用任務(wù)說(shuō)明01OPTION02OPTION03OPTION04OPTION理解容器資源限制的實(shí)現(xiàn)機(jī)制熟悉容器的內(nèi)存限制操作熟悉容器的CPU限制操作熟悉容器的I/O資源限制操作05OPTION掌握容器配置的動(dòng)態(tài)更改方法任務(wù)二限制容器的資源使用知識(shí)引入容器所用內(nèi)存資源的限制用戶內(nèi)存限制容器的用戶內(nèi)存限制設(shè)置涉及兩個(gè)選項(xiàng)。-m(--memory):設(shè)置容器可用的最大內(nèi)存。該值最低為4MB。--memory-swap:允許容器置入磁盤(pán)交換空間中的內(nèi)存大小。Docker可以提供以下4種方式設(shè)置容器的用戶內(nèi)存使用。①對(duì)容器內(nèi)存使用無(wú)限制。②設(shè)置內(nèi)存限制并取消交換空間內(nèi)存限制。dockerrun-it-m300M--memory-swap-1ubuntu/bin/bash③只設(shè)置內(nèi)存限制。dockerrun-it-m300Mubuntu/bin/bash④同時(shí)設(shè)置內(nèi)存和交換空間。dockerrun-it-m300M--memory-swap1Gubuntu/bin/bash任務(wù)二限制容器的資源使用知識(shí)引入容器所用內(nèi)存資源的限制內(nèi)核內(nèi)存限制dockerrun-it-m500M--kernel-memory50Mubuntu/bin/bashdockerrun-it--kernel-memory50Mubuntu/bin/bash設(shè)置內(nèi)存預(yù)留實(shí)現(xiàn)軟限制使用--memory-reservation選項(xiàng)設(shè)置內(nèi)存預(yù)留。內(nèi)存預(yù)留值應(yīng)當(dāng)始終低于硬限制,否則硬限制會(huì)優(yōu)先觸發(fā)。將內(nèi)存預(yù)留值設(shè)置為0表示不作限制。作為一個(gè)軟限制功能,內(nèi)存預(yù)留并不能保證不會(huì)超過(guò)限制。主要目的是確保當(dāng)內(nèi)存爭(zhēng)用嚴(yán)重時(shí),內(nèi)存就按預(yù)留設(shè)置進(jìn)行分配。示例:限制內(nèi)存為500MB,內(nèi)存預(yù)留值(軟限制)為200MB。dockerrun-it-m500M--memory-reservation200Mubuntu/bin/bash示例:設(shè)置內(nèi)存軟限制為1GB,沒(méi)有設(shè)置內(nèi)存硬限制。dockerrun-it--memory-reservation1Gubuntu/bin/bash任務(wù)二限制容器的資源使用知識(shí)引入容器所用塊I/O帶寬的限制設(shè)置塊I/O權(quán)重使用--bokio-weight選項(xiàng)設(shè)置一個(gè)容器相對(duì)于所有其他正在運(yùn)行的容器的塊I/O帶寬權(quán)重。限制設(shè)備讀寫(xiě)速率使用--device-read-bps選項(xiàng)限制指定設(shè)備的讀取速率,即每秒讀取的字節(jié)數(shù)。使用--device-write-bps選項(xiàng)限制指定設(shè)備的寫(xiě)入速率。使用--device-read-iops和--device-write-iops選項(xiàng)限制指定設(shè)備的讀取和寫(xiě)入速率,用每秒I/O次數(shù)表示。任務(wù)二限制容器的資源使用知識(shí)引入資源限制的實(shí)現(xiàn)機(jī)制對(duì)容器使用的內(nèi)存、CPU和塊I/O帶寬資源的限制具體是由控制組的相應(yīng)子系統(tǒng)來(lái)實(shí)現(xiàn)的。memory子系統(tǒng)設(shè)置控制組中的任務(wù)所使用的內(nèi)存限制。cpu子系統(tǒng)通過(guò)調(diào)度程序提供對(duì)CPU的控制組任務(wù)的訪問(wèn)。blkio子系統(tǒng)為塊設(shè)備(如磁盤(pán)、固態(tài)硬盤(pán)、USB等)設(shè)置輸入和輸出限制。在dockerrun命令中使用--cpu-shares、--memory、--device-read-bps等選項(xiàng)實(shí)際上就是在配置控制組,相關(guān)的配置文件保存在/sys/fs/cgroup目錄中。任務(wù)二限制容器的資源使用任務(wù)實(shí)現(xiàn)驗(yàn)證分析容器資源限制的實(shí)現(xiàn)機(jī)制①啟動(dòng)一個(gè)容器,設(shè)置內(nèi)存限額為300MB,CPU權(quán)重為512。[root@host1~]#dockerrun--rm-d-p8080:80-m300M--cpu-shares=512httpd2a249f2c4321c0c125052e8e777bf6bd0b3d2bf321dbbba62458906caa62d889②查看/sys/fs/cgroup/cpu/docker目錄,發(fā)現(xiàn)Linux會(huì)為每個(gè)正在運(yùn)行的容器創(chuàng)建一個(gè)Cgroup目錄,以容器ID命名。③進(jìn)一步查看容器子目錄,會(huì)發(fā)現(xiàn)每個(gè)容器的子目錄中都包含所有與CPU相關(guān)的Cgroup配置。④查看其中cpu.shares文件的內(nèi)容,發(fā)現(xiàn)它保存的就是--cpu-shares選項(xiàng)的配置。[root@host1~]#cat/sys/fs/cgroup/cpu/docker/2a249f2c4321c0c125052e8e777bf6bd0b3d2bf321dbbba62458906caa62d889/cpu.shares512⑤采用類似的方法,查看/sys/fs/cgroup/memory/docker目錄中的內(nèi)存Cgroup配置。任務(wù)二限制容器的資源使用任務(wù)實(shí)現(xiàn)動(dòng)態(tài)更改容器的資源限制Docker提供dockerupdate命令動(dòng)態(tài)地更新容器配置,主要目的是防止容器在Docker主機(jī)上使用太多的資源,即修改容器的運(yùn)行時(shí)資源限制。dockerupdate[選項(xiàng)]容器[容器…]其選項(xiàng)包括--blkio-weight、--cpu-period、--cpu-quota、--cpu-rt-period(以μs為單位限制CPU實(shí)時(shí)周期)、--cpu-rt-runtime(以μs為單位限制CPU實(shí)時(shí)運(yùn)行時(shí)間)、--cpu-shares、--cpuset-cpus、--cpuset-mems、--kernel-memory、--memory、-m、--memory-reservation、--memory-swap和--restart。任務(wù)二限制容器的資源使用任務(wù)一Docker容器配置進(jìn)階任務(wù)三容器監(jiān)控與日志管理任務(wù)四配置Docker對(duì)象任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)三容器監(jiān)控與日志管理任務(wù)說(shuō)明01OPTION02OPTION熟悉容器監(jiān)控工具及其使用方法熟悉容器日志工具及其使用方法知識(shí)引入Docker監(jiān)控工具Docker自帶的監(jiān)控命令:dockerps、dockertop和dockerstatscAdvisor:用于分析正在運(yùn)行的容器的資源占用情況和性能指標(biāo),是具有圖形界面、最易于入門(mén)的Docker容器監(jiān)控工具。WeaveScope:開(kāi)源的故障診斷與監(jiān)控工具,除了用于Docker外,還可以用于Kubernetes集群。WeaveScope會(huì)自動(dòng)生成容器之間的關(guān)系圖,便于管理員直觀地以可視化的方式監(jiān)控容器化和微服務(wù)化的應(yīng)用。WeaveScope能夠進(jìn)行跨主機(jī)監(jiān)控,并且消耗的資源非常少。任務(wù)三容器監(jiān)控與日志管理知識(shí)引入容器日志工具dockerlogDocker自帶的dockerlogs命令輸出正在運(yùn)行的容器的日志信息,而dockerservicelogs命令顯示服務(wù)中的所有容器的日志信息。日志信息和格式取決于容器的終端命令。默認(rèn)情況下,dockerlogs顯示命令的STDOUT和STDERR流。dockerlogs命令可能不會(huì)顯示有用信息的兩種情形。如果使用將日志發(fā)送到文件、外部主機(jī)、數(shù)據(jù)庫(kù)或另外一個(gè)后端日志系統(tǒng)的日志驅(qū)動(dòng),則dockerlogs命令不會(huì)顯示有用信息,這時(shí)可以通過(guò)其他方式處理日志。如果鏡像運(yùn)行的是Web服務(wù)器或數(shù)據(jù)庫(kù)等非交互式進(jìn)程,那么應(yīng)用程序可能會(huì)將輸出發(fā)送到日志文件而不是STDOUT和STDERR中。任務(wù)三容器監(jiān)控與日志管理知識(shí)引入第三方日志工具ELK日志系統(tǒng)Elasticsearch是分布式搜索引擎Logstash可以對(duì)日志進(jìn)行收集和分析,并將其存儲(chǔ)下來(lái)供以后使用Kibana可以為L(zhǎng)ogstash和Elasticsearch提供日志分析Web界面部署ELK日志系統(tǒng)之后,通常將日志數(shù)據(jù)傳輸?shù)街虚g層,然后由Logstash從中獲取。Logspout將來(lái)自某個(gè)主機(jī)上的所有容器的所有日志匯集到所需的任何目標(biāo)中。任務(wù)三容器監(jiān)控與日志管理知識(shí)引入容器日志驅(qū)動(dòng)任務(wù)三容器監(jiān)控與日志管理選項(xiàng)值說(shuō)明none禁用容器日志,dockerlogs命令不會(huì)輸出任何日志信息json-fileDocker默認(rèn)的日志驅(qū)動(dòng)。該驅(qū)動(dòng)將日志保存在JSON文件中,Docker負(fù)責(zé)格式化其內(nèi)容并輸出到STDOUT和STDERRsyslog將日志信息寫(xiě)入syslog日志系統(tǒng),syslog守護(hù)進(jìn)程必須在主機(jī)上運(yùn)行journald將日志信息寫(xiě)入journald日志系統(tǒng),journald守護(hù)進(jìn)程必須在主機(jī)上運(yùn)行g(shù)elf將日志信息寫(xiě)入像Graylog或Logstash這樣的GELF(GraylogExtendedLogFormat)終端fluentd將日志信息寫(xiě)入fluentd,fluentd守護(hù)進(jìn)程必須在主機(jī)上運(yùn)行splunk將日志信息寫(xiě)入使用HTTP事件搜集器的splunk任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)查看容器中運(yùn)行的進(jìn)程的信息使用dockertop命令查看容器中正在運(yùn)行的進(jìn)程的信息dockertop容器[ps選項(xiàng)]示例[root@host1~]#dockerrun--rm-d--nameredisredis9f7fa564a26dc336585bb8702ec7a888b67ffb7205ba244f40ae359b92445fc1[root@host1~]#dockertopredisUID PID PPID C STIME

TTY TIME CMDpolkitd 20961 20944 0 13:36

? 00:00:00 redis-server*:6379任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)查看容器的資源使用情況用dockerstats命令實(shí)時(shí)查看容器的系統(tǒng)資源使用情況dockerstats[選項(xiàng)][容器…]示例:執(zhí)行dockerstats命令顯示正在運(yùn)行的容器的資源使用情況CONTAINERID NAME CPU% MEMUSAGE/LIMITMEM% NETIO BLOCKIO PIDS820dca7cf322 myweb 0.00% 8.438MiB/3.683GiB 0.22% 1.06kB/0B 11.8MB/0B 829f7fa564a26d redis 0.22% 8.375MiB/3.683GiB 0.22% 3.12kB/0B 31.9MB/0B 4任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器啟動(dòng)兩個(gè)容器用于測(cè)試[root@host1~]#dockerrun--rm-d--nameredisredis9f7fa564a26dc336585bb8702ec7a888b67ffb7205ba244f40ae359b92445fc1[root@host1~]#dockerrun--rm-d-p80:80--namemywebhttpd820dca7cf32247da3ab9e50273b7e9fe16447fc5180a71ebeb8589e23ad00a30創(chuàng)建并啟動(dòng)cAdvisor容器dockerrun--privileged\--volume/:/rootfs:ro--volume/var/run:/var/run:rw\--volume/sys:/sys:ro--volume/var/lib/docker/:/var/lib/docker:ro\--publish8080:8080--detach--namecadvisorgoogle/cadvisor:latest任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器訪問(wèn)cAdvisor監(jiān)控服務(wù)顯示主機(jī)監(jiān)控信息任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器訪問(wèn)cAdvisor監(jiān)控服務(wù)DockerContainers界面任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器訪問(wèn)cAdvisor監(jiān)控服務(wù)容器的監(jiān)控信息任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器cAdvisor配置--storage_duration:歷史數(shù)據(jù)保存的時(shí)間,默認(rèn)為2min,即只保存最近2min的數(shù)據(jù)。--allow_dynamic_housekeeping:控制cAdvisor如何和何時(shí)執(zhí)行周期性的容器狀態(tài)收集工作。--global_housekeeping_interval:設(shè)置檢測(cè)是否有新容器的時(shí)間周期。--housekeeping_interval:統(tǒng)計(jì)每個(gè)容器數(shù)據(jù)的時(shí)間周期,默認(rèn)每1s取一次數(shù)據(jù),選取統(tǒng)計(jì)到的最近的60個(gè)數(shù)據(jù)。任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用WeaveScope監(jiān)控容器WeaveScope主要功能實(shí)時(shí)了解容器狀態(tài)。提供內(nèi)部細(xì)節(jié)與深度鏈接。支持容器的交互與管理。通過(guò)插件進(jìn)行擴(kuò)展與定制。任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用WeaveScope監(jiān)控容器安裝WeaveScope①下載WeaveScope的二進(jìn)制安裝腳本文件。curl-Lgit.io/scope-o/usr/local/bin/scope②賦予該安裝腳本可執(zhí)行權(quán)限。chmoda+x/usr/local/bin/scope③從DockerHub中下載WeaveScope鏡像并啟動(dòng)容器。[root@host1~]#scopelaunch……ScopeprobestartedWeaveScopeislisteningatthefollowingURL(s):#WeaveScope偵聽(tīng)的地址和端口*1:4040/*:4040/任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用WeaveScope監(jiān)控容器安裝WeaveScope④啟動(dòng)兩個(gè)容器準(zhǔn)備進(jìn)行測(cè)試。⑤使用瀏覽器訪問(wèn)WeaveScope界面任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用WeaveScope監(jiān)控容器熟悉WeaveScope操作界面任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器監(jiān)控容器任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用cAdvisor監(jiān)控容器監(jiān)控主機(jī)任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用dockerlogs命令查看容器日志dockerlogs命令專門(mén)用于查看容器的日志dockerlogs[選項(xiàng)]容器示例[root@host1~]#dockerlogs-fredis1:C09Jan202013:36:22.241#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo1:C09Jan202013:36:22.241#Redisversion=5.0.6,bits=64,commit=00000000,modified=0,pid=1,juststarted……任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)配置日志驅(qū)動(dòng)配置默認(rèn)的日志驅(qū)動(dòng)將daemon.json文件中的log-driver值設(shè)為日志驅(qū)動(dòng)名稱。{"log-driver":"json-file","log-opts":{"labels":"production_status","env":"os,customer"}}配置容器的日志驅(qū)動(dòng)在啟動(dòng)容器時(shí),可以通過(guò)--log-driver選項(xiàng)將其配置為與Docker守護(hù)進(jìn)程使用不同的日志驅(qū)動(dòng)。dockerrun--rm-d--log-drivernone--nameredisredis任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)容器日志清理清理正在運(yùn)行的容器日志的shell腳本#!/bin/shlogs=$(find/var/lib/docker/containers/-name*-json.log)forlogin$logsdoecho"cleanlogs:$log"cat/dev/null>$logdone在daemon.json配置文件中通過(guò)log-opts選項(xiàng)來(lái)限制日志大小的上限"log-driver":"json-file","log-opts":{"max-size":"500m","max-file":"2"}任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)將容器的日志重定向到Linux日志系統(tǒng)將容器日志記錄到syslog打開(kāi)一個(gè)終端窗口,使用tail工具實(shí)時(shí)監(jiān)控系統(tǒng)日志文件/var/log/messages。[root@host1~]#tail-f/var/log/messages打開(kāi)另一個(gè)終端窗口,執(zhí)行以下操作,將該容器的日志記錄到syslog日志文件。[root@host1~]#dockerrun--rm-d--log-driversyslog--nameredisredisd09dcb56347cda408b269ae9fc75cfaea2531286d39bc87f2631a0d40f398f9將容器日志記錄到j(luò)ournald選擇journald作為日志驅(qū)動(dòng)可將日志定向輸出到systemd日志系統(tǒng)中,例如:dockerrun--rm-d--log-driverjournald--nameredisredis……任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用Logspout收集所有容器的日志將所有容器的輸出路由到遠(yuǎn)程syslog修改配置文件/etc/rsyslog.conf,從中找到以下兩行,并將行首的“#”字符刪除(去注釋)。$ModLoadimudp$UDPServerRun514啟動(dòng)logspout容器,將日志轉(zhuǎn)發(fā)到Docker主機(jī)上的syslog服務(wù)中。[root@host1~]#dockerrun--name="logspout"--volume=/var/run/docker.sock:/var/run/docker.sockgliderlabs/logspoutsyslog+udp://1:514打開(kāi)一個(gè)終端窗口,使用tail工具監(jiān)控系統(tǒng)日志文件/var/log/messages。tail-f/var/log/messages打開(kāi)另一個(gè)終端窗口,啟動(dòng)一個(gè)redis容器。dockerrun--rm-d--nameredisredis任務(wù)三容器監(jiān)控與日志管理任務(wù)實(shí)現(xiàn)使用Logspout收集所有容器的日志通過(guò)HTTP查看Logspout收集的日志使用Logspout的HTTP流模塊,實(shí)時(shí)查看由它聚合的本地日志。[root@host1~]#dockerrun-d--name="logspout"--volume=/var/run/docker.sock:/var/run/docker.sock--publish=:8000:80gliderlabs/logspout使用curl觀察容器的日志流。[root@host1~]#curl:8000/logs打開(kāi)另一個(gè)終端窗口,啟動(dòng)redis容器,切回前面的終端窗口,會(huì)發(fā)現(xiàn)關(guān)于redis容器啟動(dòng)的日志流。[root@host1~]#curl:8000/logsredis|1:C09Jan202021:28:32.726#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Ooredis|1:C09Jan202021:28:32.726#Redisversion=5.0.6,bits=64,commit=00000000,modified=0,pid=1,juststarted……任務(wù)二限制容器的資源使用任務(wù)一Docker容器配置進(jìn)階任務(wù)三容器監(jiān)控與日志管理任務(wù)四配置Docker對(duì)象任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)四配置Docker對(duì)象任務(wù)說(shuō)明01OPTION02OPTION03OPTION了解Docker對(duì)象的標(biāo)記學(xué)會(huì)刪除所有不用的Docker對(duì)象了解格式化命令和日志的輸出知識(shí)引入Docker對(duì)象的標(biāo)記標(biāo)記是一種將元數(shù)據(jù)應(yīng)用于Docker對(duì)象的機(jī)制。標(biāo)記的形式是鍵值對(duì),以字符串的形式存儲(chǔ)。標(biāo)記的鍵是鍵值對(duì)左邊的元素。標(biāo)記的值可以包含能表示為字符串的任何數(shù)據(jù)類型,包括但不限于JSON、XML、CSV或YAML。任務(wù)四配置Docker對(duì)象知識(shí)引入格式化命令和日志的輸出Docker使用Go模板管理某些命令和日志驅(qū)動(dòng)的輸出格式。使用dockerinspect命令時(shí)可通過(guò)--format選項(xiàng)控制輸出格式。使用join函數(shù)將一組字符串進(jìn)行連接以創(chuàng)建單個(gè)字符串。使用json函數(shù)將元素編碼為JSON字符串。使用lower函數(shù)將字符串轉(zhuǎn)為小寫(xiě)。使用split函數(shù)將字符串切分為由分隔符分隔的字符串列表。使用title函數(shù)將字符串的首字母轉(zhuǎn)為大寫(xiě)。使用upper函數(shù)將字符串轉(zhuǎn)為大寫(xiě)。使用println函數(shù)使輸出時(shí)每個(gè)值占一行。任務(wù)四配置Docker對(duì)象知識(shí)引入管理Docker對(duì)象的標(biāo)記支持標(biāo)記的每種類型的Docker對(duì)象都具有添加、管理和使用標(biāo)記的機(jī)制。鏡像、容器、本地守護(hù)進(jìn)程、卷和網(wǎng)絡(luò)上的標(biāo)記在對(duì)象的生命周期內(nèi)是靜態(tài)的,必須要重新創(chuàng)建對(duì)象才能改變這些標(biāo)記。Swarm集群節(jié)點(diǎn)和服務(wù)上的標(biāo)記則可以動(dòng)態(tài)更新。示例:為容器加上標(biāo)記。dockerrun--rm-d--labeltest-redis--nameredisredis然后按標(biāo)記過(guò)濾容器列表。dockerps--filterlabel=test-redis任務(wù)四配置Docker對(duì)象知識(shí)引入刪除不用的Docker對(duì)象dockersystemprune命令是刪除鏡像、容器和網(wǎng)絡(luò)的捷徑[root@host1~]#dockersystempruneWARNING!Thiswillremove:-allstoppedcontainers #所有停止的容器

-allnetworksnotusedbyatleastonecontainer #未被任何容器使用的網(wǎng)絡(luò)

-alldanglingimages #所有虛懸的鏡像

-allbuildcache #所有構(gòu)建緩存Areyousureyouwanttocontinue?[y/N]y #鍵入y確認(rèn)執(zhí)行這一系列操作為dockersystemprune命令明確指定--volumes選項(xiàng)才會(huì)刪除卷dockersystemprune--volumes。任務(wù)四配置Docker對(duì)象任務(wù)二限制容器的資源使用任務(wù)一Docker容器配置進(jìn)階任務(wù)三容器監(jiān)控與日志管理任務(wù)四配置Docker對(duì)象任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)說(shuō)明01OPTION02OPTION03OPTION了解Docker守護(hù)進(jìn)程的啟動(dòng)方式了解Docker守護(hù)進(jìn)程的配置方式排查Docker守護(hù)進(jìn)程故障知識(shí)引入Docker守護(hù)進(jìn)程的啟動(dòng)采用典型的Docker安裝,Docker守護(hù)進(jìn)程由系統(tǒng)工具啟動(dòng),而不是由用戶手動(dòng)啟動(dòng)。啟動(dòng)Docker的命令取決于操作系統(tǒng)。以CentOS7平臺(tái)為例,Docker安裝之后需執(zhí)行以下命令啟動(dòng)Docker。systemctlstartdocker啟動(dòng)之后,可以重啟或停止Docker。systemctlrestartdockersystemctlstopdocker可以使用dockerd命令手動(dòng)啟動(dòng)守護(hù)進(jìn)程。任務(wù)五配置和管理Docker守護(hù)進(jìn)程知識(shí)引入Docker守護(hù)進(jìn)程的配置方式使用JSON配置文件{"debug":true,"tls":true,"tlscert":"/var/docker/server.pem","tlskey":"/var/docker/serverkey.pem","hosts":["tcp://3:2376"]}任務(wù)五配置和管理Docker守護(hù)進(jìn)程知識(shí)引入Docker守護(hù)進(jìn)程的配置方式使用選項(xiàng)手動(dòng)啟動(dòng)Docker守護(hù)進(jìn)程dockerd--debug\--tls=true\--tlscert=/var/docker/server.pem\--tlskey=/var/docker/serverkey.pem\--hosttcp://3:2376任務(wù)五配置和管理Docker守護(hù)進(jìn)程知識(shí)引入解決daemon.json文件和啟動(dòng)腳本之間的沖突如果daemon.json配置文件定義有選項(xiàng),在運(yùn)行dockerd命令或啟動(dòng)腳本時(shí)又使用相同的選項(xiàng),則這些選項(xiàng)會(huì)產(chǎn)生沖突。需要調(diào)整相關(guān)選項(xiàng)或daemon.json文件來(lái)解決沖突。如果使用操作系統(tǒng)本身的初始化腳本啟動(dòng)Docker守護(hù)進(jìn)程,則可能需要使用該操作系統(tǒng)的特有方式來(lái)覆蓋這些腳本中的默認(rèn)值。任務(wù)五配置和管理Docker守護(hù)進(jìn)程知識(shí)引入Docker守護(hù)進(jìn)程目錄Docker守護(hù)進(jìn)程將所有數(shù)據(jù)保存在一個(gè)目錄中,用來(lái)跟蹤與Docker有關(guān)的一切對(duì)象,包括容器、鏡像、卷、服務(wù)定義和機(jī)密數(shù)據(jù)。默認(rèn)情況下,在Linux系統(tǒng)上該目錄是/var/lib/docker,在Windows系統(tǒng)上是C:\ProgramData\docker。可以使用data-root配置選項(xiàng)將Docker守護(hù)進(jìn)程配置為使用不同的目錄。Docker守護(hù)進(jìn)程的狀態(tài)保存在該目錄中,確保為每個(gè)守護(hù)進(jìn)程使用專用的目錄。任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)實(shí)現(xiàn)檢查Docker是否在運(yùn)行

檢查Docker是否在運(yùn)行,與操作系統(tǒng)無(wú)關(guān)的一種方式是直接使用dockerinfo命令。使用操作系統(tǒng)提供的工具,如systemctlis-activedocker、systemctlstatusdocker或servicedockerstatus。使用ps或top之類的Linux命令在進(jìn)程列表中檢查dockerd進(jìn)程。任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)實(shí)現(xiàn)從Docker守護(hù)進(jìn)程獲取實(shí)時(shí)事件

使用dockerevents命令查看Docker服務(wù)端的各種事件信息。dockerevents[選項(xiàng)]示例——查看實(shí)時(shí)事件,需要打開(kāi)兩個(gè)shell終端①在一個(gè)終端窗口中執(zhí)行以下命令偵聽(tīng)事件。[root@host1~]#dockerevents②打開(kāi)另一個(gè)終端窗口,先啟動(dòng)容器然后停止該容器。[root@host1~]#dockercreate--nametestalpine:latesttop24b0fc03b833a36b7166dc67667b40d401002a14a4214444a9680c6697d4239e[root@host1~]#dockerstarttesttest[root@host1~]#dockerstoptesttest任務(wù)五配置和管理Docker守護(hù)進(jìn)程任務(wù)實(shí)現(xiàn)從Docker守護(hù)進(jìn)程獲取實(shí)時(shí)事件

示例——查看實(shí)時(shí)事件,需要打開(kāi)兩個(gè)shell終端③切換到前面的終端窗口,會(huì)發(fā)現(xiàn)顯示了上述操作的詳細(xì)事件。[root@host1~]#dockerevents2020-01-09T13:46:25.771026954Zcontainercreate24b0fc03b833a36b7166dc67667b40d401002a14a4214444a9680c6697d4239e(image=alpine:latest,name=test)2020-01-09T13:46:39.284850442Znetwo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論