摘要:當(dāng)在中需要引用相對(duì)路徑時(shí),就是以該上下文作為當(dāng)前指令執(zhí)行的目錄。指令會(huì)新建一層并在其上執(zhí)行指令,指令完成之后再該鏡像。所以指令中的內(nèi)容應(yīng)當(dāng)盡可能合并,并且記得清除冗余的內(nèi)容如緩存等。從而實(shí)現(xiàn)我們?cè)阽R像時(shí)可以根據(jù)配置修改啟動(dòng)指令的參數(shù)。
前言
本文為學(xué)習(xí)整理和參考文章,不具有教程的功能。其次,后面將會(huì)陸續(xù)更新各種應(yīng)用的容器化部署的實(shí)踐,如MySQL容器化,Jenkins容器化,以供讀者參考。
鏡像獲取docker pull [options] [Docker Registry地址]<倉(cāng)庫(kù)名>:<標(biāo)簽> -a, --all-tags: 下載該鏡像的所有版本
Docker Registry地址默認(rèn)為Docker Hub,一般格式為IP:端口號(hào)
倉(cāng)庫(kù)名為兩段式 <用戶(hù)名>:<軟件名> 默認(rèn)用戶(hù)名為library
標(biāo)簽不填則默認(rèn)為latest
docker images [options] [Repository[:tag]] 默認(rèn)情況會(huì)展示所有最終鏡像,如果加上了鏡像名,則會(huì)展示該鏡像的所有信息 -a, --all: 展示所有鏡像,包括中間層 -f, --filter filter: 根據(jù)某種條件對(duì)鏡像進(jìn)行篩選 --format string: 使用go的模板語(yǔ)法 -q, --quiet: 只返回鏡像的ID docker images -f since=mongo:3.2 #查看mongo3.2版本之后建立的鏡像,如果是要在之前,則使用before docker images --format "{{.ID}}:{{.Repository}}" #輸出結(jié)構(gòu)為ID:Repository虛懸鏡像
虛懸鏡像是指既沒(méi)有倉(cāng)庫(kù)名,也沒(méi)有標(biāo)簽的鏡像。這種鏡像的產(chǎn)生常常由于當(dāng)前的倉(cāng)庫(kù)名和標(biāo)簽被更新版本占用,導(dǎo)致當(dāng)前境像失效。
docker images -f danling=true #列出所有虛懸鏡像 docker rmi $(docker images -q -f dangling=true) #利用復(fù)合指令刪除虛懸鏡像commit鏡像
commit會(huì)將容器的存儲(chǔ)層保存下來(lái)成為新的鏡像
docker commit [options] <容器ID或容器名> [<倉(cāng)庫(kù)名>[:<標(biāo)簽>]] -a, --author string: 容器所有者 -c, --change list: 在容器上執(zhí)行Dockerfile指令 -m, --message string: 提交信息 -p, --pause: 提交過(guò)程中停止容器的運(yùn)行,默認(rèn)為true docker history IMAGE #顯示鏡像的歷史記錄 docker diff CONTAINER #查看容器的改動(dòng)
盡量不要使用commit指令構(gòu)建鏡像
Dockerfile 構(gòu)建鏡像利用Dockerfile構(gòu)建鏡像。
docker build [options] PATH | URL | - -f, --file string: Dockerfile的路徑 --rm: 成功構(gòu)建后刪除中間鏡像 -t, --tag: 以name:tag的形式為鏡像命名 docker build -t nginx:v3 . #執(zhí)行當(dāng)前目錄下的Dockerfile并構(gòu)建鏡像,新的鏡像名為nginx:v3 docker build https://...... #直接從github構(gòu)建,會(huì)自動(dòng)clone這個(gè)項(xiàng)目,切換到指定分支(默認(rèn)為master),并進(jìn)入指定目錄進(jìn)行構(gòu)建
最后的路徑是指鏡像構(gòu)建的上下文,docker在build的時(shí)候會(huì)把該上下文中的而所有內(nèi)容全部打包上傳給docker引擎。當(dāng)在Dockerfile中需要引用相對(duì)路徑時(shí),就是以該上下文作為當(dāng)前指令執(zhí)行的目錄。可以編寫(xiě).dockerignore文件來(lái)剔除無(wú)需打包的文件。
在默認(rèn)情況下,如果不指定Dockerfile的位置,就會(huì)從構(gòu)建的上下文尋找Dockerfile來(lái)執(zhí)行
指定基礎(chǔ)鏡像,Dockerfile的第一行必須制定基礎(chǔ)鏡像
RUN執(zhí)行命令。RUN指令會(huì)新建一層并在其上執(zhí)行指令,指令完成之后再commit該鏡像。所以RUN指令中的內(nèi)容應(yīng)當(dāng)盡可能合并,并且記得清除冗余的內(nèi)容如緩存等。
RUN <指令> RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"] RUN mkdir newDir && touch newFileCOPY
將構(gòu)建上下文中源路徑中的內(nèi)容復(fù)制到目標(biāo)路徑之下。可以使用通配符。如果目標(biāo)目錄不存在,容器會(huì)幫助創(chuàng)建。復(fù)制過(guò)程不改變文件屬性。
COPY 源路徑 目標(biāo)路徑 COPY ["源路徑",...,"目標(biāo)路徑"] COPY hom* /mydir/CMD
默認(rèn)的容器的主進(jìn)程的啟動(dòng)命令,在運(yùn)行時(shí)可以指定新的命令來(lái)替代鏡像設(shè)置中的默認(rèn)命令。比如ubuntu的默認(rèn)指令是/bin/bash。如果使用第一種形式,則會(huì)以sh -c的形式執(zhí)行,這樣就能夠得到環(huán)境變量。容器中的應(yīng)用都應(yīng)該前臺(tái)執(zhí)行。
CMD <命令> CMD ["可執(zhí)行文件", "參數(shù)一", "參數(shù)二", ...] CMD ["參數(shù)一", "參數(shù)二"...] CMD ["nginx", "-g", "daemon off;"] docker run -it ubuntu #直接進(jìn)入bash,因?yàn)槟J(rèn)指令為/bin/bash docker run -it ubuntu /etc/os-release #默認(rèn)指令變成/etc/os-releaseENTRYPOINT
指定容器啟動(dòng)程序及參數(shù),當(dāng)指定了ENTRYPOINT之后,CMD的含義就變成了ENTRYPOINT的參數(shù)。從而實(shí)現(xiàn)我們?cè)赽uild鏡像時(shí)可以根據(jù)配置修改啟動(dòng)指令的參數(shù)。在docker run運(yùn)行時(shí)可以用--entrypoint覆蓋
ENTRYPOINT "CMD" ENTRYPOINT ["可執(zhí)行文件", "參數(shù)一", "參數(shù)二"...]ENV
設(shè)置環(huán)境變量
ENV KEY VALUE ENV KEY1=VALUE2 KEY2=VALUE2ARG
同ENV,設(shè)置環(huán)境變量并為其提供默認(rèn)值,不同的是在容器運(yùn)行時(shí),這些值將不存在。在運(yùn)行時(shí)可以用--build-arg <參數(shù)名>:<值>覆蓋
ARG <參數(shù)名>[=默認(rèn)值]VOLUMN
指定匿名卷,防止用戶(hù)忘記掛載,運(yùn)行時(shí)用-v HOST_DIR/CONTAINER_DIR進(jìn)行覆蓋
VOLUMN PATHEXPOSE
聲明運(yùn)行時(shí)容器提供的服務(wù)端口,運(yùn)行時(shí)應(yīng)用并不會(huì)因?yàn)檫@個(gè)聲明而打開(kāi)這個(gè)端口。docker run -P時(shí)會(huì)對(duì)聲明的端口隨機(jī)映射
EXPOSE 端口一 端口二WORKDIR
指定容器之后各層的工作目錄。因?yàn)楸緦拥腸d并不會(huì)順帶到下一層。
WORKDIR PATHUSER
改變之后層執(zhí)行RUN,ENTRYPOINT等指令的身份
RUN groupadd -r redis && useradd -r -g redis redis USER redis RUN ["redis-server"]ONBUILD
ONBUILD 其它指令
用于構(gòu)建基礎(chǔ)鏡像,被引用是才會(huì)真正執(zhí)行??梢蕴崛〕鲋貜?fù)的部分,方便維護(hù)
刪除docker rmi [options]進(jìn)入容器[ ....] #刪除鏡像 docker rm [options] [ ...] #刪除容器
docker attach CONTAINER_NAME查看數(shù)據(jù)卷信息
docker inspect CONTAINER_NAME
匿名的數(shù)據(jù)卷默認(rèn)位于/var/lib/docker/volumes之下
查看容器docker logs [-f] container查看端口映射配置
docker port container container_port容器鏈接
--link container_name:alias
想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27489.html
摘要:此命令下載測(cè)試鏡像并在容器中運(yùn)行它。國(guó)內(nèi)很多云服務(wù)商都提供了加速器服務(wù),例如阿里云加速器注冊(cè)用戶(hù)并且申請(qǐng)加速器,會(huì)獲得如這樣的地址。獲取鏡像阿里云鏡像庫(kù)上有大量的高質(zhì)量的鏡像可以用,這里我們就說(shuō)一下怎么獲取這些鏡像并運(yùn)行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 這篇文章是我學(xué)習(xí) Docker 的記錄...
摘要:實(shí)際上,認(rèn)為文本文件都是結(jié)構(gòu)化的,它將每一個(gè)輸入行定義為一個(gè)記錄,行中的每個(gè)字符串定義為一個(gè)域段,域和域之間使用分割符分割。 看到一篇Docker 技巧:刪除 Docker 容器和鏡像其中提到刪除標(biāo)簽為none的鏡像的方法,其中用到了awk,就去查了下,下面舉例說(shuō)明: docker rmi $(docker images | awk $1 == && $2 == {print $3...
摘要:用于配置當(dāng)前所創(chuàng)建的鏡像作為其它新創(chuàng)建鏡像的基礎(chǔ)鏡像時(shí),所執(zhí)行的操作指令。運(yùn)行構(gòu)建命令構(gòu)建命令用于使用創(chuàng)建鏡像。 本文旨在用通俗的語(yǔ)言講述枯燥的知識(shí) 前面講到鏡像的構(gòu)建時(shí),講述的是用commit的方式構(gòu)建鏡像,而Dockerfile是另一種構(gòu)建鏡像的方式。 Dockerfile構(gòu)建鏡像是以基礎(chǔ)鏡像為基礎(chǔ)的,Dockerfile是一個(gè)文本文件,內(nèi)容是用戶(hù)編寫(xiě)的一些docker指令,每一條...
摘要:型網(wǎng)絡(luò)這是容器的默認(rèn)網(wǎng)絡(luò)類(lèi)型,網(wǎng)橋模式意味著容器間可以互相通信,而對(duì)外的通信需要借助宿主機(jī),這一形式通常表現(xiàn)為端口號(hào)的映射。 以下記錄 Docker 中的常用操作、指令,使得大家能夠快速地使用 Docker。 為什使用 Docker? 為什么要使用 Docker?就個(gè)人而言,Docker 能提供的最大便利在于這種技術(shù)面對(duì)程序環(huán)境遷移時(shí)所表現(xiàn)的卓越性。 這種性能使得我們不必在分享代碼或項(xiàng)...
摘要:最后,我們用和適當(dāng)?shù)莫?dú)特后綴來(lái)標(biāo)注數(shù)據(jù)流。將數(shù)據(jù)流分離到兩個(gè)不同的目的地在這里,我們解析自動(dòng)定量日志,管理我們的緩沖區(qū),查詢(xún)和區(qū)塊大小。 也許你對(duì)Fluentd的統(tǒng)一日志記錄層已經(jīng)有所耳聞。可能你對(duì)日志是流不是文件這個(gè)概念也已經(jīng)很熟悉,所以現(xiàn)在就讓我們用這個(gè)方法來(lái)思考日志層。事實(shí)上,最后導(dǎo)致決定性的一點(diǎn)就是fluentd是如何被配置的。全部都是關(guān)于我們?nèi)绾翁幚韘tream的不同元素的:...
閱讀 2900·2019-08-30 15:55
閱讀 2009·2019-08-30 14:02
閱讀 1248·2019-08-29 15:23
閱讀 1014·2019-08-29 11:27
閱讀 468·2019-08-26 11:43
閱讀 3196·2019-08-26 10:32
閱讀 1261·2019-08-23 14:41
閱讀 3304·2019-08-23 14:41