日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker入门与实践之【05-Dockfile指令】

發(fā)布時(shí)間:2023/12/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker入门与实践之【05-Dockfile指令】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??

1.COPY 復(fù)制文件

格式:

COPY <源路徑>... <目標(biāo)路徑> COPY ["<源路徑1>",... "<目標(biāo)路徑>"]

COPY 指令將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的 <目標(biāo)路徑> 位置。比如:

COPY package.json /usr/src/app/

<源路徑> 可以是多個(gè),甚至可以是通配符,其通配符規(guī)則要滿足 Go 的 filepath.Match 規(guī)則

<目標(biāo)路徑> 可以是容器內(nèi)的絕對(duì)路徑,也可以是相對(duì)于工作目錄的相對(duì)路徑(工作目錄可以用 WORKDIR 指令來指定)。

2.ADD 更高級(jí)的復(fù)制文件

ADD使用格式與COPY一致,不同的是,如果 <源路徑> 為一個(gè) tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,ADD 指令將會(huì)自動(dòng)解壓縮這個(gè)壓縮文件到 <目標(biāo)路徑> 去。 比如官方鏡像 ubuntu 中:

FROM scratch ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz / ...

COPY與ADD選用原則: 所有的文件復(fù)制應(yīng)使用 COPY 指令,僅在需要自動(dòng)解壓縮的場(chǎng)合使用 ADD。

3.CMD 容器啟動(dòng)命令

CMD 指令的格式和 RUN 相似,也是兩種格式:

shell 格式:CMD <命令> exec 格式:CMD ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"...] 參數(shù)列表格式:CMD ["參數(shù)1", "參數(shù)2"...]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具體的參數(shù)。

如果使用 shell 格式的話,實(shí)際的命令會(huì)被包裝為 sh -c 的參數(shù)的形式進(jìn)行執(zhí)行。比如:CMD echo $HOME在實(shí)際執(zhí)行中,會(huì)將其變更為: CMD [ "sh", "-c", "echo $HOME" ]

對(duì)于容器而言,其啟動(dòng)程序就是容器應(yīng)用進(jìn)程,容器就是為了主進(jìn)程而存在的,主進(jìn)程退出,容器就失去了存在的意義,從而退出。因此,docker里systemctl、service等命令不能執(zhí)行。

4.ENTRYPOINT 入口點(diǎn)

ENTRYPOINT 的目的和 CMD 一樣,都是在指定容器啟動(dòng)程序及參數(shù)。

當(dāng)指定了 ENTRYPOINT 后,CMD 的含義就發(fā)生了改變,不再是直接的運(yùn)行其命令,而是將 CMD 的內(nèi)容作為參數(shù)傳給 ENTRYPOINT 指令,換句話說實(shí)際執(zhí)行時(shí),將變?yōu)?#xff1a;

<ENTRYPOINT> "<CMD>"

示例:生成獲取當(dāng)前公網(wǎng) IP 的鏡像

