最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker基礎(chǔ)教程之Dockerfile語法詳解

 更新時(shí)間:2019年07月11日 15:04:53   作者:擼大師  
這篇文章主要給大家介紹了關(guān)于Docker基礎(chǔ)教程之Dockerfile語法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Docker具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Dockfile是一種被Docker程序解釋的腳本,Dockerfile由一條一條的指令組成,每條指令對(duì)應(yīng)Linux下面的一條命令。Docker程序?qū)⑦@些Dockerfile指令翻譯真正的Linux命令。Dockerfile有自己書寫格式和支持的命令,Docker程序解決這些命令間的依賴關(guān)系,類似于Makefile。Docker程序?qū)⒆x取Dockerfile,根據(jù)指令生成定制的image。相比image這種黑盒子,Dockerfile這種顯而易見的腳本更容易被使用者接受,它明確的表明image是怎么產(chǎn)生的。有了Dockerfile,當(dāng)我們需要定制自己額外的需求時(shí),只需在Dockerfile上添加或者修改指令,重新生成image即可,省去了敲命令的麻煩。

在 Dockerfile 中用到的命令有

FROM

FROM指定一個(gè)基礎(chǔ)鏡像, 一般情況下一個(gè)可用的 Dockerfile一定是 FROM 為第一個(gè)指令。至于image則可以是任何合理存在的image鏡像。

FROM 一定是首個(gè)非注釋指令 Dockerfile.

FROM 可以在一個(gè) Dockerfile 中出現(xiàn)多次,以便于創(chuàng)建混合的images。

如果沒有指定 tag ,latest 將會(huì)被指定為要使用的基礎(chǔ)鏡像版本。

MAINTAINER

這里是用于指定鏡像制作者的信息

RUN

RUN命令將在當(dāng)前image中執(zhí)行任意合法命令并提交執(zhí)行結(jié)果。命令執(zhí)行提交后,就會(huì)自動(dòng)執(zhí)行Dockerfile中的下一個(gè)指令。

層級(jí) RUN 指令和生成提交是符合Docker核心理念的做法。它允許像版本控制那樣,在任意一個(gè)點(diǎn),對(duì)image 鏡像進(jìn)行定制化構(gòu)建。

RUN 指令緩存不會(huì)在下個(gè)命令執(zhí)行時(shí)自動(dòng)失效。比如 RUN apt-get dist-upgrade -y 的緩存就可能被用于下一個(gè)指令. --no-cache 標(biāo)志可以被用于強(qiáng)制取消緩存使用。

ENV

ENV指令可以用于為docker容器設(shè)置環(huán)境變量

ENV設(shè)置的環(huán)境變量,可以使用 docker inspect命令來查看。同時(shí)還可以使用docker run --env <key>=<value>來修改環(huán)境變量。

USER

USER 用來切換運(yùn)行屬主身份的。Docker 默認(rèn)是使用 root,但若不需要,建議切換使用者身分,畢竟 root 權(quán)限太大了,使用上有安全的風(fēng)險(xiǎn)。

WORKDIR

WORKDIR 用來切換工作目錄的。Docker 默認(rèn)的工作目錄是/,只有 RUN 能執(zhí)行 cd 命令切換目錄,而且還只作用在當(dāng)下下的 RUN,也就是說每一個(gè) RUN 都是獨(dú)立進(jìn)行的。如果想讓其他指令在指定的目錄下執(zhí)行,就得靠 WORKDIR。WORKDIR 動(dòng)作的目錄改變是持久的,不用每個(gè)指令前都使用一次 WORKDIR。

COPY

COPY 將文件從路徑 <src> 復(fù)制添加到容器內(nèi)部路徑 <dest>。

<src>

必須是想對(duì)于源文件夾的一個(gè)文件或目錄,也可以是一個(gè)遠(yuǎn)程的url,<dest>

是目標(biāo)容器中的絕對(duì)路徑。

所有的新文件和文件夾都會(huì)創(chuàng)建UID 和 GID 。事實(shí)上如果 <src> 是一個(gè)遠(yuǎn)程文件URL,那么目標(biāo)文件的權(quán)限將會(huì)是600。

ADD

ADD 將文件從路徑 <src> 復(fù)制添加到容器內(nèi)部路徑 <dest>。

<src> 必須是想對(duì)于源文件夾的一個(gè)文件或目錄,也可以是一個(gè)遠(yuǎn)程的url。<dest> 是目標(biāo)容器中的絕對(duì)路徑。

