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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

十分钟熟练Dockerfile指令

發布時間:2024/9/21 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 十分钟熟练Dockerfile指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • LABLE 給鏡像添加元數據信息
  • COPY 用戶從宿主機的當前目錄復制文件至創建的新映像文件
COPY <src> <dest> COPY ["<src>",..."<dest>"] <src>為要復制的源文件或目錄,支持使用通配符 <dest>為目標路徑,建議使用絕對路徑 復制代碼
  • 必須是build上下文中的路徑,不能是其父目錄中的文件
  • 如果是目錄,則其內部文件或子目錄會被遞歸復制, 但是目錄本身不會被復制

    • ADD 類似于COPY指令,ADD支持使用tar文件和URL路徑
    操作如COPY 復制代碼

    如果是一個本地系統上壓縮格式的tar文件,它降被展開為一個目錄,其行為類似 "tar -x"命令,通過url獲取到的tar文件將不會自動展開;


    • WORKDIR 用于為Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指定工作目錄
    WORKDIR /usr/local/ ADD nginx-1.15.2.tar.gz ./src/復制代碼
    • VOLUME

    定義存儲卷,只能制定容器內部的目錄


    • EXPOSE 用戶為容器打開制定要監聽的端口以實現與外部通信
    EXPOSE <port> EXPOSE 11211/udp 11211/tcp 復制代碼

    只有docker run 加 -P選項時才會將端口暴漏出來,如果不加,將不暴漏端口

    [root@cv0002 docker]# docker run --name t1 --rm tinyhttpd:v0.0.6 /bin/httpd -f -h /data/web/html [root@cv0002 ~]# docker port t1 [root@cv0002 ~]#[root@cv0002 docker]# docker run --name t1 --rm -P tinyhttpd:v0.0.6 /bin/httpd -f -h /data/web/html [root@cv0002 ~]# docker port t1 80/tcp -> 0.0.0.0:1024 復制代碼
    • ENV 用于為鏡像定義所需的環境變量,并可被Dockerfile文件中位于其后的其他指令(如ENV,ADD,COPY等)所調用,調用格式為\$variable或${variable}
    ENV <key> <value>或 ENV <key>=<value> ... 復制代碼
  • 第二種格式可以設置多個變量,若中包含空格,可以使用反斜線轉義,也可通過對加引號來標識,反斜線也可以用于續行
  • 定義多個變量時,建議使用第二種方式,以便在同一層中完成所有功能。
  • 如果在命令行中定義-e 更改環境變量,也只是更改了環境變量,之前編譯時候做的改變是更改不了的。
  • [root@cv0002 docker]# docker run --name t1 --rm tinyhttpd:v0.0.7 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=a2c3f68db164 DOC_ROOT=/data/web/html/ WEB_SERVER_PACKAGE=nginx-1.15.2 HOME=/root [root@cv0002 docker]# docker run --name t1 --rm -e WEB_SERVER_PACKAGE="nginx-1.15.1" tinyhttpd:v0.0.7 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=27213da32d60 WEB_SERVER_PACKAGE=nginx-1.15.1 DOC_ROOT=/data/web/html/ HOME=/root [root@cv0002 docker]# docker run --name t1 --rm -e WEB_SERVER_PACKAGE="nginx-1.15.1" tinyhttpd:v0.0.7 ls /usr/local/src nginx-1.15.2復制代碼

    RUN和CMD 如圖所示

  • RUN 在docker build中運行,構建鏡像時為了使鏡像完整使用的命令。在初始化容器時候時不可能再運行。
  • CMD 定義一個鏡像文件啟動為容器時候默認要運行的程序,且其運行結束后,容器也將終止,而docker容器默認只運行一個程序。CMD指令可以被docker run 的命令行所覆蓋
  • 注意:RUN命令在Dockerfile中可以有多個,且可以都生效,但是CMD有多個的話,但只有最后一個生效

    • RUN 命令格式
    RUN <command> RUN ["<executable>","<param1>","<param2>"] 復制代碼
  • 第一種格式,通常是一個shell命令,且以"/bin/sh -c "來運行它,這意味著此進程在容器中的PID不為1,不能接收unix信號(因為接收信號的都是進程為1的來接收),因此,當使用docker stop 命令停止容器時,此京城接收不到sigterm信號;
  • 第二種語法格式中的參數是一個json格式的數組,其中為要運行的命令,后面為參數。然而,此格式的命令不會以"/bin/sh -c" 來發起,因此不支持通配符等shell特性
  • 注意:Json數組中,要使用雙引號

    • CMD命令格式
    CMD <command> CMD ["<executable>","<param1>","<para 復制代碼
  • 前兩種語法格式的意義同RUN
  • 第三種則用于為ENTRYPOINT指令提供默認參數

    • ENTRYPOINT
  • 類似CMD指令的功能,用于為容器指定默認運行程序,從而使得容器像是一個單獨的可執行程序
  • 與CMD不同的是,有ENTRYPOINT啟動的程序不會被docker run命令行制定的參數所覆蓋,而且,這些命令行參數會被當做參數傳遞給ENTRYPOINT制定的程序,但會被docker run命令的--entryporint選項的參數可覆蓋ENTRYPOINT指令制定的程序
  • ENTRYPOINT <command> ENTRYPOINT [<"<executable>","<param1>","<param2>">] 復制代碼

    注意:docker run傳入的命令參數會覆蓋CMD指令的內容并且附加到ENTRYPOINT命令最后作為其參數使用

    注意:Dockerfile文件中也可以存在多個ENTRYPOINT指令,但僅有最后一個會生效


    • USER
      用于指定運行的image時的或運行Dockerfile中的任何RUN、CMD、或ENTRYPOINT指令指定的程序時的用戶名或UID,默認為root用戶
    USER <UID>|<username> 復制代碼

    注意:可以為任意數字,但是事件中必須為/etc/passwd中某用戶的有效UID,否則docker run命令將運行失敗


    • HEALTHCHECK 檢測應用是否正常運行
    HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/ #3s后開始檢查,需要等容器里面的操作全部運行完成再檢查 復制代碼
    • SHELL 修改或額外定義運行程序的默認shell
    復制代碼
    • STOPSIGNAL 更好docker stop 傳過來的信號指令,默認為15
    STOPSIGNAL signal 復制代碼
    • ARG 只再build中使用,類似變量,可以在docker run的時候通過--build-tag傳值,而ENV不可在docker run時傳值。

    • ONBUILD 用于在Dockerfile中定義一個觸發器(延時執行)
    ONBUILD <指令> 復制代碼

    當此Dockerfile被build為映像文件后,此映像文件亦可作為base image被另一個Dockerfile用作FROM指令的參數,并以之構建新的映像文件,此時,ONBUILD后的指令才會執行。

    注意:在ONBUILD指令中使用ADD或COPY指令應該格外小心,因為新構建過程的上下文有可能會缺少源文件


    喜歡我寫的東西的朋友可以關注一下我的公眾號:Devops部落

    轉載于:https://juejin.im/post/5c8b0b04f265da2dc70742f6

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的十分钟熟练Dockerfile指令的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。