




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本章重點掌握Docker數(shù)據(jù)管理的基本方法。掌握Docker日志管理方法。掌握Docker容器監(jiān)測的基本方法。了解Docker安全機制和Linux內(nèi)核安全模塊。掌握Docker資源控制的基本方法。掌握Docker常見工具Compose和Machine的使用方法。了解DockerAPI,能夠通過命令行調(diào)用API實現(xiàn)相應(yīng)功能。Docker數(shù)據(jù)管理數(shù)據(jù)卷及其常見操作數(shù)據(jù)卷容器及其常見操作備份、恢復(fù)和遷移數(shù)據(jù)卷011.數(shù)據(jù)卷及其常見操作數(shù)據(jù)卷就是宿主機上一個特殊的目錄,它可以繞過聯(lián)合文件系統(tǒng),為一個或多個容器提供訪問。數(shù)據(jù)卷設(shè)計的目的是數(shù)據(jù)的永久化,其完全獨立于容器的生命周期。數(shù)據(jù)卷原理圖1.數(shù)據(jù)卷及其常見操作數(shù)據(jù)卷的特性:1. 數(shù)據(jù)卷在容器創(chuàng)建時初始化,在容器運行時可以使用其中的文件。2. 數(shù)據(jù)卷是宿主機中的一個目錄,它不依賴于容器,與容器生命周期隔離,因而可以安全的存儲文件到數(shù)據(jù)卷中。3. 在容器之間共享和重用數(shù)據(jù)卷。4. 容器對數(shù)據(jù)卷的修改會即可生效。5. 鏡像是基于聯(lián)合文件系統(tǒng),數(shù)據(jù)卷是獨立于聯(lián)合文件系統(tǒng),因而鏡像與數(shù)據(jù)卷之間不會相互影響。6. 數(shù)據(jù)卷默認(rèn)會一直存在,沒有特別設(shè)置不會在容器刪除時刪除其掛載的數(shù)據(jù)卷。1.數(shù)據(jù)卷及其常見操作1.創(chuàng)建并掛載數(shù)據(jù)卷創(chuàng)建容器時直接創(chuàng)建數(shù)據(jù)卷,并指定宿主機文件/目錄。1)在宿主機上創(chuàng)建一個目錄/var/volume_test。2)新建一個以centos:7為鏡像,名叫web1的交互式容器,并且創(chuàng)建一個數(shù)據(jù)卷,掛載宿主機目錄/var/volume_test到容器/html1目錄中。3)向容器/html1中新建一個文件1.txt,內(nèi)容為“volumetest”。使用Ctrl+p+q暫時退出Docker容器,但是保持容器一直運行。4)在宿主機上,查看數(shù)據(jù)卷中的內(nèi)容。[root@localhost~]#mkdir/var/volume_test[root@localhost~]#dockerrun--nameweb1-it-v/var/volume_test:/html1centos:7/bin/bash[root@3171c40cee70/]#[root@3171c40cee70/]#echo"volumetest">/html1/1.txt[root@localhost~]#cat/var/volume_test/1.txtvolumetest1.數(shù)據(jù)卷及其常見操作1.創(chuàng)建并掛載數(shù)據(jù)卷新建一個自定義數(shù)據(jù)卷html3,并且把它掛載到一個容器上。1)新建一個自定義數(shù)據(jù)卷html3。2)查看數(shù)據(jù)卷html3在宿主機上的目錄。3)在數(shù)據(jù)卷html1中新建一個文件3.txt,內(nèi)容是“volumetest”。4)創(chuàng)建一個使用數(shù)據(jù)卷html3的容器web3。5)在容器中查看數(shù)據(jù)卷中的數(shù)據(jù)。[root@localhost~]#dockervolumecreate--namehtml3[root@localhost~]#dockerinspecthtml3[root@localhost~]#echo"volumetest">/var/lib/docker/volumes/html3/_data/3.txt[root@localhost~]#vim/var/lib/docker/volumes/html3/_data/3.txt[root@localhost~]#dockerrun--nameweb3-it-vhtml3:/html3centos:7/bin/bash[root@bb8c4059e2fb/]#cat/html3/3.txt1.數(shù)據(jù)卷及其常見操作2.刪除數(shù)據(jù)卷數(shù)據(jù)卷是脫離容器而存在的,可以通過創(chuàng)建容器的命令創(chuàng)建數(shù)據(jù)卷,但是這些數(shù)據(jù)卷不會因為容器的停止和刪除被銷毀。如果該數(shù)據(jù)卷不被使用時,就需要手動刪除數(shù)據(jù)卷。通??梢杂脙煞N方法刪除數(shù)據(jù)卷:直接刪除數(shù)據(jù)卷或隨著容器的刪除而刪除數(shù)據(jù)卷??此拗鳈C中所有的數(shù)據(jù)卷,并直接刪除某一個數(shù)據(jù)卷。刪除容器時使用-v選項刪除該容器的數(shù)據(jù)卷。[root@localhost~]#dockerrun--nameweb4-d-v:/html4centos:7/bin/bash[root@localhost~]#dockervolumelist[root@localhost~]#dockerrm-vfweb4[root@localhost~]#dockervolumermhtml32.數(shù)據(jù)卷容器及其常見操作數(shù)據(jù)卷容器是一個專門用于存儲數(shù)據(jù)卷的容器,當(dāng)其他的容器中需要使用數(shù)據(jù)卷時,不再把宿主機的目錄當(dāng)作數(shù)據(jù)卷進(jìn)行掛載而是掛載數(shù)據(jù)卷容器。也就是說,容器通過數(shù)據(jù)卷容器銜接到數(shù)據(jù)卷上。數(shù)據(jù)卷容器原理圖2.數(shù)據(jù)卷容器及其常見操作1.創(chuàng)建數(shù)據(jù)卷容器創(chuàng)建一個數(shù)據(jù)卷容器的方法和創(chuàng)建普通容器的方法類似,都是通過dockerrun或者create命令來創(chuàng)建。因為使用數(shù)據(jù)卷容器時,無需保證數(shù)據(jù)卷容器處于運行狀態(tài),所以通常使用dockercreate命令來創(chuàng)建數(shù)據(jù)卷容器,避免啟動容器對宿主機性能的消耗。2.掛載數(shù)據(jù)卷容器數(shù)據(jù)卷容器是連接其他容器和數(shù)據(jù)卷的橋梁,其他容器如何通過數(shù)據(jù)卷容器連接到自己所需的數(shù)據(jù)卷,是數(shù)據(jù)卷容器中非常重要的環(huán)節(jié)。在創(chuàng)建容器時,可以通過--volumes-from參數(shù)掛載指定數(shù)據(jù)卷容器。2.數(shù)據(jù)卷容器及其常見操作創(chuàng)建一個數(shù)據(jù)卷容器并掛載。1)創(chuàng)建一個名為data_container1的容器,此容器中包含一個數(shù)據(jù)卷/var/volume1。2)在data_container1容器中,向數(shù)據(jù)卷文件中寫入數(shù)據(jù)。3)創(chuàng)建一個名為app_container2的容器,并且指定數(shù)據(jù)卷容器為data_container1。4)在容器app_container2中,查看數(shù)據(jù)卷容器中的數(shù)據(jù)。[root@localhost~]#dockerrun-it-v/var/volume1--namedata_container1centos:7/bin/bash[root@ec2c37d1b1eb/]#echo"volumetest">/var/volume1/3.txt[root@localhost~]#dockerrun-it--volumes-fromdata_container1--nameapp_container2centos:7/bin/bash[root@261e01ac78e1/]#cat/var/volume1/3.txt3.備份、恢復(fù)和遷移數(shù)據(jù)卷備份數(shù)據(jù)卷:首先要創(chuàng)建新的容器,并且將其連接到需要備份的數(shù)據(jù)卷容器上。在容器創(chuàng)建和運行后,進(jìn)入容器內(nèi)部執(zhí)行打包命令,將導(dǎo)出數(shù)據(jù)放置到掛載的宿主機目錄上。為了利用數(shù)據(jù)卷容器備份,使用--volumes-from參數(shù)來加載data_container1容器卷容器,并從宿主機掛載當(dāng)前目錄到容器的/backup目錄。備份數(shù)據(jù)卷容器中的/var/volume1數(shù)據(jù)為test.tar,備份在當(dāng)前目錄下,執(zhí)行完成之后刪除容器。[root@localhost~]#sudodockerrun--rm--volumes-fromdata_container1-v$(pwd):/backupcentos:7tarcvf/backup/test.tar/var/volume1[root@localhost~]#ls-ltest.tar3.備份、恢復(fù)和遷移數(shù)據(jù)卷恢復(fù)和遷移數(shù)據(jù)卷:要恢復(fù)備份的數(shù)據(jù),只需要把備份的過程逆向執(zhí)行一遍即可。將剛剛備份的數(shù)據(jù)卷進(jìn)行恢復(fù)和遷移。1)進(jìn)入數(shù)據(jù)卷容器data_container1,將數(shù)據(jù)卷中數(shù)據(jù)刪除。從上面輸出可知,進(jìn)入容器內(nèi)部可以刪除數(shù)據(jù)卷中數(shù)據(jù),但是數(shù)據(jù)卷目錄刪除不了。[root@localhost~]#dockerattachdata_container1[root@ec2c37d1b1ebvar]#ls/var/volume13.txt[root@ec2c37d1b1eb/]#rm-rf/var/volume1rm:cannotremove'/var/volume1':Deviceorresourcebusy3.備份、恢復(fù)和遷移數(shù)據(jù)卷將剛剛備份的數(shù)據(jù)卷進(jìn)行恢復(fù)和遷移。2)創(chuàng)建一個容器,掛載宿主機中存放備份數(shù)據(jù)的目錄,連接到包含目標(biāo)數(shù)據(jù)卷的數(shù)據(jù)卷容器data_container1,然進(jìn)入容器,在容器中執(zhí)行解包命令,把恢復(fù)的數(shù)據(jù)放置到目標(biāo)數(shù)據(jù)卷中。-C后面的路徑表示將數(shù)據(jù)恢復(fù)到容器里的路徑。命令中用"/",即表示將test.tar中的數(shù)據(jù)解壓到容器的"/"路徑下。3)進(jìn)入容器內(nèi)部查看數(shù)據(jù)。[root@localhost~]#dockerrun--rm--volumes-fromdata_container1-v$(pwd):/backupcentos:7tarxvf/backup/test.tar-C/var/volume1/var/volume1/3.txt[root@localhost~]#dockerattachdata_container1[root@ec2c37d1b1eb/]#ls/var/volume13.txtDocker日志與監(jiān)控Docker默認(rèn)日志記錄使用Docker工具監(jiān)測容器使用cAdvisor監(jiān)控容器021.Docker默認(rèn)日志記錄Docker默認(rèn)的日志查看工具dockerlogs,默認(rèn)情況下,Docker會將記錄發(fā)送到標(biāo)準(zhǔn)輸出端和標(biāo)準(zhǔn)錯誤端,通過dockerlogs命令即可獲取。使用鏡像文件centos:7啟動一個容器,讓其在后臺一直輸出hellodocker,使用dockerlogs命令獲取日志記錄。1.啟動后臺守護(hù)式容器log1。2.使用dockerps查看容器的狀態(tài)。3.使用dockerlogs命令查看容器的日志信息。4.想要獲取時間戳,并且讓正在運行的容器不斷輸出日志,可以使用-t和-f選項。[root@localhost~]#dockerrun--namelog1-dcentos:7/bin/bash-c"whiletrue;doechohellodocker;sleep1;done;"[root@localhost~]#dockerps–l[root@localhost~]#dockerlogslog1[root@localhost~]#dockerlogs-t-flog12.使用Docker工具監(jiān)測容器Docker自帶一個檢測工具,名叫dockerstats,它能夠返回一個資源使用情況的實時流。該命令提供DockerCPU利用率、內(nèi)存使用情況、內(nèi)存限制和網(wǎng)絡(luò)I/O度量標(biāo)準(zhǔn)的統(tǒng)計信息。使用dockerstats監(jiān)測容器stats1。獲取所有運行容器的監(jiān)測統(tǒng)計數(shù)據(jù)。[root@localhost~]#dockerstats$(dockerinspect-f{{.Name}}$(dockerps-q))[root@localhost~]#dockerstatsstats13.使用cAdvisor監(jiān)控容器谷歌開源的cAdvisor是一個可以查看容器的資源使用情況和性能特征的工具。它使用Go語言開發(fā),利用Linux的Cgroups獲取容器的資源使用信息,可以對節(jié)點機器上的資源及容器進(jìn)行實時監(jiān)控和性能數(shù)據(jù)采集。使用cAdviser查看資源使用情況。下載、安裝和啟動cAdviser。啟動成功后,使用dockerps查看cAdviser的啟動情況。在瀏覽器上訪問:8080,將會看到cAdvisor主界面。3.使用cAdvisor監(jiān)控容器容器的CPU、內(nèi)存等使用情況3.使用cAdvisor監(jiān)控容器點擊“DockerContainers”鏈接,會進(jìn)入新的頁面,顯示各個容器3.使用cAdvisor監(jiān)控容器點擊容器stats2,可以查看該容器的CPU、內(nèi)存和網(wǎng)絡(luò)等詳細(xì)信息Docker安全Linux內(nèi)核安全模塊Docker資源控制03Docker安全Docker的安全問題一直比較突出,隨著Docker的流行,Docker也將面臨越發(fā)嚴(yán)峻的安全形勢。Docker是基于LinuxContainer技術(shù)基礎(chǔ)上實現(xiàn)的。容器只是簡單的通過Namespaces進(jìn)行內(nèi)容隔離,在本質(zhì)上與宿主機上的進(jìn)程并沒有太大區(qū)別。換而言之,如果沒有使用合適的安全策略,很有可能會有惡意程序跳出容器隔離的環(huán)境,影響宿主機的運行。為了更好的保障容器安全,不僅需要深入理解Docker的安全模式,合理利用Linux的內(nèi)核安全模塊,還需要在CPU、內(nèi)存、I/O和文件系統(tǒng)等多個方面進(jìn)行資源控制。1.Linux內(nèi)核安全模塊1.Capability在Linux2.2版本之前,當(dāng)內(nèi)核對進(jìn)程進(jìn)行權(quán)限驗證的時候,可以將進(jìn)程劃分為兩類:privileged和unprivileged。其中,privileged的進(jìn)程擁有所有內(nèi)核權(quán)限,而unprivileged的進(jìn)程則根據(jù)可執(zhí)行文件的權(quán)限進(jìn)行判斷。通過Linux的Capability機制,Docker提供了容器級別的內(nèi)核保護(hù)。換而言之,用戶不僅能夠控制每個程序的內(nèi)核使用權(quán)限,還能夠?qū)θ萜鞯膬?nèi)核能力權(quán)限進(jìn)行控制。使用--cap-drop參數(shù),刪除白名單中修改文件所有者的內(nèi)核能力。[root@localhost~]#dockerrun-it--cap-dropchowndebian:jessie/bin/bashroot@d79454610b36:/#touchtest1root@d79454610b36:/#chownwww-datatest1chown:changingownershipof'test1':Operationnotpermitted1.Linux內(nèi)核安全模塊2.SELinux安全增強型Linux(Security-EnhancedLinux)簡稱SELinux,它是一個Linux內(nèi)核模塊。Linux2.6及以上版本的Linux內(nèi)核都已經(jīng)集成了SELinux模塊。SELinux有三種工作模式,分別是:enforcing:強制模式。違反SELinux規(guī)則的行為將被阻止并記錄到日志中。permissive:寬容模式。違反SELinux規(guī)則的行為只會記錄到日志中,一般為調(diào)試用。disabled:關(guān)閉SELinux??梢栽?etc/selinux/config中查看SELinux工作模式默認(rèn)情況下,SELinux不支持Docker。想要在Docker服務(wù)中開啟SELinux的支持,可以在dockerd啟動時加上--selinux-enabled參數(shù),或者修改/etc/docker/daemon.json配置文件中。[root@localhost~]#cat/etc/selinux/config1.Linux內(nèi)核安全模塊3.AppArmorAppArmor(ApplicationArmor)是Linux內(nèi)核的一個安全模塊,允許系統(tǒng)管理員將每個程序與一個安全配置文件關(guān)聯(lián),從而限制程序的功能。AppArmor有兩種工作模式:enforcement和complain。enforcement模式:配置文件里列出的限制條件都會得到執(zhí)行,并且對于違反這些限制條件的程序會進(jìn)行日志記錄。complain模式:配置文件里的限制條件不會得到執(zhí)行,Apparmor只是對程序的行為進(jìn)行記錄。運行容器時,如果想要將其他的AppArmor配置用于Docker容器,可以在啟動Docker容器的時候通過--security-opt參數(shù)選擇容器所使用的AppArmor配置文件。[root@localhost~]#dockerrun--rm-it--security-optapparmor=your_profilehello-world2.Docker資源控制1.CPU限制正常情況下,宿主機上的容器在競爭資源時平分CPU使用。如果想要給一些重要的容器分配更多的CPU,可以在啟動容器時加入相應(yīng)參數(shù)。設(shè)置容器在cpu1和cpu3上運行。1)通過--cpuset-cpus參數(shù)設(shè)置容器在cpu1和cpu3上運行。2)通過inspect命令查看容器的ID號。3)通過cat命令查看cpuset.cpus文件。[root@localhost/]#dockerrun-it--cpuset-cpus="1,3"--namecpu1centos:7/bin/bash[root@localhost/]#dockerinspectcpu1|grepId[root@localhost/]#cat/sys/fs/cgroup/cpuset/docker/eb1e5a00f4c004115ab9c99077b97e634a6347259586118c33a6e7ed84199a47/cpuset.cpus2.Docker資源控制2.內(nèi)存限制內(nèi)存限制限制了容器中的進(jìn)程能夠使用的內(nèi)存大小。內(nèi)存限制能夠確保一個容器不會因為過多使用內(nèi)存而影響運行在同一個計算機上的其他容器。啟動一個容器,設(shè)置容器能使用的內(nèi)存大小為1G,虛擬內(nèi)存使用量為3G,則能使用的Swap分區(qū)大小為2G。限制容器的內(nèi)存為1G并禁止了OOMkiller。[root@localhost/]#dockerrun-it-m1G--memory-swap3Gcentos:7/bin/bash[root@localhost/]#dockerrun-it-m1G--oom-kill-disablecentos:7/bin/bash2.Docker資源控制3.I/O限制相對于CPU和內(nèi)存的資源控制,Docker對磁盤I/O的控制大多數(shù)都在有宿主機設(shè)備的情況下使用。利用--device-write-bps選項限制容器寫/dev/sda的速率30MB/s。查看I/O的調(diào)度算法為CFQ,并創(chuàng)建一個容器,確保使用--blkio-weight選項限制優(yōu)先級為100。[root@localhost~]#cat/sys/block/sda/queue/schedulernoop[deadline]cfq[root@localhost~]#dockerrun-it--rm--blkio-weight100centos:7[root@59787989b2f3/]#[root@localhost~]#dockerrun-it--device-write-bps/dev/sda:30MBcentos:72.Docker資源控制4.文件系統(tǒng)限制為了阻止攻擊者寫入文件系統(tǒng),可以對文件系統(tǒng)做出相應(yīng)的限制。比如在dockerrun命令執(zhí)行時候,加入--read-only參數(shù),把文件系統(tǒng)設(shè)置為完全只讀。加入--read-only參數(shù),把文件系統(tǒng)設(shè)置為完全只讀。數(shù)據(jù)卷參數(shù)之后加上:ro來進(jìn)行文件系統(tǒng)限制。[root@localhost/]#dockerrun-it-v$(pwd):/root:rocentos:7touch/root/1.txt/bin/bashtouch:cannottouch'/root/1.txt':Read-onlyfilesyste[root@localhost/]#dockerrun-it--read-onlycentos:7/bin/bash[root@2921718a1ecd/]#echo"Thisisatest">1.txtbash:1.txt:Read-onlyfilesystem2.Docker資源控制5.通過ulimit限制在Linux系統(tǒng)中,可以通過ulimit命令對部分資源的使用進(jìn)行限制。通過--ulimit選項限制容器,限制SHELL進(jìn)程打開文件數(shù)目為1000,限制進(jìn)程能夠使用的CPU資源為1024。[root@localhost~]#dockerrun-it--ulimitnofile=1024:1024--ulimitcpu=1000centos:7/bin/bash[root@f149a1ba11ae/]#ulimit-t1000[root@f149a1ba11ae/]#ulimit-n
1024DockerComposeDockerCompose簡介DockerCompose配置文件DockerCompose常見命令DockerCompose實戰(zhàn)041.DockerCompose簡介DockerCompose項目是Docker官方的開源項目,負(fù)責(zé)實現(xiàn)對Docker容器集群的快速編排。它由Python編寫,最初源于一個開源項目Fig,目標(biāo)就是定義和運行應(yīng)用程序。DockerCompose將所管理的容器分為三層,分別是工程(Project),服務(wù)(Service)以及容器(Container)。工程是由一個或者多個服務(wù)所組成的一個相對完整的業(yè)務(wù)單元。服務(wù)是運行同種應(yīng)用程序的一個或多個相同容器的運行鏡像、參數(shù)和依賴,也是在DockerCompose中配置的主要對象。DockerCompose的代碼托管在GitHub上,地址為/docker/compose。2.DockerCompose配置文件DockerCompose是使用YML文件來定義多個容器關(guān)系的,實際上是把YML文件解析成原生的Docker命令,定義解析容器依賴關(guān)系,然后按照順序啟動容器。它定義了包括服務(wù)、網(wǎng)絡(luò)、數(shù)據(jù)卷在內(nèi)的一系列項目組件。DockerCompose配置文件默認(rèn)路徑是當(dāng)前目錄下的docker-compose.yml,可以使用.yml或.yaml作為文件擴展名。一份標(biāo)準(zhǔn)配置文件應(yīng)該包括version、services和networks這三大部分。2.DockerCompose配置文件services的書寫規(guī)則指定服務(wù)使用的鏡像image:如果鏡像在本地不存在,Compose將會嘗試?yán)$R像。指定構(gòu)建上下文build:服務(wù)除了可以基于指定的鏡像,還可以基于Dockerfile。指定服務(wù)鏡像啟動命令command:使用command可以覆蓋容器啟動后默認(rèn)執(zhí)行的命令。指定運行服務(wù)的容器名稱container_name。指定服務(wù)依賴關(guān)系depends_on:depends_on標(biāo)簽用于解決容器的依賴、啟動先后的問題。指定端口暴露expose:expose暴露端口,但不映射到宿主機,只允許能連接的服務(wù)訪問。設(shè)置服務(wù)容器的端口映射ports:ports是用于映射端口的標(biāo)簽。設(shè)置容器數(shù)據(jù)卷volumes:掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器。3.DockerCompose常見命令1.運行容器組合docker-composeup2.停止容器組合docker-composedown3.構(gòu)建項目鏡像docker-composebuild4.創(chuàng)建項目容器docker-composecreate5.啟動項目容器docker-composestart6.拉取服務(wù)依賴的鏡像docker-composepull7.查看服務(wù)日志docker-composelogs4.DockerCompose實戰(zhàn)創(chuàng)建一個Python應(yīng)用,使用Flask,將數(shù)值記入Redis。該應(yīng)用有兩個服務(wù)web和redis,每一個服務(wù)對應(yīng)一個容器,容器的啟動有先后依賴關(guān)系。通過DockerCompose編排容器的啟動順序,然后使用DockerCompose的up命令啟動該Python應(yīng)用。第一步,建立Python應(yīng)用目錄python,并在該目錄下新建一個文件,名叫app.py。第二步,在同一個目錄下創(chuàng)建Dockerfile文件,用于構(gòu)建這個應(yīng)用的鏡像。[root@localhost~]#mkdirpython[root@localhost~]#cdpython[root@localhostpython]#viapp.py[root@localhostpython]#vimDockerfileFROMpython:3.7ADD./codeWORKDIR/codeRUNpipinstall-rflaskredisCMDpythonapp.py4.DockerCompose實戰(zhàn)創(chuàng)建一個Python應(yīng)用,使用Flask,將數(shù)值記入Redis。該應(yīng)用有兩個服務(wù)web和redis,每一個服務(wù)對應(yīng)一個容器,容器的啟動有先后依賴關(guān)系。通過DockerCompose編排容器的啟動順序,然后使用DockerCompose的up命令啟動該Python應(yīng)用。第三步,在同一目錄下,創(chuàng)建編排腳本docker-compose.yml。[root@localhostpython]#vimdocker-compose.ymlversion:'3'services:web:build:.ports:-"5000:5000"volumes:-.:/codedepends_on:-redisredis:image:redis4.DockerCompose實戰(zhàn)創(chuàng)建一個Python應(yīng)用,使用Flask,將數(shù)值記入Redis。該應(yīng)用有兩個服務(wù)web和redis,每一個服務(wù)對應(yīng)一個容器,容器的啟動有先后依賴關(guān)系。通過DockerCompose編排容器的啟動順序,然后使用DockerCompose的up命令啟動該Python應(yīng)用。第四步,通過up命令啟動應(yīng)用。Compose會執(zhí)行編排腳本,分別制作和抓取web和redis鏡像,啟動兩個容器并連接它們。第五步,通過curlhttp://localhost:5000/訪問應(yīng)用。[root@localhostpython]#docker-composeup[root@localhostpython]curlhttp://localhost:5000/Hello!Ihavebeenseenb'1'times.[root@localhostpython]curlhttp://localhost:5000/Hello!Ihavebeenseenb'2'times[root@localhostpython]curlhttp://localhost:5000/Hello!Ihavebeenseenb'3'times.Docker
MachineDockerMachine簡介DockerMachine常見命令DockerMachine實戰(zhàn)051.DockerMachine簡介DockerMachine是Docker官方容器編排項目之一,使用Go語言編寫的。利用DockerMachine工具管理宿主機,可以很方便的在本地的MACOS或者Windows、數(shù)據(jù)中心以及AWS這樣的云計算提供商上創(chuàng)建Docker。使用DockerMachine命令,可以統(tǒng)一管理運行在不同宿主機上的Docker,進(jìn)行統(tǒng)一啟動、檢查、停止和重新啟動托管主機,也可以升級Docker客戶端和守護(hù)程序,以及配置Docker客戶端與宿主機進(jìn)行通信。利用DockerMachine統(tǒng)一管理Docker1.DockerMachine簡介可以把DockerMachine理解為dockerdaemon和dockerCLI分離的程序。DockerMachine的客戶端通過連接宿主機服務(wù)器端來操作Docker,這種連接方式通過網(wǎng)絡(luò)進(jìn)行。利用DockerMachine遠(yuǎn)程操作Docker所在的宿主機1.DockerMachine簡介DockerMachine的代碼托管在GitHub上,可以在/docker/machine/releases/頁面中找到下載鏈接。在Linux系統(tǒng)中,DockerMachine的具體安裝過程:1.下載DockerMachine的某一個版本,此時選擇v0.16.2。2.修改docker-machine文件的可執(zhí)行權(quán)限。3.復(fù)制文件到指定目錄。4.查看DockerMachine版本,測試是否安裝成功。[root@localhost~]#curl-L/docker/machine/releases/download/v0.16.2/docker-machine-`uname-s`-`uname-m`>/tmp/docker-machine[root@localhost~]#chmod+x/tmp/docker-machine[root@localhost~]#cp/tmp/docker-machine/usr/local/bin/docker-machine[root@localhost~]#docker-machineversion2.DockerMachine常見命令DockerMachine常見命令如下表:命令說明docker-machinecreate用于創(chuàng)建Docker主機docker-machinestart啟動一個指定的Docker主機,如果對象是個虛擬機,該虛擬機將被啟動docker-machinestop停止一個指定的Docker主機docker-machinels列出所有的管理主機docker-machinestatus獲取指定Docker主機的狀態(tài),包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error等docker-machineupgrade將一個指定主機的Docker版本更新docker-machineinspect以Json格式輸出指定Docker的詳細(xì)信息docker-machinerm刪除某臺Docker主機,對應(yīng)的虛擬機也會被刪除docker-machinessh通過SSH連接到主機上,執(zhí)行命令docker-machineversion顯示DockerMachine的版本或者主機Docker版本docker-machineconfig查看當(dāng)前激活狀態(tài)Docker主機的連接信息docker-machineenv顯示連接到某個主機需要的環(huán)境變量3.DockerMachine實戰(zhàn)DockerMachine可以管理多個宿主機上的Docker,以下以兩個機器為例,manager是管理機,client是被管理機(也叫做宿主機),演示如何利用DockerMachine創(chuàng)建并查看宿主機上的Docker。準(zhǔn)備兩臺已安裝DockerEngine的CentOS7系統(tǒng),manager是管理機,需安裝DockerMachine,IP為06。client是被管理機,IP為04。3.DockerMachine實戰(zhàn)首先,在manager主機上,配置主機間的SSH免密。1.生成keys并配置可以免密登錄宿主機。2.將keys拷貝到client主機上。3.測試是否可以免密登錄。4.退出登陸。[root@localhost~]#ssh-keygen[root@localhost~]#ssh-copy-idroot@04[root@localhost~]#ssh'root@04'Lastlogin:TueMar210:10:252021[root@localhost~]#exitlogoutConnectionto04closed.3.DockerMachine實戰(zhàn)接下來在manager管理機上使用DockerMachine在宿主機上創(chuàng)建Docker容器。1.執(zhí)行docker-machinels查看是否有運行Docker的宿主機。2.創(chuàng)建第一個machine:docker123-04,也就是在宿主機上啟動Docker。3.創(chuàng)建machine成功后,執(zhí)行l(wèi)s查看。4.使用docker-machineinspect命令查看容器docker123的情況。5.使用docker-machineenv查看docker123的環(huán)境變量。6.登錄到client查看配置項和當(dāng)前目錄中的文件情況。[root@localhost~]#docker-machinels[root@localhost~]#docker-machinecreate--drivergeneric--generic-ip-address=04docker123[root@localhost~]#docker-machinels[root@localhost~]#docker-machineinspectdocker123[root@localhost~]#docker-machineenvdocker123[root@localhost~]#sshroot@04Lastlogin:TueMar1610:15:352021from06[root@docker123~]#cat/etc/systemd/system/docker.service.d/10-machine.confDocker
APIDockerAPI簡介DockerRemoteAPIDockerRegistryAPI061.DockerAPI簡介DockerAPI是一套基于HTTP,用于操作Docker服務(wù)的接口。DockerAPI將對Docker的操作封裝成一個個的HTTP接口,只要根據(jù)相應(yīng)的規(guī)則對這些接口進(jìn)行調(diào)用,就能直接對Docker中內(nèi)容進(jìn)行操作,并獲得Docker的運行狀態(tài)等信息。DockerAPI連接程序與Docker服務(wù)1.DockerAPI簡介在Docker的生態(tài)系統(tǒng)中,存在下列三種API。DockerHubAPI:DockerHub相關(guān)的功能。DockerRemoteAPI:Docker守護(hù)進(jìn)程相關(guān)的功能。DockerRegistryAPI:存儲Docker鏡像的Registry相關(guān)的功能。所有這三種API都是RESTful風(fēng)格的,其中DockerRemoteAPI是使用最為頻繁的API類型。2.DockerRemoteAPIDockerRemoteAPI是DockerAPI最重要的部分,它能夠控制Docker服務(wù)及其中的容器、鏡像以及網(wǎng)絡(luò)等功能的運行。DockerRemoteAPI由Docker服務(wù)程序提供,隨著Docker服務(wù)的運行而啟動。在默認(rèn)的配置中,DockerRemoteAPI監(jiān)聽的連接方式是UnixSocket,監(jiān)聽位置是unix:///var/run/docker.sock。操作名稱相應(yīng)API列出所有容器GET/containers/json創(chuàng)建容器POST/containers/create啟動容器POST/containers/(id)/start獲取容器內(nèi)進(jìn)程清單GET/containers/(id)/top檢索根鏡像獲取容器日志GET/containers/(id)logs停止容器POST/containers/(id)/stop2.DockerRemoteAPI1.啟動DockerRemoteAPI1)DockerRemoteAPI主要用于遠(yuǎn)程訪問Docker守護(hù)進(jìn)程。因此,在啟動Docker守護(hù)進(jìn)程時,需要添加-H參數(shù)并指定開啟的訪問端口。通常通過編輯守護(hù)進(jìn)程的配置文件來實現(xiàn)端口設(shè)置。2)重啟DockerDaemon和Docker服務(wù)。3)檢查配置是否已修改成功。4)用curl進(jìn)行測試DockerRemoteAPI是否啟用成功。[root@localhost~]#cat/usr/lib/systemd/system/docker.service[root@localhost~]#systemctldaemon-reload[root@localhost~]#systemctlrestartdocker[root@localhost~]#ps-ef|grepdocker[root@localhostsysconfig]#curl-v--unix-socket/var/run/docker.socktcp::/images/nginx:alpine/json2.DockerRemoteAPI2.通過DockerRemoteAPI列出所有容器可以通過dockerps命令列出所有容器,還可以通過DockerRemoteAPI來獲取這些信息,列出容器的API接口地址為:GET/containers/json通過RemoteAPI列出所有容器。單純使用curl獲得的容器列表格式不規(guī)范,因此一般配合格式化工具python-mjson.tool使用[root@localhost~]#curl--unix-socket/var/run/docker.socktcp::/containers/json|python-mjson.tool[root@localhost~]#curl--unix-socket/var/run/docker.socktcp::/containers/json2.DockerRemoteAPI3.通過DockerRemoteAPI創(chuàng)建一個容器創(chuàng)建容器的API接口地址為:POST/containers/create通過DockerRemoteAPI創(chuàng)建一個容器。[root@localhost~]#curl-XPOST-H"Content-Type:application/json"http://localhost:2375/containers/create-d'>{>"Ho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026屆陜西省西安市蓮湖區(qū)化學(xué)高三第一學(xué)期期中調(diào)研試題含解析
- 山東省濟南市實驗中學(xué)2026屆化學(xué)高一第一學(xué)期期末質(zhì)量跟蹤監(jiān)視試題含解析
- 2025年秋季部編版初中數(shù)學(xué)教學(xué)設(shè)計八年級上冊13.4 課題學(xué)習(xí) 最短路徑問題
- 圣誕節(jié)公司活動策劃方案
- 五一勞動節(jié)文藝晚會策劃方案
- 幼兒園活動實施策劃方案
- 關(guān)于初三體育教學(xué)工作方案
- 大班配班個人工作方案
- 電儀監(jiān)理面試題及答案
- 中平電動車考試試題及答案
- 防洪防汛應(yīng)急處置措施
- 葫蘆島打漁山 220kV 輸變電工程環(huán)評報告
- 08SG213-1 鋼煙囪(自立式30m-60m)(不清晰有水印)
- 社會團(tuán)體單位會員登記表完整
- GB/T 531.1-2008硫化橡膠或熱塑性橡膠壓入硬度試驗方法第1部分:邵氏硬度計法(邵爾硬度)
- 中航工業(yè)運營管理體系內(nèi)容介紹課件
- 消化系統(tǒng)疾病課件整理
- 子宮肉瘤診療指南
- 培訓(xùn)注塑成型原理
- 2009-2022歷年江蘇省鎮(zhèn)江市丹陽市事業(yè)單位考試《綜合知識和能力素質(zhì)(計算機類崗位)》真題含答案2022-2023上岸必備帶詳解版3
- 交流電氣裝置的過電壓保護(hù)及絕緣配合
評論
0/150
提交評論