所有的新文件和文件夾都會(huì)創(chuàng)建UID 和 GID。事實(shí)上如果 <src> 是一個(gè)遠(yuǎn)程文件URL,那么目標(biāo)文件的權(quán)限將會(huì)是600。

VOLUME

創(chuàng)建一個(gè)可以從本地主機(jī)或其他容器掛載的掛載點(diǎn),一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。

EXPOSE

EXPOSE 指令指定在docker允許時(shí)指定的端口進(jìn)行轉(zhuǎn)發(fā)。

CMD

Dockerfile.中只能有一個(gè)CMD指令。 如果你指定了多個(gè),那么最后個(gè)CMD指令是生效的。

CMD指令的主要作用是提供默認(rèn)的執(zhí)行容器。這些默認(rèn)值可以包括可執(zhí)行文件,也可以省略可執(zhí)行文件。

當(dāng)你使用shell或exec格式時(shí),  CMD

會(huì)自動(dòng)執(zhí)行這個(gè)命令。

ONBUILD

ONBUILD 的作用就是讓指令延遲執(zhí)行,延遲到下一個(gè)使用 FROM 的 Dockerfile 在建立 image 時(shí)執(zhí)行,只限延遲一次。

ONBUILD 的使用情景是在建立鏡像時(shí)取得最新的源碼 (搭配 RUN) 與限定系統(tǒng)框架。

ARG

ARG是Docker1.9 版本才新加入的指令。

ARG 定義的變量只在建立 image 時(shí)有效,建立完成后變量就失效消失

LABEL

定義一個(gè) image 標(biāo)簽 Owner,并賦值,其值為變量 Name 的值。(LABEL Owner=$Name )

ENTRYPOINT

是指定 Docker image 運(yùn)行成 instance (也就是 Docker container) 時(shí),要執(zhí)行的命令或者文件。

注意:

CMD 和 ENTRYPOINT 都能用來指定開始運(yùn)行的程序,而且這兩個(gè)命令都有兩種不用的語法:

CMD ls -l

or