FROM ubuntu:16.04 RUN apt-get update \&& apt-get install -y curl \&& rm -rf /var/lib/apt/lists/* ENTRYPOINT [ "curl", "-s", "http://ip.cn" ]

執(zhí)行:

#無參數(shù) docker run myip #有參數(shù),ENTRYPOINT會(huì)把參數(shù)(-i)一起傳入,然后執(zhí)行。 #換句話說,ENTRYPOINT能獲取命令執(zhí)行的參數(shù) docker run myip -i

5.ENV設(shè)置環(huán)境變量

格式有兩種:

ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>...

這個(gè)指令很簡(jiǎn)單,就是設(shè)置環(huán)境變量而已,無論是后面的其它指令,如 RUN,還是運(yùn)行時(shí)的應(yīng)用,都可以直接使用這里定義的環(huán)境變量。

ENV VERSION=1.0 DEBUG=on \NAME="Happy Feet"

這個(gè)例子中演示了如何換行,以及對(duì)含有空格的值用雙引號(hào)括起來的辦法,這和 Shell 下的行為是一致的。

6.ARG 構(gòu)建參數(shù)

格式:ARG <參數(shù)名>[=<默認(rèn)值>]

Dockerfile 中的 ARG 指令是定義參數(shù)名稱,以及定義其默認(rèn)值。該默認(rèn)值可以在構(gòu)建命令 docker build 中用 --build-arg <參數(shù)名>=<值> 來覆蓋。

7.VOLUME 定義匿名卷

格式為:

VOLUME ["<路徑1>", "<路徑2>"...] VOLUME <路徑>

容器器運(yùn)行時(shí)應(yīng)該盡量保持容器存儲(chǔ)層不發(fā)生寫操作,對(duì)于數(shù)據(jù)庫類需要保存動(dòng)態(tài)數(shù)據(jù)的應(yīng)用,其數(shù)據(jù)庫文件應(yīng)該保存于卷(volume)中.

為了防止運(yùn)行時(shí)用戶忘記將動(dòng)態(tài)文件所保存目錄掛載為卷,在 Dockerfile 中,我們可以事先指定某些目錄掛載為匿名卷,這樣在運(yùn)行時(shí)如果用戶不指定掛載,其應(yīng)用也可以正常運(yùn)行,不會(huì)向容器存儲(chǔ)層寫入大量數(shù)據(jù)。

VOLUME /data

這里的 /data 目錄就會(huì)在運(yùn)行時(shí)自動(dòng)掛載為匿名卷,任何向 /data 中寫入的信息都不會(huì)記錄進(jìn)容器存儲(chǔ)層, 從而保證了容器存儲(chǔ)層的無狀態(tài)化。

當(dāng)然,運(yùn)行時(shí)可以覆蓋這個(gè)掛載設(shè)置。比如:

docker run -d -v mydata:/data xxxx

在這行命令中,就使用了 mydata 這個(gè)命名卷掛載到了 /data 這個(gè)位置,替代了 Dockerfile 中定義的匿名卷的掛載配置。

8.EXPOSE 聲明端口

格式為 EXPOSE <端口1> [<端口2>...]。

EXPOSE 指令是聲明運(yùn)行時(shí)容器提供服務(wù)端口,這只是一個(gè)聲明,在運(yùn)行時(shí)并不會(huì)因?yàn)檫@個(gè)聲明應(yīng)用就會(huì)開啟這個(gè)端口的服務(wù)。

要將 EXPOSE 和在運(yùn)行時(shí)使用 -p <宿主端口>:<容器端口>區(qū)分開來:

  • -p,是映射宿主端口和容器端口,換句話說,就是將容器的對(duì)應(yīng)端口服務(wù)公開給外界訪問,
  • EXPOSE 僅僅是聲明容器打算使用什么端口而已,并不會(huì)自動(dòng)在宿主進(jìn)行端口映射。

9.WORKDIR 指定工作目錄

格式為 WORKDIR <工作目錄路徑>。

使用 WORKDIR 指令可以來指定工作目錄(或者稱為當(dāng)前目錄),以后各層的當(dāng)前目錄就被改為指定的目錄,如該目錄不存在,WORKDIR 會(huì)幫你建立目錄。

一個(gè)錯(cuò)誤的例子:

RUN cd /app RUN echo "hello" > world.txt

將這個(gè) Dockerfile 進(jìn)行構(gòu)建鏡像運(yùn)行后,會(huì)發(fā)現(xiàn)找不到 /app/world.txt 文件,或者其內(nèi)容不是 hello。原因其實(shí)很簡(jiǎn)單:第一層 RUN cd /app 的執(zhí)行僅僅是當(dāng)前進(jìn)程的工作目錄變更。而到第二層的時(shí)候,啟動(dòng)的是一個(gè)全新的容器,跟第一層的容器更完全沒關(guān)系

因此如果需要改變以后各層的工作目錄的位置,那么應(yīng)該使用 WORKDIR指令。

10.USER 指定當(dāng)前用戶

格式:USER <用戶名> USER 指令用來改變之后層的執(zhí)行 RUN, CMD 以及 ENTRYPOINT 這類命令的身份。

示例:用redis用戶啟動(dòng)redis

RUN groupadd -r redis && useradd -r -g redis redis USER redis RUN [ "redis-server" ]

11.健康檢查

格式:

HEALTHCHECK [選項(xiàng)] CMD <命令>:設(shè)置檢查容器健康狀況的命令 支持下列選項(xiàng):--interval=<間隔>:兩次健康檢查的間隔,默認(rèn)為 30 秒;--timeout=<時(shí)長(zhǎng)>:健康檢查命令運(yùn)行超時(shí)時(shí)間,如果超過這個(gè)時(shí)間,本次健康檢查就被視為失敗,默認(rèn) 30 秒;--retries=<次數(shù)>:當(dāng)連續(xù)失敗指定次數(shù)后,則將容器狀態(tài)視為 unhealthy,默認(rèn) 3 次。 HEALTHCHECK NONE:如果基礎(chǔ)鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指令

為了幫助排障,健康檢查命令的輸出(包括 stdout 以及 stderr)都會(huì)被存儲(chǔ)于健康狀態(tài)里,可以用 docker inspect 來查看。

12.ONBUILD

格式:ONBUILD <其它指令>。

ONBUILD 是一個(gè)特殊的指令,它后面跟的是其它指令,比如 RUN, COPY 等,而這些指令,在當(dāng)前鏡像構(gòu)建時(shí)并不會(huì)被執(zhí)行。只有當(dāng)以當(dāng)前鏡像為基礎(chǔ)鏡像,去構(gòu)建下一級(jí)鏡像的時(shí)候才會(huì)被執(zhí)行。

示例:

FROM node:slim RUN mkdir /app WORKDIR /app ONBUILD COPY ./package.json /app ONBUILD RUN [ "npm", "install" ] ONBUILD COPY . /app/ CMD [ "npm", "start" ]

假設(shè)以上鏡像為my-node,后續(xù)基于此鏡像構(gòu)建時(shí),使用

FROM my-node

假設(shè)此鏡像為node

好處:

ONBUILD 后面的命令,在構(gòu)建my-node時(shí)并不會(huì)執(zhí)行,只有在構(gòu)建node時(shí)才會(huì)執(zhí)行。如果路徑需要修改,或npm install需要添加參數(shù)時(shí),只需要修改my-node的dockerfile,并重新構(gòu)建node即可,而不用修改node的dockerfile。生產(chǎn)環(huán)境中,基于my-node構(gòu)建的node可能不止不過,這樣避免了多次修改。

轉(zhuǎn)載于:https://my.oschina.net/funcy/blog/1826707

總結(jié)

以上是生活随笔為你收集整理的docker入门与实践之【05-Dockfile指令】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲自拍偷拍色图 | 天天操天天操天天操天天操天天操 | 国产精品综合一区二区 | jizz国产免费| 日本高清视频一区二区三区 | 国产精品无码内射 | 91中文字幕在线观看 | 国产高清无密码一区二区三区 | 在线a网| 人妻少妇一区二区三区 | 成人免费观看视频网站 | 中文字字幕在线中文乱码电影 | 亚洲午夜精品久久久久久浪潮 | 粗喘呻吟撞击猛烈疯狂 | 国产一区二区成人 | 人妻无码中文字幕 | 美女裸体网站久久久 | 国产婷婷色一区二区三区在线 | 无码人妻一区二区三区在线 | 亚洲精品大片www | 亚洲精品性视频 | 国产免费福利视频 | 免费毛毛片 | 欧美精品一区二区三区蜜臀 | 欲色综合| www一区 | 国产精品美女毛片真酒店 | 最新国产精品 | 先锋影音av资源在线观看 | 亚洲妇女体内精汇编 | 爱爱视频网站免费 | 国产精品二 | 91麻豆国产视频 | 国产一区视频在线 | 500部大龄熟乱视频 亚洲乱码精品 | 性——交——性——乱免费的 | 椎名空在线观看 | 都市激情 亚洲 | 黄色国产在线观看 | 国产宾馆自拍 | 欧美激情性生活 | 国产色在线视频 | 亚洲成人av中文字幕 | 激情第一页 | 亚洲精品一区二区三区四区 | 91色偷偷| 亚洲一区二区三区中文字幕 | 美乳在线播放 | 日韩女同互慰一区二区 | 99久久综合国产精品二区 | 欧美亚洲在线播放 | 麻豆视频免费在线 | 日日综合网| 老版水浒传83版免费播放 | 国产一区二区三区精品视频 | 婷婷激情丁香 | 婷婷丁香花五月天 | 久久婷婷一区二区 | 青苹果av | 中文字幕亚洲不卡 | 爱插网 | 国产精品熟女久久久久久 | 国产做爰全过程免费视频 | 亚州春色 | 成人免费视频观看视频 | av每日更新在线观看 | 美女下部无遮挡 | 久久综合加勒比 | 免费毛片观看 | 污视频网站免费观看 | 久久成人乱码欧美精品一区二区 | 欧美日韩爱爱 | 公肉吊粗大爽色翁浪妇视频 | 操小妞 | 国产午夜在线播放 | 国产成人久久婷婷精品流白浆 | 天天宗合网 | 黑巨茎大战欧美白妞 | 91午夜精品亚洲一区二区三区 | 国产成人欧美一区二区三区91 | 国精产品一区一区三区 | 丁香花完整视频在线观看 | 蜜桃臀av在线 | 色综合久久88色综合天天6 | 天堂av影院 | 91色吧 | 日本一区电影 | 精品人妻伦一二三区免费 | 久久天天躁狠狠躁夜夜躁 | 爆操巨乳美女 | 777黄色| 成人午夜免费福利视频 | 国产午夜久久 | 天天操天天干天天摸 | 日韩黄片一区二区三区 | 操女人免费视频 | 伊人91| 成人黄色小说在线观看 | 91大神视频在线播放 |