容器云服務(wù)架構(gòu)與運(yùn)維 課件 第5-7章 容器鏡像、Docker Compose 編排服務(wù)、Docker Swarm 編排服務(wù)_第1頁
容器云服務(wù)架構(gòu)與運(yùn)維 課件 第5-7章 容器鏡像、Docker Compose 編排服務(wù)、Docker Swarm 編排服務(wù)_第2頁
容器云服務(wù)架構(gòu)與運(yùn)維 課件 第5-7章 容器鏡像、Docker Compose 編排服務(wù)、Docker Swarm 編排服務(wù)_第3頁
容器云服務(wù)架構(gòu)與運(yùn)維 課件 第5-7章 容器鏡像、Docker Compose 編排服務(wù)、Docker Swarm 編排服務(wù)_第4頁
容器云服務(wù)架構(gòu)與運(yùn)維 課件 第5-7章 容器鏡像、Docker Compose 編排服務(wù)、Docker Swarm 編排服務(wù)_第5頁
已閱讀5頁,還剩155頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

容器云服務(wù)架構(gòu)與運(yùn)維單元5容器鏡像學(xué)習(xí)目標(biāo)了解Docker鏡像的概念及系統(tǒng)架構(gòu)、了解DockerCommit的概念和Dockerfile的區(qū)別、了解Commit的操作方法和Dockerfile的編寫方式;掌握使用DockerCommit構(gòu)建鏡像、使用Dockerfile構(gòu)建鏡像等技能;5.1制作容器鏡像的方式5.2容器鏡像制作5.1制作容器鏡像的方式5.1.1Docker鏡像介紹Docker鏡像概念Docker鏡像是一個(gè)只讀的Docker容器模板,也是一個(gè)獨(dú)立的文件系統(tǒng),其中包含了啟動(dòng)Docker容器時(shí)所需要的文件系統(tǒng)結(jié)構(gòu)及其內(nèi)容,因此鏡像也是啟動(dòng)Docker容器的基礎(chǔ)。Docker鏡像的文件內(nèi)容以及一些運(yùn)行Docker容器的配置文件共同組成了Docker容器的靜態(tài)文件系統(tǒng)運(yùn)行環(huán)境Rootfs,也可以把它理解為Docker鏡像是Docker容器的靜態(tài)視角,Docker容器是Docker鏡像的運(yùn)行狀態(tài)。5.1.1Docker鏡像介紹鏡像系統(tǒng)結(jié)構(gòu)5.1.1Docker鏡像介紹構(gòu)建鏡像的方法5.1.1Docker鏡像介紹Dockerfile介紹Dockerfile是一個(gè)包含組合鏡像命令的文本文檔,可以用在命令行中調(diào)用任何命令。Docker通過讀取Dockerfile中的指令自動(dòng)生成鏡像。在Dockerfile中,dockerbuild命令用于從Dockerfile中構(gòu)建鏡像??梢栽赿ockerbuild命令中使用-f參數(shù)指向文件系統(tǒng)中任何位置的Dockerfile,語法如下所示:#dockerbuild-f/path/to/a/Dockerfile5.1.1Docker鏡像介紹Dockerfile介紹Dockerfile的主要指令如下:①FROM:指定基礎(chǔ)鏡像,這個(gè)參數(shù)必須為第一條命令。②MAINTAINER:添加維護(hù)者信息。③RUN:構(gòu)建鏡像時(shí)執(zhí)行的命令。④ADD:將本地文件添加到容器中,tar類型文件會(huì)自動(dòng)解壓(網(wǎng)絡(luò)壓縮資源不會(huì)被解壓),可以訪問網(wǎng)絡(luò)資源,類似wget。⑤COPY:功能類似ADD,但是不會(huì)自動(dòng)解壓文件,也不能訪問網(wǎng)絡(luò)資源。⑥CMD:構(gòu)建容器后調(diào)用,也就是在容器啟動(dòng)時(shí)才進(jìn)行調(diào)用。5.1.1Docker鏡像介紹Dockerfile介紹⑦ENTRYPOINT:配置容器,使其可執(zhí)行化。配合CMD時(shí)可省去“application”,只使用參數(shù)。⑧LABEL:用于為鏡像添加元數(shù)據(jù)。⑨ENV:設(shè)置環(huán)境變量。⑩EXPOSE:指定與外界交互的端口。?VOLUME:用于指定持久化目錄。?WORKDIR:工作目錄,類似于cd命令。5.1.1Docker鏡像介紹Dockerfile介紹?USER:指定運(yùn)行容器時(shí)的用戶名或UID,后續(xù)的RUN也會(huì)使用指定用戶。使用USER指定用戶時(shí),可以使用用戶名、UID或GID,或是兩者的組合。當(dāng)服務(wù)不需要管理員權(quán)限時(shí),可通過該命令指定運(yùn)行用戶。?ARG:用于指定傳遞給構(gòu)建運(yùn)行時(shí)的變量。?ONBUILD:用于設(shè)置鏡像觸發(fā)器。5.2容器鏡像制作制作容器鏡像節(jié)點(diǎn)的規(guī)劃5.2.1容器鏡像制作方式介紹環(huán)境準(zhǔn)備準(zhǔn)備好VMwareWorkstation工具和CentOS7.5版本虛擬機(jī),使用CentOS7.5虛擬機(jī)快照,克隆一臺(tái)虛擬機(jī),云主機(jī)配置自定義,推薦配置2vCPU、4GB內(nèi)存、40GB硬盤,網(wǎng)絡(luò)使用NAT模式,docker節(jié)點(diǎn)IP設(shè)置為5,推薦設(shè)置主機(jī)密碼為000000。在進(jìn)行容器網(wǎng)絡(luò)實(shí)驗(yàn)前,自行將虛擬機(jī)配置好IP、安裝Docker服務(wù),關(guān)閉SELinux和防火墻服務(wù)。5.2.1容器鏡像制作方式介紹環(huán)境準(zhǔn)備5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像根據(jù)用戶請(qǐng)求判定是否暫停該Docker容器的運(yùn)行。將容器的讀寫層導(dǎo)出打包。DockerDaemon接收到對(duì)應(yīng)的HTTP請(qǐng)求后,需要執(zhí)行的步驟如下。在層存儲(chǔ)中注冊(cè)讀寫層差異包。更新鏡像歷史信息和rootfs。如果指定了repository信息,則給鏡像添加標(biāo)簽信息。5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像dockercommit命令dockercommit[選項(xiàng)]<容器ID或容器名>[<倉庫名>[:<標(biāo)簽>]]-a:提交鏡像的作者。-m:提交時(shí)的說明文字。-p:在提交時(shí),將容器暫停5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像使用dockercommit的方式,在基礎(chǔ)容器CentOS中安裝JavaJDK1.8環(huán)境,然后將容器打包成鏡像,步驟如下。(1)上傳基礎(chǔ)鏡像將提供的centos_latest.tar鏡像上傳至docker節(jié)點(diǎn)的/root目錄下,然后上傳至本地,命令如下:[root@docker~]#dockerload-icentos_latest.tar2653d992f4ef:Loadinglayer[===============>]216.5MB/216.5MBLoadedimage:centos:latest5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像(2)啟動(dòng)容器使用上傳的鏡像運(yùn)行容器,命令如下:[root@docker~]#dockerrun-itdcentos:latest/bin/bash55f9b5acba8c282d9dc6bd245da24eb23816f0e775e90184ff9743d55e9bf019如果沒有報(bào)錯(cuò),即成功啟動(dòng)容器。5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像(3)上傳JDK包首先將提供的jdk-8u141-linux-x64.tar.gz包上傳至宿主機(jī)docker節(jié)點(diǎn)的/root目錄下,接著將該JDK包傳至CentOS容器的/root目錄下,命令如下:[root@docker~]#dockercpjdk-8u141-linux-x64.tar.gz2f0155e8ee9e:/root/然后進(jìn)入容器內(nèi),查看JDK包是否被上傳,命令如下:[root@docker~]#dockerexec-it2f0155e8ee9e/bin/bash[root@2f0155e8ee9e/]#cd/root/[root@2f0155e8ee9e~]#lsanaconda-ks.cfganaconda-post.logjdk-8u141-linux-x64.tar.gzoriginal-ks.cfg可以看到在容器的/root目錄下存在jdk-8u141-linux-x64.tar.gz包,上傳成功。5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像(4)安裝JDK環(huán)境首先創(chuàng)建JavaJDK工作目錄,命令如下:[root@2f0155e8ee9e~]#mkdir/usr/jdk64/然后將jdk-8u141-linux-x64.tar.gz包解壓至/usr/jdk64/目錄,命令如下:[root@2f0155e8ee9e~]#tar-zxvfjdk-8u141-linux-x64.tar.gz-C/usr/jdk64/......忽略輸出......5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像解壓完畢后,編輯/etc/profile文件配置環(huán)境變量,命令如下:[root@2f0155e8ee9e~]#vi/etc/profile#在/etc/profile文件最下處,添加如下兩行exportJAVA_HOME=/usr/jdk64/jdk1.8.0_141exportPATH=$JAVA_HOME/bin:$PATH編輯環(huán)境變量完畢后,需要生效環(huán)境變量,命令如下:[root@2f0155e8ee9e~]#source/etc/profile5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像查看JDK環(huán)境是否部署成功,命令如下:[root@2f0155e8ee9e~]#java-versionjavaversion"1.8.0_141"Java(TM)SERuntimeEnvironment(build1.8.0_141-b15)JavaHotSpot(TM)64-BitServerVM(build25.141-b15,mixedmode)重新生效環(huán)境變量,JDK環(huán)境可用[root@2f0155e8ee9e/]#vi~/.bashrc#將該文件配置成如下:if[-f/etc/bashrc];then./etc/bashrcsource/etc/profilefi5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像(5)將容器做成鏡像在容器中部署完JDK環(huán)境后,使用dockercommit命令將容器制作成鏡像,并命名為centos_jdk:1.8,命令如下:[root@docker~]#dockercommit2f0155e8ee9ecentos_jdk:1.8sha256:4fa97e4a6d00046a08810dd50161a58bec07d83f02034213c529e0754bdd6c26查看鏡像列表,命令如下:[root@docker~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEcentos_jdk1.84fa97e4a6d003secondsago771MBcentoslatest300e315adb2f9monthsago209MB5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像(6)驗(yàn)證鏡像首先使用生成的鏡像運(yùn)行容器,然后進(jìn)入容器內(nèi)部查看是否帶有JDK環(huán)境,命令如下:[root@docker~]#dockerrun-itdcentos_jdk:1.8/bin/bash384ebb854046bf21fac81aeef61ff268f149e5ac69be52972026aa2686ba811c[root@docker~]#dockerexec-it384ebb85404/bin/bash[root@384ebb854046/]#java-versionjavaversion"1.8.0_141"Java(TM)SERuntimeEnvironment(build1.8.0_141-b15)JavaHotSpot(TM)64-BitServerVM(build25.141-b15,mixedmode)[root@384ebb854046/]#5.2.1容器鏡像制作方式介紹使用dockercommit構(gòu)建鏡像dockercommit的缺點(diǎn)手動(dòng)創(chuàng)建,容易出錯(cuò),效率低及可重復(fù)性弱構(gòu)建鏡像比較大。使用者并不知道鏡像是如何創(chuàng)建出來的,里面是否有惡意程序,可能存在安全隱患。5.2.1容器鏡像制作方式介紹使用Dockerfile構(gòu)建鏡像使用Dockerfile構(gòu)建鏡像分為兩步:一、創(chuàng)建Dockerfile文件二、使用dockerbuild命令構(gòu)建鏡像5.2.1容器鏡像制作方式介紹使用Dockerfile構(gòu)建鏡像

