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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Dockerfile中的保留字指令讲解

發(fā)布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dockerfile中的保留字指令讲解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前簡單學(xué)過Docker,當(dāng)時是為了快速部署一個項目,過的很快,對于Dockerfile文件的編寫,有些顯的陌生。

所以就寫了這篇文章。希望能夠幫助到大家哦!!!

一、Dockerfile是什么?

概念:

Dockerfile是用來構(gòu)建Docker鏡像的構(gòu)建文件,由一系列命令和參數(shù)構(gòu)成的腳本

構(gòu)建三步驟:

  • 編寫Dockerfile文件
  • docker build
  • docker run
  • Centos案例:

    centos案例:

    FROM scratch #真正的基礎(chǔ)鏡像, ADD centos-7-x86_64-docker.tar.xz /# label 說明的意思 LABEL \ org.label-schema.schema-version="1.0" \org.label-schema.name="CentOS Base Image" \org.label-schema.vendor="CentOS" \org.label-schema.license="GPLv2" \org.label-schema.build-date="20201113" \org.opencontainers.image.title="CentOS Base Image" \org.opencontainers.image.vendor="CentOS" \org.opencontainers.image.licenses="GPL-2.0-only" \org.opencontainers.image.created="2020-11-13 00:00:00+00:00"CMD ["/bin/bash"] #最后一行執(zhí)行的命令

    在哪找到的勒,在hub.docker.com上找到滴:centos。

    我們不會,但是可以先去看看人家怎么寫的,抄作業(yè)這事,我想大家都熟悉吧。俗稱CV大法😂。

    二、Dockerfile構(gòu)建過程分析

    入門知識:

  • 每條保留字指令(今天的重點)都必須為大寫字母并且后面要跟隨至少一個參數(shù)。

    如:

    FROM scratch #真正的基礎(chǔ)鏡像, ADD centos-7-x86_64-docker.tar.xz /
  • 指令按照從上到下,順序執(zhí)行

  • #表示注釋。

    #這就是注釋
  • 每條指令都會創(chuàng)建一個新的鏡像層,并對鏡像進行提交。

    就如下面這樣,可以套娃一樣。

  • Dockerfile執(zhí)行流程分析:

  • docker從基礎(chǔ)鏡像運行一個容器
  • 執(zhí)行一條指令并對容器作出修改
  • 執(zhí)行類似docker commit的操作提交一個新的鏡像層。
  • docker再基于剛提交的鏡像運行一個新容器
  • 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成
  • 后文有案例,結(jié)合案例回過來看更容易理解。


    小小番外

    在現(xiàn)階段,我們將Dockerfile、Docker鏡像和Docker容器看待為軟件的三個不同階段。

    Dockerfile面向開發(fā)—>Docker鏡像成為交付標準—>Docker容器則涉及部署與運維

    • 在Dockerfile中定義了進程所需要的一切東西,以前需要依賴的環(huán)境變量、依賴包、運行時環(huán)境等都被寫入到Dockerfile文件中啦。比起之前你在Liunx服務(wù)器中,下載那么那么多軟件,配置那么那么多,真的是簡單蠻多,起碼對于我這個菜雞來說用Docker部署真的簡單了蠻多的。

    • Docker鏡像是在用Dockerfile定義了一個文件后,docker build 時產(chǎn)生的一個Docker鏡像,當(dāng)運行時Docker鏡像時,才會真正開始提供服務(wù)。

    • Docker容器就是運行起來即可提供服務(wù)的。

    三、Dockerfile保留字指令

    Dockerfiel保留字指令大致有以下:

  • FROM
  • MAINTANINER
  • RUN
  • EXPOSE
  • WORKDIR
  • ENV
  • ADD
  • COPY
  • VOLUME
  • CMD
  • ENTRYPOINT
  • ONBUILD
  • 3.1、FROM

    基礎(chǔ)鏡像,即當(dāng)前新鏡像是基于哪個鏡像創(chuàng)建的。

    #基于openjdk:8 創(chuàng)建鏡像 FROM openjdk:8

    3.2、MAINTAINER

    鏡像維護者的姓名和郵箱地址

    MAINTAINER 寧在春<crush@163.com>

    3.3、RUN

    容器構(gòu)建時需要運行的指令

    RUN mkdir -p /conf/my.cn

    3.4、EXPOSE

    當(dāng)前容器對外暴露的端口

    #暴露出MyCat的所需端口 EXPOSE 8066 9066

    3.5、WORKDIR

    指定在創(chuàng)建容器后,終端默認登錄的進來工作目錄

    #容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作 WORKDIR /usr/local/mycat

    3.6、ENV

    用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量

    #用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量ENV MYCAT_HOME=/usr/local/mycat

    這個環(huán)境變量可以在后續(xù)的任何RUN指令中使用,這就如同在命令前面指定了環(huán)境變量前綴一樣;也可以在其它指令中直接使用這些環(huán)境變量。

    如:

    RUN $MYCAT_HOME/mycat

    3.7、ADD 和 COPY

    ADD

    將宿主機目錄下的文件拷貝進鏡像,并且ADD命令會自動處理URL和解壓tar壓縮包

    ADD centos-6-docker.tar.xz /

    COPY

    類似ADD,拷貝文件和目錄到鏡像中。

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

    COPY src destCOPY ["src" "dest"]

    3.8、VOLUME

    容器數(shù)據(jù)卷,用于數(shù)據(jù)持久化和數(shù)據(jù)保存。

    #將mycat的配置文件的地址暴露出映射地址,啟動時直接映射宿主機的文件夾VOLUME /usr/local/mycat

    3.9、CMD 和 ENTRYPOINT

    CMD

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

    • shell格式:CMD<命令>
    • exec格式:CMD ["可執(zhí)行文件“,”參數(shù)1“,”參數(shù)2“…]

    Dockerfile中可以有多個CMD指令,但只有最后一個生效,CMD會被docker run之后的參數(shù)替換。

    ENTRYPOINT

    指定一個容器啟動時要運行的命令。

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

    區(qū)別

    在這里先簡單說明一下區(qū)別,你可以將CMD理解為覆蓋

    CMD cat /conf/my.cnfCMD /bin/bash

    這兩條指令都寫在Dockerfile文件中,只會執(zhí)行CMD /bin/bash ,而不會執(zhí)行CMD cat /conf/my.cnf,因為CMD /bin/bash把上一條直接覆蓋掉了。

    而ENTRYPOINT則不同,你可以將ENTRYPOINT簡單理解為追加。

    主要體現(xiàn)在docker run 上,如果使用dockerfile文件中最后是CMD結(jié)尾,則在運行時不能夠額外追加命令,否則會覆蓋掉Dockerfile中的CMD命令。

    而Dockerfile文件中最后一行為ENTRYPOINT結(jié)尾時,你可以在docker run命令后追加一些命令.

    3.10、ONBUILD

    當(dāng)構(gòu)建一個被繼承的Dockerfile時運行命令,父鏡像在被子繼承后,父鏡像的onbuild被觸發(fā)。

    四、實戰(zhàn)案例

    4.1、制作一個自己的Centos鏡像

    4.1.1、引入:

    我們先從阿里云上拉取一個centos看看,看看有哪些問題,然后我們再進行自定義。

    docker pull centos # 拉取鏡像docker run -it centos #運行鏡像# ===== 測試====vim ceshi.txtifconfig pwd

    為什么會這樣?因為docker倉庫中的Centos是精簡版,其只有內(nèi)核,沒有其它的東西。

    要求自定義的Centos能夠解決上述問題。

    4.1.2、編寫Dockerfile文件

    為我們自定義的Centos 編寫Dockerfile文件

    FROM centosMAINTAINER 寧在春<crush@163.com>ENV MYPATH /usr/localWORKDIR $MYPATHRUN yum -y install vimRUN yum -y install net-toolsEXPOSE 80 CMD echo $MYPATHCMD echo "success"CMD /bin/bash #只會運行最后一個

    然后把這個復(fù)制進去即可。

    mkdir -p /usr/local/docker/mycentos # 自己創(chuàng)建存放的位置vim Dockerfile

    4.1.3、構(gòu)建centos鏡像

    docker build -f /usr/local/docker/mycentos/Dockerfile -t mycentos:1.1 .

    解釋:

    • -f:后面跟隨的是Dockerfile 文件

    • -t :后面跟隨的鏡像名和版本號。

    • 最后的小數(shù)點:就表明是當(dāng)前目錄。

    • docker build -f Dockerfile文件 -t 鏡像名:tag .
    • 當(dāng)dockerfile文件命名為dockerfile時并且在當(dāng)前目錄下時可簡寫為:

    • docker build -t 鏡像名:tag .docker build -t mycentos:1.1 .

    執(zhí)行

    看到最后的這個就是代表成功了。

    docker images 查看全部鏡像:

    4.1.4、運行Centos鏡像

    docker run -it mycentos:1.3pwdifconfig

    之所以我們進去容器的目錄會從/切換到/usr/local是因為在dockerfile文件中已經(jīng)寫明。

    ENV MYPATH /usr/localWORKDIR $MYPATH

    4.1.5、查看鏡像的變更歷史

    docker history mycentos:1.1

    在這里也可以看出來,鏡像它是由Dockerfile文件中的指令,一層一層構(gòu)建出來的。

    4.2、ONBUILD示例

    率先構(gòu)建一個夫鏡像

    編寫dockerfile文件,命名為dockerfile2

    FROM centosRUN yum -y install curlONBUILD RUN echo "我被子鏡像繼承了,輸出此條語句"CMD ["crul", "-s","http://ip.cn"] docker build -f /usr/local/docker/mycentos/Dockerfile2 -t my_father_centos .

    構(gòu)建一個鏡像繼承夫鏡像

    編寫dockerfile文件,命名為dockerfile3哈

    FROM my_father_centosRUN yum -y install curlCMD ["crul", "-s","http://ip.cn"] docker build -f /usr/local/docker/mycentos/Dockerfile3 -t my_son_centos .

    可以看到父鏡像中的語句被輸出了。

    五、自言自語

    紙上得來終覺淺,絕知此事要躬行。

    大家好,我是博主寧在春:主頁

    一名喜歡文藝卻踏上編程這條道路的小青年。

    希望:我們,待別日相見時,都已有所成。

    換個小貓表情,我們一起擊個掌吧。

    總結(jié)

    以上是生活随笔為你收集整理的Dockerfile中的保留字指令讲解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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