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