Dockerfile一般分為四部分:-基礎(chǔ)鏡像信息-維護(hù)者信息-鏡像操作指令-容器啟動(dòng)時(shí)執(zhí)行指令(CMD/ENTRYPOINT)5.2.1容器鏡像制作方式介紹使用Dockerfile構(gòu)建鏡像說明:Dockerfile指令通常使用大寫字母。Dockerfile中指令按順序從上至下依次執(zhí)行。Dockerfile中第一個(gè)非注釋行必須是FROM指令。Dockerfile中需要調(diào)用的文件必須跟Dockerfile文件在同一目錄下,或者在其子目錄下。編寫Dockerfile文件要求盡可能精簡(jiǎn)。5.2.1容器鏡像制作方式介紹使用Dockerfile構(gòu)建鏡像舉例:FROMdaocloud.io/library/centos:7LABELMAINTAINER="Jnvclxl"RUNyuminstall-ywgetRUNtoucha.txtRUNmkdir/testRUNcpa.txt/test5.2.1容器鏡像制作方式介紹使用Dockerfile構(gòu)建鏡像#dockerbuild命令構(gòu)建鏡像格式:dockerbuild-tImageName:Tag-f/path/to/a/Dockerfile舉例:dockerbuild-tcentso:7.技能訓(xùn)練1.在容器內(nèi)安裝JDK環(huán)境,并使用DockerCommit的方式構(gòu)建鏡像。2.在容器內(nèi)安裝JDK環(huán)境,并使用Dockerfile的方式構(gòu)建鏡像。謝謝!容器云服務(wù)架構(gòu)與運(yùn)維單元6DockerCompose編排服務(wù)學(xué)習(xí)目標(biāo)了解DockerCompose容器編排工具的基本概念與特點(diǎn);掌握DockerCompose的安裝部署;掌握DockerCompose的使用方法與技巧;掌握Dockerfile文件編寫構(gòu)建鏡像、編排部署gpmall商城服務(wù)等技能。6.1認(rèn)識(shí)DockerCompose編排服務(wù)6.2使用DockerCompose編排服務(wù)6.1認(rèn)識(shí)DockerCompose編排服務(wù)6.1.1DockerCompose介紹

