欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

在 Dockerfile 中用到的命令有

FROM

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

FROM 一定是首個非注釋指令 Dockerfile.

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

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

MAINTAINER

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

RUN

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

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

RUN 指令緩存不會在下個命令執(zhí)行時自動失效。比如 RUN apt-get dist-upgrade -y 的緩存就可能被用于下一個指令. --no-cache 標志可以被用于強制取消緩存使用。

ENV

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

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

USER

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

WORKDIR

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

COPY

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

<src>

必須是想對于源文件夾的一個文件或目錄,也可以是一個遠程的url,<dest>

是目標容器中的絕對路徑。

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

ADD

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

<src> 必須是想對于源文件夾的一個文件或目錄,也可以是一個遠程的url。<dest> 是目標容器中的絕對路徑。

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

VOLUME

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

EXPOSE

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

CMD

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

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

當你使用shell或exec格式時,  CMD

會自動執(zhí)行這個命令。

ONBUILD

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

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

ARG

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

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

LABEL

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

ENTRYPOINT

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

注意:

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

CMD ls -l

or

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

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

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

  • 盡量合并命令

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

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

將多個可以合并的命令(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 命令自帶解壓功能,如果需要拷貝并解壓一個文件到鏡像中,那么我們可以使用 ADD 命令。除此之外,我們都推薦使用 COPY 命令。

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

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

總結(jié)

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

相關(guān)文章

  • docker搭建CMS點播系統(tǒng)帶播放器功能

    docker搭建CMS點播系統(tǒng)帶播放器功能

    熟悉docker的童鞋都知道,安裝是非常的便利的,也可以在線體驗的,今天通過本文給大家介紹docker搭建CMS點播系統(tǒng)帶播放器功能,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • docker容器通過ping直接運行獲取公網(wǎng)IP操作

    docker容器通過ping直接運行獲取公網(wǎng)IP操作

    這篇文章主要介紹了docker容器通過ping直接運行獲取公網(wǎng)IP操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Elasticsearch/Kibana密碼設(shè)置方法

    Elasticsearch/Kibana密碼設(shè)置方法

    這篇文章主要介紹了Elasticsearch/Kibana密碼設(shè)置,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 使用Docker部署JSON Crack的流程步驟

    使用Docker部署JSON Crack的流程步驟

    本文將給大家詳細介紹了如何使用Docker部署JSON Crack,JSON Crack 是一款免費的開源數(shù)據(jù)可視化應(yīng)用程序,能夠?qū)?nbsp;JSON、YAML、XML、CSV 等數(shù)據(jù)格式可視化為交互式圖表,文中通過代碼和圖片給大家講解的非常詳細,需要的朋友可以參考下
    2024-02-02
  • docker網(wǎng)絡(luò),docker-compose?network問題

    docker網(wǎng)絡(luò),docker-compose?network問題

    這篇文章主要介紹了docker網(wǎng)絡(luò),docker-compose?network問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 關(guān)于ROS2安裝與docker環(huán)境使用

    關(guān)于ROS2安裝與docker環(huán)境使用

    大家好,本篇文章主要講的是關(guān)于ROS2安裝與docker環(huán)境使用,感興趣的同學趕快來看看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 查看docker是否處于啟動狀態(tài)的方法詳解

    查看docker是否處于啟動狀態(tài)的方法詳解

    Docker 是一個開源的應(yīng)用容器引擎,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,本文主要給大家介紹了查看docker是否處于啟動狀態(tài)的方法,需要的朋友可以參考下
    2024-06-06
  • docker 連接宿主Mysql操作

    docker 連接宿主Mysql操作

    這篇文章主要介紹了docker 連接宿主Mysql操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • docker啟動ES內(nèi)存溢出的解決方案

    docker啟動ES內(nèi)存溢出的解決方案

    這篇文章主要介紹了docker啟動ES內(nèi)存溢出的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • IDEA整合Docker的實現(xiàn)步驟

    IDEA整合Docker的實現(xiàn)步驟

    本文主要介紹了IDEA整合Docker的實現(xiàn)步驟,主要設(shè)置了遠程連接,插件以及配置信息等,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10

最新評論