一、docker使用背景
關(guān)于虛擬化堕义、docker容器原理以及使用背景等猜旬,官網(wǎng)、各種博客技術(shù)網(wǎng)站有更專業(yè)的解釋;
PS:個(gè)人經(jīng)驗(yàn)洒擦,如果有實(shí)際工程實(shí)踐或項(xiàng)目需求椿争,能更好理解docker原理、為什么使用docker容器秘遏,學(xué)習(xí)原理對(duì)于構(gòu)建鏡像丘薛、運(yùn)行容器有很大幫助嘉竟;
二邦危、docker安裝說明
1、詳細(xì)docker工具相關(guān)組件(client舍扰、engine倦蚪、compose、k8s等)边苹、版本(ce社區(qū)版陵且、en企業(yè)版)、主流os下如何安裝(包括docker版本對(duì)應(yīng)宿主os版本要求):官網(wǎng)使用安裝說明个束;
經(jīng)驗(yàn)慕购、建議:
1)docker安裝對(duì)操作系統(tǒng)有許多依賴組件,對(duì)于linux服務(wù)器茬底,最好使用操作系統(tǒng)包管理安裝工具沪悲,會(huì)自動(dòng)關(guān)聯(lián)下載依賴組件,yum阱表、apt-get等殿如;
2)centos環(huán)境:
3)如何驗(yàn)證是否安裝成功:
3)遇到依賴組件版本問題,查看啟動(dòng)日志:
三最爬、docker工程實(shí)踐
1涉馁、Dockerfile編寫、使用
1)流程:Dockerfile編寫->通過Dockerfile構(gòu)建image->通過image運(yùn)行容器爱致,構(gòu)建時(shí)通過docker client自動(dòng)send到docker engine進(jìn)行處理
2)Dockerfile烤送,構(gòu)建鏡像大多數(shù)情況要依賴基礎(chǔ)層,如果本地不存在要使用的鏡像糠悯,默認(rèn)會(huì)從docker hub(類似GitHub)拉取鏡像胯努,此處應(yīng)注意所需鏡像版本tag(centos:tag),默認(rèn)tag是latest逢防,docker hub已經(jīng)提供許多官方鏡像叶沛,可登錄查看具體鏡像版本、信息等忘朝,根據(jù)需要選擇灰署;
根據(jù)需要選擇設(shè)置工作目錄,復(fù)制內(nèi)容(文件或目錄),此處COPY溉箕、ADD均可用晦墙,COPY是純復(fù)制操作,ADD如果操作文件相當(dāng)于COPY肴茄,如果是軟件包晌畅,會(huì)進(jìn)行COPY且解壓,此時(shí)可換成COPY或者把軟件包先放入一級(jí)目錄下寡痰;如果操作二級(jí)目錄抗楔,默認(rèn)會(huì)把二級(jí)目錄下的內(nèi)容復(fù)制,所以如果想操作復(fù)制整個(gè)二級(jí)目錄拦坠,目的路徑結(jié)尾帶/(/aiwandeweiss與/aiwandeweiss/此處效果不同)连躏;如果想過濾某些內(nèi)容(文件或目錄),可以使用.dockerignore(原理同.gitignore)進(jìn)行忽略贞滨,構(gòu)建時(shí)可以觀察下send context內(nèi)容大小
RUN盡量將相同操作的命令&&執(zhí)行入热,這樣減少鏡像層次,如果是復(fù)雜鏡像晓铆,關(guān)于鏡像支持最大層次概说、層次與生成鏡像大小關(guān)系是需要格外注意的
通過鏡像運(yùn)行的容器的expose端口可根據(jù)需要定制礁击,正常可在運(yùn)行容器時(shí)可使用-p選項(xiàng)進(jìn)行主機(jī)端口與容器expose端口映射,這樣通過訪問主機(jī)端口會(huì)間接訪問到容器端口
CMD啟動(dòng)容器時(shí)的start命令
更多Dockerfile可使用命令可詳見官網(wǎng)或技術(shù)博客:官網(wǎng)Dockerfile編寫說明
2壳影、image構(gòu)建
1)docker client可使用命令岭接,終端執(zhí)行docker --help名眉,會(huì)列出支持的命令壤追,高級(jí)用法可參見官網(wǎng)或技術(shù)博客,此處不做具體推薦鏈接
2)本人所使用的命令均為常用命令示弓,且也在學(xué)習(xí)研究階段讳侨,技術(shù)大牛可忽略
構(gòu)建時(shí)可以用-f指定Dockerfile文件奏属,如果已經(jīng)進(jìn)入本地用于構(gòu)建的目錄下跨跨,默認(rèn)會(huì)識(shí)別當(dāng)前目錄下Dockerfile文件;注意后面的.(點(diǎn))囱皿,專業(yè)詳細(xì)解釋參見:構(gòu)建Context
3勇婴、運(yùn)行container
參數(shù)-v,允許掛載主機(jī)目錄到容器內(nèi)嘱腥,當(dāng)然在構(gòu)建鏡像時(shí)也可以使用VOLUME命令
4耕渴、volume卷
可以作數(shù)據(jù)持久化,動(dòng)態(tài)變化內(nèi)容mount等齿兔,實(shí)際工程實(shí)踐用處很大橱脸,根據(jù)實(shí)際需求選擇
--volume-driver可以選擇Optional volume driver for the container
--volumes-from可以選擇Mount volumes from the specified container(s)
5础米、鏡像、容器空間管理
6添诉、常用命令
四屁桑、jenkins、docker栏赴、shell
1蘑斧、jenkins工程同步
job A 傳遞參數(shù)并觸發(fā) job B
1)首先在jenkins插件管理,安裝 jenkins 參數(shù)化插件:Parameterized Trigger?
2)job A 配置中選擇構(gòu)建后操作Trigger parameterized build on other projects?须眷,把要傳遞的參數(shù)根據(jù)需求參數(shù)化傳遞竖瘾,job B配置中選擇參數(shù)化構(gòu)建,此處參數(shù)名稱與job A要傳遞參數(shù)名稱保持相同柒爸,觸發(fā)job A后job B的同名參數(shù)默認(rèn)會(huì)使用job A傳遞過來的參數(shù)准浴,當(dāng)然job B同名參數(shù)也可以設(shè)置默認(rèn)值事扭,用作job B單獨(dú)構(gòu)建時(shí)使用
2捎稚、shell腳本
awk用法注意:
1)所有容器列表,去掉表頭求橄,且找出特定容器名稱&&屬于特定鏡像的容器id
docker ps -a | awk "{if (NR > 1){if (\$2 == image_n && \$NF == container_n) print \$1}}" image_n="$SPECIAL_VER" container_n="$CONTAINER_NAME"
此處今野,如果awk的command中需要取變量值,要用雙引號(hào)罐农,awk自身內(nèi)置變量$符要用反斜杠(\)轉(zhuǎn)義回取內(nèi)置變量含義条霜;從外部讀入變量值要從command后讀取,否則會(huì)出現(xiàn)變量未定義涵亏,值為0情況
sed用法注意:
1)如果要處理的內(nèi)容本身帶有斜杠(/)宰睡,比如url,sed的命令中斜杠分隔符換成嘆號(hào)分隔符(F睢)
----------------------------------------------------------------------------------------------------------------
PS:文章純屬個(gè)人實(shí)踐隨筆記錄拆内,用于學(xué)習(xí)交流,不用做任何商業(yè)用途宠默;文內(nèi)如果有錯(cuò)誤或者不正確地方麸恍,歡迎指正,十分感謝~