CMD ["ls",''-l"]

對(duì)于第一種語法,docker 會(huì)自動(dòng)加入“/bin/sh –c”到命令中,這樣就有可能導(dǎo)致意想不到的行為。為了避免這種行為,我們推薦所有的 CMD 和 ENTRYPOINT 都應(yīng)該使用第二種語法。

如果兩個(gè)同時(shí)使用,請(qǐng)確定確定他們的含義沒有錯(cuò)誤。一般來說需要兩個(gè)同時(shí)使用的情況只有 ENTRYPOINT 指定需要運(yùn)行的 binary,CMD 給出運(yùn)行的默認(rèn)參數(shù)。

  • 盡量合并命令

Dockerfile 中的每一個(gè)命令都會(huì)創(chuàng)建一個(gè)新的 layer,而一個(gè)容器能夠擁有的最多 layer 數(shù)是有限制的。所以盡量將邏輯上連貫的命令合并可以減少 layer的層數(shù),合并命令的方法可以包括將多個(gè)可以合并的命令(EXPOSE, ENV,VOLUME,COPY)合并。

Dockerfile 中的每一個(gè)命令都會(huì)創(chuàng)建一個(gè)新的 layer,而一個(gè)容器能夠擁有的最多 layer 數(shù)是有限制的。所以盡量將邏輯上連貫的命令合并可以減少 layer 的層數(shù),這也可以加快編譯速度。

將多個(gè)可以合并的命令(RUN,EXPOSE, ENV,VOLUME,COPY)合并,比如:

EXOISE 80
EXOISE 8080
CMD cd /tmp
CMD ls

==>

EXOISE 80 8080
CMD cd /tmp && ls

ADD命令和 COPY 命令在很大層度上功能是一樣的。但是 COPY 語義更加直接,所以我們推薦盡量使用 COPY 命令。唯一例外的是 ADD 命令自帶解壓功能,如果需要拷貝并解壓一個(gè)文件到鏡像中,那么我們可以使用 ADD 命令。除此之外,我們都推薦使用 COPY 命令。

ADD 1.1.1.100:1234/jdk-8u74-linux-x64.tar.gz /usr/local/
  • USER的使用

Docker 默認(rèn)所有的應(yīng)用都會(huì)跑在容器的 root user 底下,但是這樣會(huì)造成一些潛在的安全隱患。在 production 環(huán)境跑的 Container 最好是通過USER命令跑在非特權(quán)用戶底下。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • docker使用volume和bind mount的區(qū)別及說明

    docker使用volume和bind mount的區(qū)別及說明

    文章介紹了Docker中Volume和BindMount兩種數(shù)據(jù)持久化機(jī)制的區(qū)別,Volume由Docker管理,支持?jǐn)?shù)據(jù)共享和加密,而BindMount將宿主機(jī)上的文件或目錄直接掛載到容器中,性能較好但依賴于宿主機(jī)的文件系統(tǒng)結(jié)構(gòu)
    2024-11-11
  • docker部署釘釘機(jī)器人報(bào)警通知的實(shí)現(xiàn)

    docker部署釘釘機(jī)器人報(bào)警通知的實(shí)現(xiàn)

    本文主要介紹了docker部署釘釘機(jī)器人報(bào)警通知的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • IDEA通過Docker插件部署SpringBoot項(xiàng)目的過程詳解

    IDEA通過Docker插件部署SpringBoot項(xiàng)目的過程詳解

    在idea中如何通過Docker插件部署SpringBoot項(xiàng)目呢?很多朋友在配置過程中走了很多誤區(qū),今天小編給大家分享一篇教程關(guān)于IDEA通過Docker插件部署SpringBoot項(xiàng)目的過程,感興趣的朋友一起看看吧
    2021-11-11
  • docker常用命令操作方法

    docker常用命令操作方法

    最近幾天都在研究docker,今天給大家分享docker一些常用的命令,需要的朋友可以參考下
    2017-11-11
  • 解決Docker鏡像拉取超時(shí)及優(yōu)化網(wǎng)絡(luò)配置的方法(failed to do request: Head “https://registry-1.docker.io/v2/*)

    解決Docker鏡像拉取超時(shí)及優(yōu)化網(wǎng)絡(luò)配置的方法(failed to do request

    在使用 Docker 構(gòu)建和部署應(yīng)用時(shí),拉取鏡像是一個(gè)關(guān)鍵的步驟,然而,在一些網(wǎng)絡(luò)環(huán)境中,特別是企業(yè)內(nèi)部網(wǎng)或受限網(wǎng)絡(luò)環(huán)境中,可能會(huì)遇到 Docker 鏡像拉取失敗或超時(shí)的問題,這篇博客將詳細(xì)探討如何應(yīng)對(duì) Docker 鏡像拉取超時(shí)的問題,需要的朋友可以參考下
    2024-11-11
  • Ubuntu?環(huán)境下安裝?Docker環(huán)境詳解

    Ubuntu?環(huán)境下安裝?Docker環(huán)境詳解

    這篇文章主要介紹了Ubuntu?環(huán)境下安裝?Docker環(huán)境詳解的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 解決docker報(bào)錯(cuò)Encountered errors while bringing up the project實(shí)測(cè)有效

    解決docker報(bào)錯(cuò)Encountered errors while bringing&n

    這篇文章主要介紹了解決docker報(bào)錯(cuò)Encountered errors while bringing up the project實(shí)測(cè)有效!具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解

    Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Docker?Compose搭建Wordpress服務(wù)實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 阿里云ECS部署Docker服務(wù)的實(shí)現(xiàn)步驟

    阿里云ECS部署Docker服務(wù)的實(shí)現(xiàn)步驟

    本文主要介紹了阿里云ECS部署Docker服務(wù)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Docker修改容器內(nèi)部文件的三種方法

    Docker修改容器內(nèi)部文件的三種方法

    今天在修改Docker內(nèi)部文件的時(shí)候,安裝vim居然失敗了,在執(zhí)行apt-get update時(shí)一直有幾個(gè)404,解決無果,最后放棄安裝vim,將文件拷貝出來修改,所以本文給大家分享一下如何修改Docker內(nèi)部文件的方法,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

南城县| 北京市| 北碚区| 平顶山市| 云安县| 特克斯县| 高尔夫| 城固县| 沧源| 司法| 西畴县| 洛宁县| 大埔县| 祥云县| 嘉兴市| 三都| 凉山| 曲阜市| 兰坪| 荥阳市| 松溪县| 日土县| 金乡县| 松江区| 汕尾市| 温宿县| 德保县| 封丘县| 怀宁县| 揭东县| 隆德县| 遵化市| 青田县| 汤阴县| 雅安市| 兴海县| 伊金霍洛旗| 苍山县| 遵化市| 鸡东县| 北安市|