版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第 3 章 Docker 高級實(shí)踐在這一部分我們來介紹一些Docker的高級內(nèi)容: Dockerle 和 Docker compose3.1 Dockerle3.1.1 Dockerle簡介什么是Dockerle Dockerle類似于我們學(xué)習(xí)過的化的方式實(shí)現(xiàn)出來。Dockerle的作用 1、找一個鏡像: ubuntu 2、創(chuàng)建一個容器: docker run ubuntu3、進(jìn)入容器: docker exec -it 容器 命令4、操作: 各種應(yīng)用配置.5、構(gòu)造新鏡像: docker commit,將我們在上面學(xué)到的docker鏡像,使用自動Dockerle 使用準(zhǔn)則 1、大: 首字母必須大
2、寫D2、空: 盡量將Dockerle放在空目錄中。3、單: 每個容器盡量只有一個功能。4、少: 執(zhí)行令越少越好。Dockerle 分為四部分:基礎(chǔ)鏡像信息 從哪來?維護(hù)者信息 我是誰? 鏡像操作指令 怎么干?容器啟動時執(zhí)行指令 嗨!Dockerle文件內(nèi)容:首行注釋信息指令(大寫) 參數(shù)Dockerle使用命令:3.1.2 Dockerle快速入門接下來我們快速的使用Dockerle來基于ubuntu創(chuàng)建一個定制化的鏡像:nginx。dockerle內(nèi)容1234567891011121314# 構(gòu)建一個基于ubuntu的docker定制鏡像# 基礎(chǔ)鏡像FROM ubuntu# 鏡像作者M(jìn)AIN
3、TAINER panda# 執(zhí)行命令RUN mkdir hello RUN mkdir worldRUN sed -i 's/mi/g'/etc/apt/sources.listRUN sed -i 's/s/mi/g'/etc/apt/sources.list RUN apt-get updateRUN apt-get install nginx -y1 #創(chuàng)建Dockerfile目錄2 :$ mkdir ./docker/images/nginx -p3 :$ cd docker/images/nginx/4 #創(chuàng)建Dockerfile文件5 :/docke
4、r/images/nginx$ vim Dockerfile1 #構(gòu)建鏡像命令格式:2 docker build -t 鏡像名:版本號Dockerfile所在目錄3 #構(gòu)建樣例:4 docker build -t nginx:v0.2 /opt/dockerfile/nginx/5 #參數(shù)詳解:6 -t指定構(gòu)建后的鏡像信息,7 /opt/dockerfile/nginx/則代表Dockerfile存放位置,如果是當(dāng)前目錄,則用 . (點(diǎn))表示151617# 對外端口EXPOSE80進(jìn)行構(gòu)建操作優(yōu)化剛剛的Dockerle文件123456789# 構(gòu)建一個基于ubuntu的docker定制鏡像#
5、基礎(chǔ)鏡像FROM ubuntu# 鏡像作者M(jìn)AINTAINER panda# 執(zhí)行命令RUN mkdir hello1 #構(gòu)建鏡像2 :/docker/images/nginx$ docker build -t ubuntu-nginx:v0.1 .3 #查看新生成鏡像4 :/docker/images/nginx$ docker images5 REPOSITORYTAGIMAGE IDCREATEDSIZE6 ubuntu-nginx v0.1a853de1b8be4 9 seconds ago 208MB7 nginxlatest e548f1a579cf 6 days ago109MB
6、8 ubuntulatest 0458a4468cbc 4 weeks ago112MB9 #查看構(gòu)建歷史10 :/docker/images/nginx$ docker history a853de1b8be411 IMAGECREATEDCREATED BYSIZE COMMENT12 #鏡像創(chuàng)建時間依賴命令大小評論13 a853de1b8be4 41 seconds ago/bin/sh -c #(nop) EXPOSE 80 0B14 925825b680fd 42 seconds ago/bin/sh -c apt-get install nginx -y 56.5MB15 4c57
7、d6c99603 About a minute ago /bin/sh -c apt-get update 40MB16 b6d030a0d123 About a minute ago /bin/sh -c sed - i's/s/mir 2.77kB17 3357bf8069ca About a minute ago /bin/sh -c sed - i's/mirr 2.77kB18 7bfb90c1e20d About a minute ago /bin/sh -c mkdir world 0B19 972d6ab76d01 About a minute ago /bin
8、/sh -c mkdir hello 0B20 a76394bfad01 About a minute ago /bin/sh -c #(nop) MAINTAINER panda kstwoak4 0B21 #注意:22 因?yàn)槿萜鳑]有啟動命令,所以肯定不了231011RUN mkdir world RUN sed -i 's/etc/apt/sources.list RUN sed -i 's/s/etc/apt/sources.list RUN apt-get updateRUN apt-get install nginx/mi/g'12/mi/g'1314
9、151617-y# 對外端口EXPOSE 80運(yùn)行修改好的Dockerle進(jìn)行構(gòu)建Dockerle構(gòu)建過程: 從基礎(chǔ)鏡像1運(yùn)行一個容器A遇到一條Dockerle指令,都對容器A做一次修改操作執(zhí)行完畢一條命令,提交生成一個新鏡像2再基于新的鏡像2運(yùn)行一個容器B遇到一條Dockerle指令,都對容器B做一次修改操作執(zhí)行完畢一條命令,提交生成一個新鏡像31 :/docker/images/nginx$ docker build -t ubuntu-nginx:v0.2 .2 :/docker/images/nginx$ docker history ubuntu-nginx:v0.23 IMAGEC
10、REATEDCREATED BY SIZECOMMENT4 eaba9bd1c4ac 3 minutes ago/bin/sh -c #(nop) EXPOSE 80 0B5 ed08d6e29eb1 3 minutes ago/bin/sh -c apt-get update && apt-get install 96.5MB6 eef6238ec5bd 6 minutes ago/bin/sh -c sed -i 's/mirr 2.77kB7 58f755a1b29c 6 minutes ago/bin/sh -c mkdir hello && m
11、kdir world 0B8 a76394bfad01 25 minutes ago /bin/sh -c #(nop) MAINTAINER panda kstwoak4 0B9 #對比兩個鏡像的大小10 :/docker/images/nginx$ docker images11 REPOSITORYTAGIMAGE IDCREATEDSIZE12 ubuntu-nginx v0.2 eaba9bd1c4ac 7 seconds ago208MB13 ubuntu-nginx v0.1 a853de1b8be4 21 minutes ago 208MB14 #深度對比連個鏡像的大小15 :
12、/docker/images/nginx$ docker inspect a853de1b8be4 16"Size": 208237435,17"VirtualSize": 208237435,18 :/docker/images/nginx$ docker inspect eaba9bd1c4ac 19"Size": 208234662,20"VirtualSize": 208234662,*構(gòu)建過程鏡像介紹構(gòu)建過程中,創(chuàng)建了很多鏡像,這些中間鏡像,我們可以直接使用來啟動容器,通過查看容器效果,從 側(cè)面能看到我們
13、每次構(gòu)建的效果。提供了鏡像調(diào)試的能力3.1.3 基礎(chǔ)指令詳解FROMMAINTAINERRUN1 RUN2 #格式:3 RUN <command>(shell模式)4 RUN"executable", "param1", "param2"(exec 模式)5 #解釋:6 #表示當(dāng)前鏡像構(gòu)建時候運(yùn)行令,如果有確認(rèn)輸入的話,一定要在命令中添加 -y7 #如果命令較長,那么可以在命令結(jié)尾使用 來換行8 #生產(chǎn)中,推薦使用上面數(shù)組的格式9 #注釋:10 #shell模式:類似于 /bin/bash -c command11 #舉例
14、: RUN echo hello12 #exec模式:類似于 RUN"/bin/bash", "-c", "command"13 #舉例: RUN"echo", "hello"1 MAINTAINER2 #格式:3 MAINTAINER <name>4 #解釋:5 #指定該dockerfile文件的維護(hù)者信息。類似我們在docker commit 時候使用-a參數(shù)指定的信息1 FROM2 #格式:3 FROM <image>4 FROM <image>:<
15、;tag>5 #解釋:6 #FROM 是 Dockerfile 里的第一條而且只能是除了首行注釋之外的第一條指令7 #可以有多個FROM語句,來創(chuàng)建多個image8 #FROM 后面是有效的鏡像名稱,如果該鏡像沒有在你的本地倉庫,那么就會從倉庫Pull取, 如果也沒有,就報錯失敗9 #下面所有的 系統(tǒng)可執(zhí)行指令 在 FROM 的鏡像中執(zhí)行。1011EXPOSE3.1.4 運(yùn)行時指令詳解CMD1234567891011121314151617181920212223CMD#格式:CMD CMD CMD#解釋:(exec 模式)推薦(shell模式)提供給ENTRYPOINT的默認(rèn)參數(shù);&q
16、uot;executable","param1","param2"command param1 param2"param1","param2"#CMD指定容器啟動時默認(rèn)執(zhí)行令#每個Dockerfile只能有一條CMD命令,如果指定了多條,只有最后一條會被執(zhí)行#如果你在啟動容器的時候使用docker run 指定的運(yùn)行命令,那么會覆蓋CMD命令。#舉例: CMD "/usr/sbin/nginx","-g","daemon off;"nginx命令
17、設(shè)置配置文件外的全局指令守護(hù)程序開啟方式 關(guān)閉"/usr/sbin/nginx" "-g""daemon off;"#CMD指令實(shí)踐:#修改Dockerfile文件內(nèi)容:#在上一個Dockerfile文件內(nèi)容基礎(chǔ)上,末尾增加下面一句話: CMD "/usr/sbin/nginx","-g","daemon off;"#構(gòu)建鏡像:/docker/images/nginx$ docker build -t ubuntu-nginx:v0.3 . #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添
18、加執(zhí)行命令:/docker/images/nginx$ docker run -name nginx-1 -itd ubuntu-nginx:v0.3 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,添加執(zhí)行命令/bin/bash:/docker/images/nginx$ docker run -name nginx-2 -itd ubuntu- nginx:v0.3 /bin/bashdocker ps2425262728#發(fā)現(xiàn)兩個容器令行是不一樣的itcastitcast-virtual-machine:/docker/images/nginx$docker ps -aCREATEDCONTAINER I
19、D IMAGENAMESCOMMAND29921d00c3689f ubuntu-nginx:v0.3 "/bin/bash"nginx-25 seconds ago1 EXPOSE2 #格式:3 EXPOSE <port> <port>.4 #解釋:5 設(shè)置Docker容器對外的端,Docker為了安全,自動對外打開端口,如果需要外部提供,6 還需要啟動容器時增加-p或者-P參數(shù)對容器的端口進(jìn)行分配。ENTRYPOINT1 ENTRYPOINT2 #格式:3 ENTRYPOINT "executable", "para
20、m1","param2" (exec 模式)4 ENTRYPOINT command param1 param2 (shell 模式)5 #解釋:6 #和CMD 類似都是配置容器啟動后執(zhí)行令,并且被docker run 提供的參數(shù)覆蓋。7 #每個Dockerfile 中只能有一個ENTRYPOINT,當(dāng)指定多個時,只有最后一個起效。8 #生產(chǎn)中我們可以同時使用ENTRYPOINT 和CMD,9 #想要在docker run 時被覆蓋,可以使用"docker run -entrypoint"10 #ENTRYPOINT指令實(shí)踐:11 #修改Doc
21、kerfile文件內(nèi)容:12 #在上一個Dockerfile 文件內(nèi)容基礎(chǔ)上,修改末尾的CMD 為ENTRYPOINT:13 ENTRYPOINT "/usr/sbin/nginx","-g","daemon off;" 1415 #構(gòu)建鏡像16 :/docker/images/nginx$ docker build -t ubuntu-nginx:v0.4 . 1718 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令19 :/docker/images/nginx$ docker run -name nginx-3 -itd ubun
22、tu- nginx:v0.42021 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,添加執(zhí)行命令/bin/bash22 :/docker/images/nginx$ docker run -name nginx-4 -itd ubuntu- nginx:v0.4 /bin/bash2324 #查看ENTRYPOINT是否被覆蓋25 :/docker/images/nginx$ docker ps -a26 CONTAINER ID IMAGECOMMANDCREATED NAMES27 e7a2f0d0924e ubuntu-nginx:v0.4 "/usr/sbin/nginx -g "
23、59 seconds agonginx-428 c92b2505e28e ubuntu-nginx:v0.4"/usr/sbin/nginx -g "About a minute agonginx-32930 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,使用-entrypoint參數(shù),添加執(zhí)行命令/bin/bash31 docker run -entrypoint "/bin/bash" -name nginx-5 -itd ubuntu- nginx:v0.43233 #查看ENTRYPOINT是否被覆蓋34 :/docker/images/nginx$ docke
24、r ps35 CONTAINER ID IMAGECOMMANDCREATED NAMES36 6c54726b2d96 ubuntu-nginx:v0.4"/bin/bash"3 seconds ago nginx-5373031e6c39be8e696 ubuntu-nginx:v0.3 "/usr/sbin/nginx -g " 14 seconds ago nginx-1CMD ENTRYPOINT 綜合使用實(shí)踐3.1.5 文件編輯指令詳解ADD1234567891011#ADD#格式:ADD <src>. <dest>A
25、DD "<src>",. "<dest>"#解釋:#將指定的<src> 文件到容器文件系統(tǒng)中的<dest>#src 指的是宿主機(jī),dest 指的是容器#所有拷貝到container 中的文件和文件夾權(quán)限為0755,uid #如果文件是可識別的壓縮格式,則docker 會幫忙解壓縮#注意:和gid 為0#1、如果源路徑是個文件,且目標(biāo)路徑是以/ 結(jié)尾, 則docker 會把目標(biāo)路徑當(dāng)作一個目錄,會把源文件拷貝到該目錄下;#如果目標(biāo)路徑不存在,則會自動創(chuàng)建目標(biāo)路徑。121 #修改Dockerfile文件內(nèi)容:
26、23 # 在上一個Dockerfile文件內(nèi)容基礎(chǔ)上,修改末尾的ENTRYPOINT 45 :/docker/images/nginx$ vim Dockerfile6 ENTRYPOINT "/usr/sbin/nginx" 7CMD "-g"8 #構(gòu)建鏡像9 :/docker/images/nginx$ docker build -t ubuntu-nginx:v0.5 .10 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令11 :/docker/images/nginx$ docker run -name nginx-6 -d ubuntu-ngin
27、x:v0.5 1213 #查看效果14 :/docker/images/nginx$ docker ps -a15 CONTAINER IDIMAGECOMMANDCREATED NAMES16 e28875d281ebubuntu-nginx:v0.5"/usr/sbin/nginx -g"9 seconds agonginx-617 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令,覆蓋cmd的參數(shù) -g "daemon off;"18 :/docker/images/nginx$ docker run -name nginx-7 -d ubuntu-n
28、ginx:v0.5 -g "daemon off;"1920 #查看效果21 itcastitcast-virtual-machine:/docker/images/nginx$ docker ps -a22 CONTAINER IDIMAGECOMMANDCREATED NAMES23 e5addad86ef5ubuntu-nginx:v0.5"/usr/sbin/nginx -g "5 seconds ago nginx-724 #注釋:25 #任何docker run設(shè)置令參數(shù)或者CMD指令令,都將作為ENTRYPOINT 指令令參數(shù),追加到ENT
29、RYPOINT指令之后131415#2、如果源路徑是個文件,且目標(biāo)路徑是不是以/ 結(jié)尾,則docker 會把目標(biāo)路徑當(dāng)作一個文件。1617#如果目標(biāo)路徑不存在,會以目標(biāo)路徑為名創(chuàng)建一個文件,內(nèi)容同源文件;#如果目標(biāo)文件是個存在的文件,會用源文件覆蓋它,當(dāng)然只是內(nèi)容覆蓋,文件名還是目標(biāo)文件名。#如果目標(biāo)文件實(shí)際是個存在的目錄,則會源文件拷貝到該目錄下。注意,這種情況下,最好顯示的以/18結(jié)尾,以避免。192021#3、如果源路徑是個目錄,且目標(biāo)路徑不存在,則docker 會自動以目標(biāo)路徑創(chuàng)建一個目錄,把源路徑目錄下的文件拷貝進(jìn)來。#如果目標(biāo)路徑是個已經(jīng)存在的目錄,則docker 會把源路徑目錄下
30、的文件拷貝到該目錄下。2223242526272829303132333435363738394041424344454647484950515253545556575859606162636465#4、如果源文件是個壓縮文件,則docker 會自動幫解壓到指定的容器目錄中。#ADD實(shí)踐:#拷貝普通文件:/docker/images/nginx$ vim Dockerfile#Dockerfile文件內(nèi)容# 構(gòu)建一個基于ubuntu的docker定制鏡像# 基礎(chǔ)鏡像FROM ubuntu # 鏡像作者M(jìn)AINTAINER panda# 執(zhí)行命令A(yù)DD RUN RUNRUN"sourc
31、es.list","/etc/apt/sources.list"apt-get apt-getapt-getclean updateinstall nginx -y# 對外端口EXPOSE 80#構(gòu)建鏡像:/docker/images/nginx$ docker build -t ubuntu-nginx:v0.6.#根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令進(jìn)入容器查看效果docker run -name nginx-8 -it ubuntu-nginx:v0.6#拷貝壓縮文件tar zcvf this.tar.gz ./* #Dockerfile文件內(nèi)容.#
32、執(zhí)行命令.# 增加文件ADD "linshi.tar.gz","/nihao/".#構(gòu)建鏡像:/docker/images/nginx$ docker build -t ubuntu-nginx:v0.7 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令進(jìn)入容器查看效果docker run -name nginx-9 -it ubuntu-nginx:v0.7.:/docker/images/nginx$ docker run -name nginx-9 -it ubuntu-nginx:v0.7COPYVOLUME1 #COPY2 #格式:3 COPY &
33、lt;src>. <dest>4COPY "<src>",. "<dest>"5 #解釋:6 #COPY 指令和ADD 指令功能和使用方式類似。只是COPY 指令做自動解壓工作。7 #單純文件場景,Docker 推薦使用COPY8 #COPY實(shí)踐9 #修改Dockerfile文件內(nèi)容:10 # 構(gòu)建一個基于ubuntu的docker定制鏡像11 # 基礎(chǔ)鏡像12 FROM ubuntu13 # 鏡像作者14 MAINTAINER panda15 # 執(zhí)行命令16 ADD "sources.list&qu
34、ot;,"/etc/apt/sources.list"17 RUN apt-get clean18 RUN apt-get update19 RUN apt-get install nginx -y20 COPY "index.html","/var/www/html/"21 # 對外端口22 EXPOSE 8023 #運(yùn)行時默認(rèn)命令24 ENTRYPOINT "/usr/sbin/nginx","-g","daemon off;"25 index.html 文件內(nèi)容:26
35、<h1>hello world </h1>27 <h1>hello docker </h1>28 <h1>hello nginx</h1> 2930 #構(gòu)建鏡像31 :/docker/images/nginx$ docker build -t ubuntu-nginx:v0.8 .32 #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令33 :/docker/images/nginx$ docker run -name nginx-10 -itd ubuntu-nginx:v0.834 #查看nginx-10信息35 :/doc
36、ker/images/nginx$docker inspect nginx-1036 #瀏覽器nginx查看效果VOLUME實(shí)踐3.1.6 環(huán)境指令詳解ENVENV實(shí)踐12#ENV實(shí)踐:#命令行創(chuàng)建ENV的容器1 #ENV2 #格式:3 ENV <key> <value>(一次設(shè)置一個環(huán)節(jié)變量)4 ENV <key>=<value> .(一次設(shè)置一個或多個環(huán)節(jié)變量)5 #解釋:6 #設(shè)置環(huán)境變量,可以在RUN 之前使用,然后RUN 命令時調(diào)用,容器啟動時這些環(huán)境變量都會被指定1 #VOLUME實(shí)踐2 #修改Dockerfile文件內(nèi)容:3 #將C
37、OPY替換成為VOLUME4 :/docker/images/nginx$vim Dockerfile5 VOLUME "/helloworld/" 6 .7 #構(gòu)建鏡像8 :/docker/images/nginx$docker build -t ubuntu-nginx:v0.9 .9 #創(chuàng)建數(shù)據(jù)卷容器10 :/docker/images/nginx$docker run -itd -name nginx-11 ubuntu-nginx:v0.911 #查看鏡像信息12 :/docker/images/nginx$docker inspect nginx-1113 #驗(yàn)
38、證操作14 :/docker/images/nginx$docker run -itd -name vc-nginx-1 -volumes-from nginx-11 nginx15 :/docker/images/nginx$docker run -itd -name vc-nginx-2 -volumes-from nginx-11 nginx16 #進(jìn)入容器117 :/docker/images/nginx$docker exec -it vc-nginx-1 /bin/bash18 :/# echo 'nihao itcast' > helloworld/niha
39、o.txt19 #進(jìn)入容器220 :/docker/images/nginx$ docker exec -it vc-nginx-2 /bin/bash21 :/# cat helloworld/nihao.txt1 #VOLUME2 #格式:3 VOLUME "/data"4 #解釋:5 #VOLUME 指令可以在鏡像中創(chuàng)建掛載點(diǎn),這樣只要通過該鏡像創(chuàng)建的容器都有了掛載點(diǎn)6 #通過VOLUME 指令創(chuàng)建的掛載點(diǎn),無法指定主機(jī)上對應(yīng)的目錄,是自動生成的。7 #舉例:8 VOLUME "/var/lib/tomcat7/webapps/"WORKDIRWO
40、RKDIR實(shí)踐1234567891011121314#WORKDIR實(shí)踐:#修改Dockerfile文件內(nèi)容:# 在上一個Dockerfile 文件內(nèi)容基礎(chǔ)上,在RUN 下面增加一個WORKDIR WORKDIR /nihao/itcast/RUN "touch","itcast1.txt" WORKDIR /nihaoRUN "touch","itcast2.txt" WORKDIR itcastRUN "touch","itcast3.txt".#構(gòu)建鏡像:/docker
41、/images/nginx$ docker build -t ubuntu-nginx:v0.11 . #根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令docker run -name nginx-13 -itd ubuntu-nginx:v0.111 #WORKDIR2 #格式:3 WORKDIR /path/to/workdir (shell 模式)4 #解釋:5 #切換目錄,為后續(xù)的RUN、CMD、ENTRYPOINT 指令配置工作目錄。相當(dāng)于cd6 #可以多次切換(相當(dāng)于cd 命令),7 #也可以使用多個WORKDIR 指令,后續(xù)命令如果參數(shù)是相對路徑,則會基于之前命令指定的路徑。例如8
42、#舉例:9 WORKDIR /a10 WORKDIR b11 WORKDIR c12 RUN pwd13 #則最終路徑為/a/b/c3456789101112131415161718:$ docker run -e NIHAO="helloworld" -itd -name ubuntu-111 ubuntu/bin/bash#進(jìn)入容器ubuntu-111:$ docker exec -it ubuntu-111 /bin/bash:/# echo $NIHAO#修改Dockerfile文件內(nèi)容:#在上一個Dockerfile 文件內(nèi)容基礎(chǔ)上,在RUN 下面增加一個ENV
43、ENV NIHAO=helloworld.#構(gòu)建鏡像docker build -t ubuntu-nginx:v0.10 .#根據(jù)鏡像創(chuàng)建容器,創(chuàng)建時候,不添加執(zhí)行命令docker run -name nginx-12 -itd ubuntu-nginx:v0.10 docker exec -it nginx-12 /bin/bashecho $NIHAOUSER與ARG3.1.7 觸發(fā)器指令詳解觸發(fā)器指令觸發(fā)器實(shí)踐123456789101112#編輯Dockerfile:/docker/images/nginx$ #內(nèi)容如下:vim Dockerfile# 構(gòu)建一個基于ubuntu的dock
44、er定制鏡像# 基礎(chǔ)鏡像FROM ubuntu # 鏡像作者M(jìn)AINTAINER panda# 執(zhí)行命令A(yù)DDRUN RUN"sources.list","/etc/apt/sources.list" apt-get cleanapt-get update1 ONBUILD2 #格式:3 ONBUILD command4 #解釋:5 #當(dāng)一個鏡像A被作為其他鏡像B的基礎(chǔ)鏡像時,這個觸發(fā)器才會被執(zhí)行,6 #新鏡像B在構(gòu)建的時候,會觸發(fā)器中的指令。7 #使用場景對于版本和方便傳輸,適用于其他用戶。81 #USER2 #格式:3 USER daemon4 #解
45、釋:5 #指定運(yùn)行容器時的用戶名和UID,后續(xù)的RUN 指令也會使用這里指定的用戶。6 #如果不輸入任何信息,表示默認(rèn)使用root 用戶78 #ARG9 #格式:10 ARG <name>=<default value>11 #解釋:12 #ARG 指定了一個變量在docker build 的時候使用,可以使用-build-arg <varname>=<value>來指定參數(shù)的值,不過13 #如果構(gòu)建的時候不指定就會報錯。141516#進(jìn)入鏡像docker exec -it nginx-13 /bin/bash3.1.8 Dockerle構(gòu)建緩存
46、我們第一次構(gòu)建很慢,之后的構(gòu)建都會很快,因?yàn)樗麄冇玫搅藰?gòu)建的緩存。3.2 Dockerle構(gòu)建go環(huán)境接下來我們就來做一個工作實(shí)踐,搭建一個go環(huán)境,然后嘗試使用Dockerle的方式,構(gòu)造一個鏡像。3.2.1 項(xiàng)目描述1 #取消緩存:2 docker build -no-cache -t 鏡像名:鏡像版本Dockerfile位置1 #構(gòu)建子鏡像Dockerfile文件2 FROM ubuntu-nginx:v0.123 MAINTAINER panda4 EXPOSE 805 ENTRYPOINT "/usr/sbin/nginx","-g",&quo
47、t;daemon off;" 67 #構(gòu)建子鏡像8 :/docker/images/nginx$ docker build -t ubuntu-nginx:v0.13 .9 #根據(jù)鏡像創(chuàng)建容器,10 docker run -p 80 -name nginx-15 -itd ubuntu-nginx:v0.1311 #查看鏡像信息12 :/docker/images/nginx$ docker inspect ubuntu-nginx:v0.1313 docker ps14 #容器頁面,是否被更改1513141516171819202122232425262728293031RUN a
48、pt-get install nginx -y #觸發(fā)器ONBUILD COPY "index.html","/var/www/html/" # 對外端口EXPOSE 80#運(yùn)行時默認(rèn)命令ENTRYPOINT "/usr/sbin/nginx","-g","daemon off;"#構(gòu)建鏡像:/docker/images/nginx$ docker build -t ubuntu-nginx:v0.12 .#根據(jù)鏡像創(chuàng)建容器,:/docker/images/nginx$docker run -p
49、 80 -name nginx-14 -itd ubuntu- nginx:v0.12:/docker/images/nginx$docker ps #查看鏡像信息:/docker/images/nginx$ docker inspect ubuntu-nginx:v0.12 #容器頁面,是否被更改:/docker/images/nginx$ docker inspect nginx-14beego我們借助于beego的簡介,部署一個go項(xiàng)目,然后運(yùn)行起來。3.2.2 手工部署go語言環(huán)境需求:基于docker鏡像,手工部署go項(xiàng)目環(huán)境方案分析:1、docker環(huán)境部署2、go環(huán)境部署3、go
50、項(xiàng)目部署4、測試技術(shù)關(guān)鍵點(diǎn):1、docker環(huán)境部署使用docker鏡像啟動一個容器即可2、go環(huán)境部署 go軟件的依賴環(huán)境go軟件的基本環(huán)境配置3、go項(xiàng)目部署beego框架的項(xiàng)目文件配置啟動go項(xiàng)目 4、測試宿主機(jī)測試解決方案:1、docker環(huán)境配置1.1 獲取docker鏡像1.2 啟動docker容器2、go環(huán)境部署2.1 基礎(chǔ)環(huán)境配置2.2 go環(huán)境配置3、go項(xiàng)目部署3.1 獲取beego代碼3.2 項(xiàng)目文件配置3.3 項(xiàng)目啟動4、測試4.1 宿主機(jī)測試實(shí)施方案:12345678910111213141516171819202122232425262728293031323334
51、3536373839404142434445464748#1、docker環(huán)境配置#1.1 獲取docker鏡像#獲取一個ubuntu的模板文件cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu-nimi #1.2 啟動docker容器#啟動容器,容器名稱叫g(shù)o-testdocker run -itd -name go-test ubuntu-nimi #進(jìn)入容器docker exec -it go-test /bin/bash #2、go環(huán)境部署#2.1 基礎(chǔ)環(huán)境配置#配置國內(nèi)源vim /etc/apt/sources.list #
52、文件內(nèi)容如下deb http:/m/ubuntu/ xenial main restricteddeb http:/m/ubuntu/ xenial-updates main restricteddeb http:/m/ubuntu/ xenial universedeb http:/m/ubuntu/ xenial-updates universedeb http:/m/ubuntu/ xenial multiversedeb http:/m/ubuntu/ xenial-updates multiversedeb http:/m/ubuntu/ xenial-backports main
53、restricted universe multiversedeb http:/m/ubuntu/ xenial-security main restricteddeb http:/m/ubuntu/ xenial-security universedeb http:/m/ubuntu/ xenial-security multiverse #如果由于網(wǎng)絡(luò)環(huán)境不能進(jìn)行軟件源更新可以使用如下內(nèi)容sudo sed -i './mi/g'/etc/apt/sources.list#更新軟件源,安裝基本軟件apt-get updateapt-get install gcc libc6-
54、dev git vim lrzsz -y #2.2 go環(huán)境配置#安裝go語言軟件/apt-get install golang -y由于軟件源問題改使用新版本go將go1.10.linux-amd64.tar.gz拷貝到容器中進(jìn)行解壓tar -C /usr/local -zxf go1.10.linux-amd64.tar.gz#配置go基本環(huán)境變量export GOROOT=/usr/local/goexport PATH=$PATH:/usr/local/go/bin export GOPATH=/root/goexport PATH=$GOPATH/bin/:$PATH #3、go項(xiàng)目
55、部署#3.1 獲取beego代碼#項(xiàng)目beegogo get/astaxie/beego #3.2 項(xiàng)目文件配置#創(chuàng)建項(xiàng)目目錄3.2.3 Dockerle案例分析環(huán)境分析:1、軟件源文件,使用國外源,速度太慢,所以我們可以使用國內(nèi)的軟件源。因?yàn)槲覀冊谑止げ渴鸬臅r候,使用的是(國外)的源,所以為了部署快一點(diǎn)呢,我使用國內(nèi)的阿里云的源。 源內(nèi)容:由于阿里云的源出現(xiàn)問題所有更換為大的源 詳情見3.1.12、軟件安裝,涉及到了各種軟件1 deb http:/m/ubuntu/ xenial main restricted2 deb http:/m/ubuntu/ xenial-updates main restricted3 deb http:/m/ubuntu/ xenial universe4 deb http:/m/ubuntu/ xenial-updates universe5 deb http:/m/ubuntu/ xenial multiverse6 deb http:/m/ubuntu/ xenial-updates multiverse7 deb http:/m
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 防用電課件教學(xué)課件
- 2024「銷售代理」合同標(biāo)的與代理商責(zé)任義務(wù)
- 2024年度租賃合同標(biāo)的及租賃期限的詳細(xì)約定
- 2024年度供應(yīng)鏈管理服務(wù)合同協(xié)同操作與風(fēng)險控制
- 2024年建筑工程項(xiàng)目安全協(xié)議
- 2024年度石油化工企業(yè)BIM模型設(shè)計(jì)與安全評估合同
- 2024年度園林綠化工程施工合同范例
- 2024標(biāo)準(zhǔn)勞務(wù)合同書3
- 2024年土地暫時使用協(xié)議
- 2024年度技術(shù)開發(fā)成果共享協(xié)議
- 2023科室醫(yī)療質(zhì)量、安全管理持續(xù)改進(jìn)記錄本
- (完整word)大學(xué)西門子plcs7-1200考試復(fù)習(xí)習(xí)題
- 中考數(shù)學(xué)復(fù)習(xí)微專題:有理數(shù)運(yùn)算中的錯解及對策
- DB11-972-2013保險營業(yè)場所風(fēng)險等級與安全防范要求
- 高中政治部編版教材高考雙向細(xì)目表
- 輪扣式模板支撐架安全專項(xiàng)施工方案
- 酒店裝飾裝修工程驗(yàn)收表
- 中國行業(yè)分類代碼表
- 社會組織協(xié)會換屆選舉會議主持詞
- 呼吸科(呼吸與危重癥醫(yī)學(xué)科)出科理論試題及答案
- 清新個人工作述職報告PPT模板
評論
0/150
提交評論