DockerCompose簡(jiǎn)介DockerCompose項(xiàng)目是Docker官方的開源項(xiàng)目,實(shí)現(xiàn)對(duì)Docker容器集群的快速編排。DockerCompose將所管理的容器分為3層,分別是工程(Project)、服務(wù)(Service)以及容器(Container)。DockerCompose運(yùn)行目錄下的所有文件(docker-compose.yml、extends文件或環(huán)境變量文件等)組成一個(gè)工程,若無特殊指定工程名即為當(dāng)前目錄名。一個(gè)工程當(dāng)中可包含多個(gè)服務(wù),每個(gè)服務(wù)中定義了容器運(yùn)行的鏡像、參數(shù)、依賴。一個(gè)服務(wù)當(dāng)中可包括多個(gè)容器實(shí)例,DockerCompose并沒有解決負(fù)載均衡的問題,因此需要借助其他工具實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)及負(fù)載均衡。

DockerCompose的基本概念DockerCompose有2個(gè)重要的概念。①項(xiàng)目(Project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個(gè)完整業(yè)務(wù)單元,在dockercompose.yaml文件中定義。②服務(wù)(Service):一個(gè)應(yīng)用的容器,實(shí)際上可以包括若干運(yùn)行相同鏡像的容器實(shí)例。6.1.1DockerCompose介紹DockerCompose的特點(diǎn)(1)將單個(gè)主機(jī)隔離成多個(gè)環(huán)境Compose使用項(xiàng)目名稱(ProjectName)將不同應(yīng)用的環(huán)境隔離開,項(xiàng)目名稱可以用來:①在開發(fā)機(jī)上,將應(yīng)用環(huán)境復(fù)制多份。②防止使用了相同名稱服務(wù)的應(yīng)用之間互相干擾。6.1.1DockerCompose介紹DockerCompose的特點(diǎn)(2)保護(hù)卷中的數(shù)據(jù)Compose保護(hù)服務(wù)使用的所有卷(Vloumes),當(dāng)運(yùn)行docker-composerun命令時(shí),如果Compose發(fā)現(xiàn)存在之前運(yùn)行過的容器,它就會(huì)把舊容器中的數(shù)據(jù)卷拷貝到新的容器中,這保證了用戶在卷中創(chuàng)建的任何數(shù)據(jù)都不丟失。(3)只重新創(chuàng)建改變過的容器Compose會(huì)緩存用于創(chuàng)建容器的配置信息,當(dāng)重啟服務(wù)時(shí),如果服務(wù)沒有被更改,Compose就會(huì)重新使用已經(jīng)存在的容器,這無疑加快了修改應(yīng)用的速度。6.1.1DockerCompose介紹6.2

使用DockerCompose編排服務(wù)(1)規(guī)劃節(jié)點(diǎn)6.2.1Compose編排服務(wù)案例部署環(huán)境準(zhǔn)備(2)基礎(chǔ)準(zhǔn)備準(zhǔn)備好VMwareWorkstation工具、CentOS7.5版本虛擬機(jī),使用CentOS7.5版本虛擬機(jī)快照克隆一臺(tái)虛擬機(jī),云主機(jī)配置自定義,推薦配置2vCPU、4GB內(nèi)存、40GB硬盤,網(wǎng)絡(luò)使用NAT模式,docker節(jié)點(diǎn)IP設(shè)置為6,推薦設(shè)置主機(jī)密碼為000000。自行將虛擬機(jī)配置好IP、安裝Docker服務(wù),關(guān)閉SELinux和防火墻服務(wù)。環(huán)境準(zhǔn)備6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(1)DockerCompose的安裝①將提供的v1.25.5-docker-compose-Linux-x86_64文件上傳至docker節(jié)點(diǎn),然后復(fù)制該文件至/usr/local/bin/目錄下,并改名為docker-compose,命令如下:[root@docker~]#cpv1.25.5-docker-compose-Linux-x86_64/usr/local/bin/dockercompose6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(1)DockerCompose的安裝②給docker-compose賦予執(zhí)行權(quán)限,命令如下:[root@docker~]#chmod+x/usr/local/bin/docker-compose③賦予權(quán)限后,即可使用docker-compose命令,查看docker-compose的版本,命令如下:[root@docker~]#docker-composeversiondocker-composeversion1.25.5,build8a1c60f6docker-pyversion:4.1.0CPythonversion:3.7.5OpenSSLversion:OpenSSL1.1.0l10Sep20196.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用假設(shè)當(dāng)前要部署一個(gè)ownCloud應(yīng)用(ownCloud是一個(gè)開源、免費(fèi)、專業(yè)的私有云存儲(chǔ)項(xiàng)目,它能幫用戶快速在個(gè)人PC或服務(wù)器上架設(shè)一套專屬的私有云文件同步網(wǎng)盤),部署ownCloud應(yīng)用需要兩個(gè)容器,一個(gè)是ownCloud容器,另一個(gè)是數(shù)據(jù)庫容器。本次實(shí)驗(yàn)使用兩種方式啟動(dòng)ownCloud云網(wǎng)盤應(yīng)用,一種是單容器化部署(即手動(dòng)部署),另一種是使用docker-compose工具編排部署(簡(jiǎn)稱編排方式),我們可以對(duì)比這兩種方式的不同與優(yōu)缺點(diǎn)。6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用方法一:手動(dòng)部署ownCloud云網(wǎng)盤。①首先將提供的mysql-5.6.tar鏡像和owncloud-latest.tar鏡像上傳至docker節(jié)點(diǎn)的/root目錄下,并載入,命令如下:[root@docker~]#dockerload-iowncloud-latest.tar7b4e562e58dc:Loadinglayer[===============>]58.44MB/58.44MB......[root@docker~]#dockerload-imysql-5.6.tar767a7b7a8ec5:Loadinglayer[===============>]58.49MB/58.49MB......6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用方法一:手動(dòng)部署ownCloud云網(wǎng)盤。②上傳完畢后,首先啟動(dòng)數(shù)據(jù)庫容器,命令如下:[root@docker~]#dockerrun--namemy-mysql-p3307:3306-eMYSQL_ROOT_PASSWORD=123456-dmysql:5.637713e86c8af8db1fc9473a18395d82a7b21d7a6d2ffb46a342faf54237cfa2c③接著啟動(dòng)ownCloud容器,命令如下:[root@docker~]#dockerrun--namemy-owncloud-d-p5679:80-v/data/db/owncloud:/var/www/html/data--linkmy-mysql:mysqlowncloud:latestc89f5452ae0e5c3390d5ee6646d37d2c3ce1018e13b0e7c385187a74632f8a1c6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用方法一:手動(dòng)部署ownCloud云網(wǎng)盤。啟動(dòng)成功后,可以通過瀏覽器訪問6:5679ownCloud登錄界面,如圖所示。6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用方法二:使用docker-compose工具編排部署ownCloud云網(wǎng)盤。①使用docker-compose編排工具,首先需要?jiǎng)?chuàng)建工作目錄,在docker節(jié)點(diǎn)/root目錄下創(chuàng)建ownCloud目錄,命令如下:[root@docker~]#mkdirowncloud②在ownCloud目錄下,創(chuàng)建docker-compose.yaml文件,文件內(nèi)容詳見教材P73。③使用docker-compose命令運(yùn)行該Yaml文件,ownCloud應(yīng)用會(huì)自動(dòng)編排部署。6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用方法二:使用docker-compose工具編排部署ownCloud云網(wǎng)盤。命令如下:[root@dockerowncloud]#docker-composeup-dCreatingnetwork"owncloud_default"withthedefaultdriverCreatingowncloud_mysql_1...doneCreatingowncloud_owncloud_1...done看到兩個(gè)容器都處于啟動(dòng)完成的狀態(tài),就可以通過瀏覽器6:5680訪問ownCloud登錄界面。6.2.1Compose編排服務(wù)案例部署DockerCompose的安裝與使用(2)DockerCompose的使用方法二:使用docker-compose工具編排部署ownCloud云網(wǎng)盤。如果需要關(guān)閉該容器,手動(dòng)方式需要關(guān)停兩次容器,而使用編排方式則只需要執(zhí)行一條命令,命令如下:[root@dockerowncloud]#docker-composedownStoppingowncloud_owncloud_1...doneStoppingowncloud_mysql_1...doneRemovingowncloud_owncloud_1...doneRemovingowncloud_mysql_1...doneRemovingnetworkowncloud_default6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹在編排部署gpmall商城應(yīng)用之前,首先必須知道該應(yīng)用涉及哪些服務(wù),然后規(guī)劃與制作各個(gè)容器鏡像,最后才能進(jìn)行編排部署。首先快速地在虛擬機(jī)中安裝部署gpmall商城應(yīng)用,了解該應(yīng)用依賴哪些基礎(chǔ)服務(wù)。(1)基礎(chǔ)環(huán)境安裝gpmall商城應(yīng)用需要依賴數(shù)據(jù)庫、Redis、ZooKeeper、Kafka等基礎(chǔ)服務(wù),所以需要安裝這些基礎(chǔ)服務(wù),具體操作如下:①配置YUM源。將提供的gpmall-single.tar.gz軟件包上傳至docker節(jié)點(diǎn)的/root目錄下,然后解壓縮到/opt目錄下。6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(1)基礎(chǔ)環(huán)境安裝移除/etc/yum.repos.d/原有的repo文件,并新建local.repo文件,編輯local.repo文件,配置完之后,使用如下命令查看YUM源是否配置成功:[root@docker~]#yumrepolistLoadedplugins:fastestmirrorDeterminingfastestmirrorsgpmall|2.9kB00:00:00gpmall/primary_db|98kB00:00:00repoidreponamestatusgpmallgpmall129repolist:129看到repolist的值是129,即表明YUM源配置成功。6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(1)基礎(chǔ)環(huán)境安裝②安裝Java環(huán)境。配置完YUM源之后,安裝基礎(chǔ)環(huán)境,首先安裝Java環(huán)境,之后查看Java版本,確認(rèn)Java環(huán)境是否安裝成功,命令如下:[root@docker~]#java-versionopenjdkversion"1.8.0_262"OpenJDKRuntimeEnvironment(build1.8.0_262-b10)OpenJDK64-BitServerVM(build25.262-b10,mixedmode)③安裝數(shù)據(jù)庫服務(wù)。安裝MariaDB數(shù)據(jù)庫服務(wù),命令如下:[root@docker~]#yuminstallmariadb-servermariadb-y...忽略輸出...6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(1)基礎(chǔ)環(huán)境安裝④安裝Redis服務(wù)。安裝Redis緩存服務(wù),命令如下:[root@docker~]#yuminstallredis-y...忽略輸出...⑤安裝Nginx服務(wù)。安裝Nginx反向代理服務(wù),命令如下:[root@docker~]#yuminstallnginx-y...忽略輸出...⑥安裝ZooKeeper。安裝ZooKeeper服務(wù),使用提供的zookeeper-3.4.14.tar.gz軟件包(該軟件包在/opt/gpmall-single目錄內(nèi))。6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(1)基礎(chǔ)環(huán)境安裝首先解壓壓縮包,然后進(jìn)入zookeeper-3.4.14/conf目錄,將zoo_sample.cfg文件重命名為zoo.cfg,再進(jìn)入zookeeper-3.4.14/bin目錄,啟動(dòng)ZooKeeper服務(wù),最后查看ZooKeeper狀態(tài),命令如下:[root@dockergpmall-single]#./zkServer.shstatusZooKeeperJMXenabledbydefaultUsingconfig:/root/zookeeper-3.4.14/bin/../conf/zoo.cfgMode:standalone6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(1)基礎(chǔ)環(huán)境安裝⑦安裝Kafka服務(wù)。安裝Kafka服務(wù),使用提供的kafka_2.11-1.1.1.tgz軟件包(該軟件包在/opt/gpmall-single目錄內(nèi))。首先解壓該壓縮包,然后進(jìn)入kafka_2.11-1.1.1/bin目錄,啟動(dòng)Kafka服務(wù);再使用jps查看Kafka是否成功啟動(dòng),命令如下:[root@dockergpmall-single]#jps6039Kafka1722QuorumPeerMain6126Jps還可以使用netstat命令查看Kafka服務(wù)端口是否放開,如下所示:[root@dockerbin]#netstat–ntpl//Kafka服務(wù)端口號(hào)為90926.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹在運(yùn)行結(jié)果中看到了9092端口,說明Kafka服務(wù)已啟動(dòng)。至此,gpmall商城應(yīng)用所需要的基礎(chǔ)服務(wù)均安裝完畢。在安裝完服務(wù)后,還需對(duì)各種服務(wù)進(jìn)行配置,具體步驟詳見下面的服務(wù)配置實(shí)操案例。(2)服務(wù)配置①數(shù)據(jù)庫服務(wù)配置。需要對(duì)安裝完的數(shù)據(jù)庫進(jìn)行初始化配置、設(shè)置數(shù)據(jù)庫密碼、設(shè)置訪問權(quán)限、導(dǎo)入數(shù)據(jù)庫等,具體操作如下:首先啟動(dòng)數(shù)據(jù)服務(wù),命令如下:[root@docker~]#systemctlstartmariadb進(jìn)行數(shù)據(jù)庫初始化操作設(shè)置,root用戶的密碼為123456并登錄。[root@docker~]#mysql_secure_installation6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置①數(shù)據(jù)庫服務(wù)配置。接下來設(shè)置數(shù)據(jù)庫的遠(yuǎn)程訪問權(quán)限,命令如下:[root@mall~]#mysql-uroot–p123456MariaDB[(none)]>grantallprivilegeson*.*toroot@localhostidentifiedby'123456'withgrantoption;QueryOK,0rowsaffected(0.001sec)MariaDB[(none)]>grantallprivilegeson*.*toroot@"%"identifiedby'123456'withgrantoption;QueryOK,0rowsaffected(0.001sec)以上兩條命令設(shè)置了root用戶的本地和遠(yuǎn)程登錄權(quán)限。6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置①數(shù)據(jù)庫服務(wù)配置。最后還需要?jiǎng)?chuàng)建gpmall庫,并將提供的gpmall.sql文件(該文件在/opt/gpmall-single目錄下)導(dǎo)入該庫,命令如下:MariaDB[(none)]>createdatabasegpmall;QueryOK,1rowaffected(0.00sec)MariaDB[(none)]>usegpmall;MariaDB[mall]>source/opt/gpmall-single/gpmall.sql6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置①數(shù)據(jù)庫服務(wù)配置。導(dǎo)入gpmall.sql之后,退出數(shù)據(jù)庫,并設(shè)置數(shù)據(jù)庫服務(wù)開機(jī)自啟,命令如下:MariaDB[mall]>Ctrl-C--exit!Aborted[root@mall~]#systemctlenablemariadbCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/mariadb.serviceto/usr/lib/systemd/system/mariadb.service.6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置②Redis服務(wù)配置。Redis服務(wù)的配置比較簡(jiǎn)單,只需要修改Redis的配置文件,取消保護(hù)模式和訪問限制,具體操作步驟如下:[root@docker~]#vi/etc/redis.conf#編輯/etc/redis.conf配置文件找到bind這一行,將這一行注釋掉;找到protected-modeyes這一行,將yes改為no。6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置②Redis服務(wù)配置。修改完之后,保存退出文件,然后啟動(dòng)Redis服務(wù)并設(shè)置開機(jī)自啟,命令如下:[root@docker~]#systemctlstartredis[root@docker~]#systemctlenableredisCreatedsymlinkfrom/etc/systemd/system/multi-user.target.wants/redis.serviceto/usr/lib/systemd/system/redis.service.6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置③Nginx服務(wù)配置。將dist目錄下的文件(dist目錄在/opt/gpmall-single目錄下)復(fù)制到Nginx默認(rèn)項(xiàng)目路徑(首先清空默認(rèn)項(xiàng)目路徑下的文件)。[root@docker~]#rm-rf/usr/share/nginx/html/*[root@docker~]#cp-rvf/opt/gpmall-single/dist/*/usr/share/nginx/html/修改Nginx配置文件/etc/nginx/conf.d/default.conf,添加映射詳見教材。重啟Nginx服務(wù)并設(shè)置開機(jī)自啟,命令如下:[root@docker~]#systemctlrestartnginx[root@docker~]#systemctlenablenginx6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(2)服務(wù)配置④全局變量配置。最后,配置全局變量,修改/etc/hosts文件,修改項(xiàng)目全局配置文件如下:[root@docker~]#vi/etc/hosts#添加如下四行6kafka.mall6mysql.mall6redis.mall6zookeeper.mall配置完畢后保存并退出文件。完成上述所有配置后,gpmall商城應(yīng)用的所有基本服務(wù)及配置就準(zhǔn)備完畢了,接下來只要啟動(dòng)后端的jar包,就可以運(yùn)行g(shù)pmall商城應(yīng)用了。6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(3)啟動(dòng)應(yīng)用將提供的4個(gè)jar包按照順序啟動(dòng),啟動(dòng)命令如下:[root@dockergpmall-single]#nohupjava-jarshopping-provider-0.0.1-SNAPSHOT.jar&[root@dockergpmall-single]#nohupjava-jaruser-provider-0.0.1-SNAPSHOT.jar&[root@dockergpmall-single]#nohupjava-jargpmall-shopping-0.0.1-SNAPSHOT.jar&[root@dockergpmall-single]#nohupjava-jargpmall-user-0.0.1-SNAPSHOT.jar&6.2.1Compose編排服務(wù)案例部署gpmall

商城應(yīng)用介紹(3)啟動(dòng)應(yīng)用按照順序運(yùn)行4個(gè)jar包后,后端服務(wù)部署完畢,此時(shí)可以瀏覽器訪問商城首頁6,如圖所示。6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像通過上述實(shí)驗(yàn)手動(dòng)部署gpmall商城應(yīng)用,分析如何分解各依賴服務(wù)、制作容器鏡像、編排部署商城應(yīng)用。按照容器的運(yùn)行規(guī)則,一個(gè)容器提供一種服務(wù),在商城應(yīng)用中,用到了MariaDB數(shù)據(jù)庫服務(wù)、Redis緩存服務(wù)、Java環(huán)境、ZooKeeper服務(wù)、Kafka服務(wù)、前端Nginx服務(wù)、后端jar包服務(wù)。6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像通過仔細(xì)分析,Java環(huán)境是為了運(yùn)行jar包而安裝的,Kafka服務(wù)依賴ZooKeeper服務(wù),最后確定如果要容器化部署gpmall商城應(yīng)用,需要制作5個(gè)容器鏡像,分別如下:①M(fèi)ariaDB鏡像提供數(shù)據(jù)庫服務(wù)。②Redis鏡像提供緩存服務(wù)。③ZooKeeper鏡像提供協(xié)調(diào)服務(wù)。④Kafka鏡像提供發(fā)布訂閱消息服務(wù)。⑤Nginx鏡像提供前端界面與后端功能服務(wù)。6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像確定了要制作的鏡像后,可以根據(jù)上面實(shí)操的步驟,編寫Dockerfile文件,制作容器鏡像,最后通過docker-compose編排工具編排部署gpmall商城應(yīng)用。(1)制作Redis鏡像①首先創(chuàng)建制作Redis鏡像的工作目錄,此處在/opt目錄下創(chuàng)建Redis工作目錄。命令如下:[root@dockeropt]#mkdirredis②根據(jù)手動(dòng)安裝Redis和配置方式,在/opt/redis目錄下編寫Dockerfile文件,文件內(nèi)容如下:FROMcentos:centos7.5.1804MAINTAINERchinaskillEXPOSE6379RUNrm-rf/etc/yum.repos.d/*COPYftp.repo/etc/yum.repos.d/ftp.repo6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(1)制作Redis鏡像RUNyuminstallredis-yRUNsed-i"s/bind/bind/g"/etc/redis.confRUNsed-i"s/protected-mode.*/protected-modeno/g"/etc/redis.confCMDredis-server/etc/redis.conf從Dockerfile中可以看到,首先使用的基礎(chǔ)鏡像是CentOS7.5版本,將提供的centoscentos7.5.1804.tar鏡像包上傳至Docker節(jié)點(diǎn)的/root目錄下,然后加載,加載完畢后使用如下命令查看:[root@docker~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEcentoscentos7.5.1804cf49811e3cdb2yearsago200MB6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(1)制作Redis鏡像從Dockerfile中可以看到,在/opt/redis目錄下還需要編寫ftp.repo文件,具體內(nèi)容如下:[centos]name=centosgpgcheck=0enabled=1baseurl=6/centos[gpmall]name=gpmallgpgcheck=0enabled=1baseurl=6/gpmall-single/gpmall-repo6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(1)制作Redis鏡像可以看到此處需要在容器內(nèi)安裝Redis服務(wù),且使用FTP的方式進(jìn)行安裝,所以需要在宿主機(jī)docker節(jié)點(diǎn)安裝FTP服務(wù),然后將/opt目錄共享。接下來進(jìn)行鏡像的制作,確認(rèn)/opt/redis目錄下存在Dockerfile文件和ftp.repo文件,且基本環(huán)境也配置完畢,制作鏡像的命令如下:[root@dockerredis]#dockerbuild-tgpmall-redis:v1.0.SendingbuildcontexttoDockerdaemon3.072kBStep1/9:FROMcentos:centos7.5.1804--->cf49811e3cdbStep2/9:MAINTAINERchinaskill...忽略輸出...Successfullybuilt5ab933f160f5Successfullytaggedgpmall-redis:v1.06.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(1)制作Redis鏡像鏡像制作成功后,可以查看鏡像列表,如下所示:[root@dockerredis]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEgpmall-redisv1.05ab933f160f52minutesago243MB如果制作Redis鏡像失敗,則可以從YUM源排查問題,查看宿主機(jī)的FTP服務(wù)是否安裝成功,是否把/opt目錄設(shè)為訪問目錄,SELinux和Firewalld防火墻是否關(guān)閉,/opt目錄下的文件是否正確,ftp.repo文件是否準(zhǔn)確。6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(2)制作數(shù)據(jù)庫鏡像同樣地,首先要?jiǎng)?chuàng)建制作鏡像的工作目錄,命令如下:[root@docker~]#mkdir/opt/mariadb根據(jù)手動(dòng)安裝MariaDB和配置的方式,在/opt/mariadb目錄下編寫Dockerfile文件,文件內(nèi)容如下:FROMcentos:centos7.5.1804MAINTAINERchinaskillEXPOSE3306ENVLC_ALLen_US.UTF-8RUNrm-rf/etc/yum.repos.d/*COPYftp.repo/etc/yum.repos.d/ftp.repoRUNyuminstallmariadbmariadb-server-yCOPYsetup.sh/root/setup.shCOPYgpmall.sql/root/gpmall.sqlRUNchmod755-R/root/setup.shRUN/root/setup.shCMD["mysqld_safe"]6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(2)制作數(shù)據(jù)庫鏡像在/opt/mariadb目錄下編寫ftp.repo文件,文件內(nèi)容如下:[centos]name=centosgpgcheck=0enabled=1baseurl=6/centos[gpmall]name=gpmallgpgcheck=0enabled=1baseurl=6/gpmall-single/gpmall-repo6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(2)制作數(shù)據(jù)庫鏡像從Dockerfile中可以看到,復(fù)制setup.sh到容器內(nèi)部,該腳本是數(shù)據(jù)庫的操作腳本,setup.sh的內(nèi)容如下:#!/bin/bashmysqld_safe&sleep5mysql-e"createdatabasegpmall;usegpmall;source/root/gpmall.sql;"mysql-e"grantallprivilegeson*.*toroot@'localhost'identifiedby'123456';"mysql-uroot-p123456-e"grantallprivilegeson*.*toroot@'%'identifiedby'123456';"該腳本做了啟動(dòng)數(shù)據(jù)庫、創(chuàng)建庫、導(dǎo)入庫、設(shè)置權(quán)限等操作;Dockerfile下一步操作為復(fù)制gpmall.sql文件到容器中,設(shè)置setup.sh的權(quán)限,運(yùn)行腳本,最后啟動(dòng)MySQL。6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(2)制作數(shù)據(jù)庫鏡像梳理完Dockerfile文件之后,進(jìn)行鏡像的制作,確認(rèn)/opt/mariadb目錄下存在Dockerfile、ftp.repo、setup.sh和gpmall.sql文件,且基本環(huán)境也配置完畢,制作鏡像的命令如下:[root@dockermariadb]#dockerbuild-tgpmall-mariadb:v1.0.最后顯示Successfullybuilt,說明鏡像制作成功,可以查看鏡像列表,如下所示:[root@dockermariadb]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEgpmall-mariadbv1.08a5e6739f80f2minutesago833MB6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(3)制作ZooKeeper鏡像想要制作ZooKeeper鏡像,首先要?jiǎng)?chuàng)建工作目錄,命令如下:[root@docker~]#mkdir/opt/zookeeper根據(jù)手動(dòng)安裝ZooKeeper和配置的方式,在/opt/zookeeper目錄下編寫Dockerfile文件,文件內(nèi)容如下:FROMcentos:centos7.5.1804MAINTAINERchinaskillEXPOSE2181RUNrm-rf/etc/yum.repos.d/*COPYftp.repo/etc/yum.repos.d/ftp.repoRUNyuminstalljava-1.8.0-openjdkjava-1.8.0-openjdk-devel–yADDzookeeper-3.4.14.tar.gz/optRUNmv/opt/zookeeper-3.4.14/conf/zoo_sample.cfg/opt/zookeeper-3.4.14/conf/zoo.cfgCMD["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.shstart&&tail-f/etc/shadow"]6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(3)制作ZooKeeper鏡像從Dockerfile中可以看出,其使用了CentOS7.5的基礎(chǔ)鏡像;作者是chinaskill;暴露了2181端口;刪除容器內(nèi)部原有的repo文件;復(fù)制ftp.repo到容器內(nèi)部,ftp.repo文件的內(nèi)容如下:[centos]name=centosgpgcheck=0enabled=1baseurl=6/centos[gpmall]name=gpmallgpgcheck=0enabled=1baseurl=6/gpmall-single/gpmall-repo6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(3)制作ZooKeeper鏡像ftp.repo文件與之前無異,只要確認(rèn)宿主機(jī)的FTP服務(wù)正常即可。回到Dockerfile文件,接下來安裝Java環(huán)境,將zookeeper-3.4.14.tar.gz軟件包傳至容器內(nèi)部的/opt目錄下,將配置文件改名,最后運(yùn)行ZooKeeper服務(wù)。梳理完Dockerfile文件之后,進(jìn)行鏡像的制作,確認(rèn)/opt/zookeeper目錄下存在Dockerfile、ftp.repo和zookeeper-3.4.14.tar.gz文件,且基本環(huán)境也配置完畢,制作鏡像的命令如下:[root@dockerzookeeper]#dockerbuild-tgpmall-zookeeper:v1.0.鏡像制作成功,可以查看鏡像列表,如下所示:REPOSITORYTAGIMAGEIDCREATEDSIZEgpmall-zookeeperv1.03d2389d079442minutesago540MB6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(4)制作Kafka鏡像制作Kafka鏡像的方式有點(diǎn)特殊,因?yàn)镵afka服務(wù)需要依賴于ZooKeeper服務(wù),也就是說,如果需要單獨(dú)制作一個(gè)Kafka服務(wù)的鏡像,則還需要在容器中提前安裝ZooKeeper服務(wù)。其實(shí)ZooKeeper和Kafka這兩個(gè)服務(wù)可以由一個(gè)鏡像提供,感興趣的讀者可以嘗試制作一個(gè)鏡像,提供ZooKeeper和Kafka服務(wù)。創(chuàng)建制作Kafka服務(wù)鏡像的工作目錄,命令如下:[root@docker~]#mkdir/opt/kafka根據(jù)手動(dòng)安裝Kafka和配置的方式,在/opt/kafka目錄下編寫Dockerfile文件,文件內(nèi)容如下:FROMcentos:centos7.5.1804MAINTAINERchinaskillEXPOSE9092RUNrm-rf/etc/yum.repos.d/*COPYftp.repo/etc/yum.repos.d/ftp.repo6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像

(4)制作Kafka鏡像RUNyuminstalljava-1.8.0-openjdkjava-1.8.0-openjdk-devel–yADDzookeeper-3.4.14.tar.gz/optRUNmv/opt/zookeeper-3.4.14/conf/zoo_sample.cfg/opt/zookeeper-3.4.14/conf/zoo.cfgADDkafka_2.11-1.1.1.tgz/optCMD["sh","-c","/opt/zookeeper-3.4.14/bin/zkServer.shstart&&/opt/kafka_2.11-1.1.1/bin/kafka-server-start.sh/opt/kafka_2.11-1.1.1/config/perties"]

從以上Dockerfile中可以看出,它使用CentOS7.5基礎(chǔ)鏡像;作者是chinaskill;暴露了9092端口;刪除容器內(nèi)部原有的repo文件;復(fù)制ftp.repo文件到容器內(nèi)部;6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(4)制作Kafka鏡像ftp.repo文件的內(nèi)容如下:[centos]name=centosgpgcheck=0enabled=1baseurl=6/centos[gpmall]name=gpmallgpgcheck=0enabled=1baseurl=6/gpmall-single/gpmall-repoftp.repo文件仍然與之前的相同。6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(4)制作Kafka鏡像回到Dockerfile文件,安裝Java環(huán)境,將zookeeper-3.4.14.tar.gz軟件包傳至容器內(nèi)部的/opt目錄下,修改ZooKeeper的配置文件,再將kafka_2.11-1.1.1.tgz軟件包傳至容器內(nèi)部的/opt目錄下,啟動(dòng)ZooKeeper服務(wù)和Kafka服務(wù)。梳理完Dockerfile文件之后,進(jìn)行鏡像的制作,確認(rèn)/opt/Kafka目錄下存在Dockerfile、ftp.repo、zookeeper-3.4.14.tar.gz和kafka_2.11-1.1.1.tgz文件,且基本環(huán)境也配置完畢,制作鏡像的命令如下:[root@dockerkafka]#dockerbuild-tgpmall-kafka:v1.0.鏡像制作成功,可以查看鏡像列表,如下所示:[root@dockerkafka]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEgpmall-kafkav1.0361c1f294c534minutesago603MB6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(5)制作Nginx鏡像制作最后一個(gè)Nginx鏡像,創(chuàng)建工作目錄,命令如下:[root@docker~]#mkdir/opt/nginx根據(jù)手動(dòng)安裝Nginx和配置的方式,編寫Dockerfile文件,文件內(nèi)容如下:FROMcentos:centos7.5.1804MAINTAINERchinaskillEXPOSE80443808180828083RUNrm-rf/etc/yum.repos.d/*COPYftp.repo/etc/yum.repos.d/ftp.repoRUNyuminstallnginxjava-1.8.0-openjdkjava-1.8.0-openjdk-devel–yCOPY*.jar/root/ADDdist.tar/root/RUNrm-rf/usr/share/nginx/html/*RUNmv/root/dist/*/usr/share/nginx/html/COPYdefault.conf/etc/nginx/conf.d/default.confCOPYsetup.sh/root/setup.shRUNchmod755/root/setup.shCMD["nginx","-g","daemonoff;"]6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(5)制作Nginx鏡像從上述Dockerfile中可以看出,其使用了CentOS7.5的基礎(chǔ)鏡像;作者是chinaskill;暴露了80、443、8081、8082、8083端口,其中80是Web服務(wù)端口,443是HTTPS服務(wù)端口,8081/8083/8083是后端服務(wù)的端口;刪除容器內(nèi)部原有的repo文件;復(fù)制ftp.repo文件到容器內(nèi)部,ftp.repo文件的內(nèi)容如下:[centos]name=centosbaseurl=6/centosgpgcheck=0enabled=1[gpmall]name=gpmallbaseurl=6/gpmall-single/gpmall-repogpgcheck=0enabled=16.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(5)制作Nginx鏡像ftp.repo文件仍然與之前的相同。回到Dockerfile文件,安裝Java環(huán)境,復(fù)制所有的jar包到容器內(nèi)部的/root目錄下,將前端文件壓縮包傳至容器內(nèi)部的/root目錄下,刪除Nginx工作目錄下原有的文件,將新的前端文件移動(dòng)到Nginx工作目錄,復(fù)制Nginx的default.conf替換容器中原有的配置文件,復(fù)制setup.sh到容器內(nèi),setup.sh的內(nèi)容如下所示:#!/bin/bashnohupjava-jar/root/shopping-provider-0.0.1-SNAPSHOT.jar&sleep10nohupjava-jar/root/user-provider-0.0.1-SNAPSHOT.jar&sleep10nohupjava-jar/root/gpmall-shopping-0.0.1-SNAPSHOT.jar&sleep10nohupjava-jar/root/gpmall-user-0.0.1-SNAPSHOT.jar&sleep10nginx6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(5)制作Nginx鏡像setup.sh中的內(nèi)容是啟動(dòng)jar包以及Nginx。繼續(xù)回到Dockerfile文件,對(duì)setup.sh賦予執(zhí)行權(quán)限,最后在容器啟動(dòng)時(shí),運(yùn)行Nginx服務(wù)。梳理完Dockerfile文件之后,進(jìn)行鏡像的制作,確認(rèn)/opt/nginx目錄下存在Dockerfile、ftp.repo、dist.tar、default.conf、setup.sh和4個(gè)jar包文件,且基本環(huán)境也配置完畢,制作鏡像命令如下:[root@dockernginx]#dockerbuild-tgpmall-nginx:v1.0.鏡像制作成功,可以查看鏡像列表,如下所示:[root@dockernginx]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEgpmall-nginxv1.0a3b831dfcb124minutesago711MB6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(6)編排部署gpmall商城有了上述的5個(gè)容器鏡像后,需要對(duì)這些鏡像進(jìn)行編排部署,首先創(chuàng)建docker-compose的工作目錄,命令如下:[root@dockeropt]#mkdirgpmall在/opt/gpmall目錄下,創(chuàng)建docker-compose.yaml文件,文件內(nèi)容詳見教材P90-91。從Yaml文件中可以看到,它啟動(dòng)了5個(gè)容器,前4個(gè)為基礎(chǔ)服務(wù)容器,即Redis、數(shù)據(jù)庫、ZooKeeper和Kafka,分別指定了容器名、鏡像名、映射端口和重啟規(guī)則。最后啟動(dòng)的是Nginx容器,指定了鏡像名和容器名,并依賴于前4個(gè)容器,在啟動(dòng)時(shí)執(zhí)行容器內(nèi)的setup.sh腳本。編寫完docker-compose.yaml文件后,進(jìn)行編排啟動(dòng),命令如下:[root@dockergpmall]#docker-composeup-d6.2.1Compose編排服務(wù)案例部署容器化構(gòu)建商城鏡像(6)編排部署gpmall商城docker-compose編排啟動(dòng)成功后,可以看到容器正常啟動(dòng),查看端口開放情況,命令如下:[root@dockergpmall]#netstat-ntpl端口開放情況正常,可以使用瀏覽器訪問6:83,如圖所示。6.2.1Compose編排服務(wù)案例部署技能訓(xùn)練1.成功部署docker-compose,并使用命令查詢其版本。2.通過編排服務(wù)部署gpmall商城服務(wù),并使用curl命令訪問其主頁。謝謝!容器云服務(wù)架構(gòu)與運(yùn)維單元7DockerSwarm編排服務(wù)學(xué)習(xí)目標(biāo)了解DockerSwarm容器集群服務(wù)的基本概念、架構(gòu)與特點(diǎn);掌握DockerSwarm的使用方法與技巧等;掌握DockerSwarm集群服務(wù)在工作中的實(shí)際運(yùn)用;掌握DockerSwarm集群的搭建使用和運(yùn)維實(shí)戰(zhàn)等技能。7.1認(rèn)識(shí)DockerSwarm編排服務(wù)7.2使用DockerSwarm編排服務(wù)7.1認(rèn)識(shí)DockerSwarm編排服務(wù)

1.DockerSwarm簡(jiǎn)介Swarm是Docker公司推出的用來管理Docker集群的平臺(tái),幾乎全部用Go語言來完成開發(fā),它將一群Docker宿主機(jī)變成一個(gè)單一的虛擬主機(jī)。Swarm使用標(biāo)準(zhǔn)的DockerAPI接口作為其前端的訪問入口,換言之,各種形式的DockerClient(compose、docker-py等)均可以直接與Swarm通信,甚至Docker本身都可以很容易地與Swarm集成,這大大方便了用戶將原本基于單節(jié)點(diǎn)的系統(tǒng)移植到Swarm上。同時(shí)Swarm內(nèi)置了對(duì)Docker網(wǎng)絡(luò)插件的支持,用戶也可以很容易地部署跨主機(jī)的容器集群服務(wù)。從Docker1.12.0版本開始,DockerSwarm包含在Docker引擎中,并且已經(jīng)內(nèi)置了服務(wù)發(fā)現(xiàn)工具,用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論