<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Docker學(xué)習(xí)—DockerFile

          共 5914字,需瀏覽 12分鐘

           ·

          2020-11-06 02:53

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          ? 作者?|??chaney1992

          來(lái)源 |? urlify.cn/vqIFrm

          66套java從入門(mén)到精通實(shí)戰(zhàn)課程分享

          DockerFile是什么:

            Dockerfile 是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,Dockerfile內(nèi)容中包含了一條條構(gòu)建鏡像所需的指令和說(shuō)明。最終采用docker build 命令通過(guò)dockerfile中指令構(gòu)建鏡像

          各種指令詳情:

          1、From:指定基礎(chǔ)鏡像(dockerfile第一個(gè)指令)

          FROM?[--platform=]??[AS?]
          OR
          FROM?[--platform=]?[:]?[AS?]
          OR
          FROM?[--platform=]?[@]?[AS?]

          例如:
          FROM?mysql:5.8

           注意:

          • 有效的Dockerfile必須從FROM指令開(kāi)始

          • ARG是Dockerfile中唯一可能位于FROM之前的指令

          • FROM可以在一個(gè)Dockerfile中多次出現(xiàn),以創(chuàng)建多個(gè)映像或?qū)⒁粋€(gè)構(gòu)建階段用作另一個(gè)構(gòu)建階段的依賴項(xiàng)

          • 通過(guò)FROM指令添加AS name,可以選擇為新生成階段指定名稱(chēng)。該名稱(chēng)可以在后續(xù)的FROM和COPY--FROM=指令中使用,以引用在此階段中構(gòu)建的鏡像。

          • 標(biāo)記或摘要值是可選的

          2、RUN:構(gòu)建鏡像時(shí)執(zhí)行的命令

          兩種方式:
          ??RUN?<command>?????????????????????????????????##命令在shell中運(yùn)行,默認(rèn)情況下/bin/sh?-c在Linux或cmd?/S?/CWindows上運(yùn)行
          ??RUN?["executable",?"param1",?"param2"]??????##exec?方式
          例如:
          ??RUN?["/bin/bash",?"-c",?"echo?hello"]

           注意:

          • 將在當(dāng)前圖像頂部的新層中執(zhí)行所有命令,并提交結(jié)果

          • JSON格式中,必須轉(zhuǎn)義反斜杠。

            例如:RUN ["c:\\windows\\system32\\tasklist.exe"]  

          3、CMD:構(gòu)建容器后調(diào)用,也就是在容器啟動(dòng)時(shí)才進(jìn)行調(diào)用。

          三種格式:
          ????CMD?["executable","param1","param2"]??????????##執(zhí)行可執(zhí)行文件,優(yōu)先
          ????CMD?["param1","param2"]????????????????????????##設(shè)置了????ENTRYPOINT,則直接調(diào)用ENTRYPOINT添加參數(shù)
          ????CMD?command?param1?param2?????????????????????##執(zhí)行shell內(nèi)部命令
          例如:
          ??CMD?["/usr/bin/wc","--help"]

            注意:

          • CMD不同于RUN,CMD用于指定在容器啟動(dòng)時(shí)所要執(zhí)行的命令,而RUN用于指定鏡像構(gòu)建時(shí)所要執(zhí)行的命令。

          • EXEC形式被解析為一個(gè)JSON陣列,這意味著必須使用雙引號(hào)(“)周?chē)脑挷粏我?hào)(')

          4、LABEL:設(shè)置鏡像標(biāo)簽

           添加(K-V)形式元數(shù)據(jù)到鏡像中,如果標(biāo)簽值中需要包含空格時(shí),需要設(shè)置引號(hào);反斜杠用于換號(hào)設(shè)置;示例如下:

          LABEL?=?=?=?...例如:??LABEL?"com.example.vendor"="ACME?Incorporated"
          ??LABEL?com.example.label-with-value="foo"
          ??LABEL?version="1.0"
          ??LABEL?description="This?text?illustrates?\
          ??that?label-values?can?span multiple?lines."

           注意:

          • 鏡像中可以有多個(gè)LABLE,可以在一行指令中指定多個(gè)標(biāo)簽,如以下兩種格式:

          LABEL?multi.label1="value1"?multi.label2="value2"?other="value3"
          LABEL?multi.label1="value1"?\
          ??????multi.label2="value2"?\
          ??????other="value3"

          • 可以繼承基礎(chǔ)鏡像中包含的的標(biāo)簽,如果標(biāo)簽已存在時(shí),但值不同;則最近設(shè)置的值將覆蓋以前的值

          5、MAINTAINER(廢棄):設(shè)置生成鏡像的作者信息,可使用更加靈活的LABEL替代

          MAINTAINER?
          例如:
          ????MAINTAINER?
          替代:
          ????LABEL?maintainer="abc"

          6、EXPOSE:指定容器運(yùn)行時(shí)監(jiān)聽(tīng)指定網(wǎng)絡(luò)端口;可以設(shè)置端口是TCP或UDP,默認(rèn)TCP;

          語(yǔ)法:
          ??EXPOSE??[/...]
          例如:
          ????EXPOSE?80/tcp
          ????EXPOSE?80/udp

           注意:EXPOSE并不會(huì)讓容器的端口訪問(wèn)到主機(jī)。要使其可訪問(wèn),需要在docker?run運(yùn)行容器時(shí)通過(guò)-p來(lái)發(fā)布這些端口,或通過(guò)-P參數(shù)來(lái)發(fā)布EXPOSE導(dǎo)出的所有端口

          7、ENV:設(shè)置環(huán)境變量

          語(yǔ)法:ENV = ... ??##可以設(shè)置多個(gè)環(huán)境變量,如果key中包含空格,使用""進(jìn)行標(biāo)識(shí);反斜杠用于換行
          ?ENV????????##只能設(shè)置一個(gè)置,不推薦該寫(xiě)法
          例如:
          ?ENV?MY_NAME="John?Doe"
          ?ENV?MY_DOG=Rex\?The\?Dog
          ?ENV?MY_CAT=fluffy


           注意:

          • 從生成的映像運(yùn)行容器時(shí),使用ENV設(shè)置的環(huán)境變量將保持不變。

          • 修改ENV:docker run --env =

          8、ADD:將本地文件添加到容器中

          ADD?[--chown=:]?...?????
          ADD?[--chown=:]?["",...?""]?##包含空格的路徑時(shí),使用該方式
          例如:
          ?ADD?test.txt?relativeDir/
          ?ADD?test.txt?/absoluteDir/

           注意:

          • --chown功能僅在用于構(gòu)建Linux容器的Dockerfiles上受支持,而在Windows容器上不起作用

          • src可以指定讀個(gè)資源,但是如果它們是文件或目錄,則將其路徑解釋為相對(duì)于構(gòu)建上下文源的路徑。

          • src支持通配符,匹配規(guī)則采用Go的?filepath.Match規(guī)則完成

          • 目錄本身不被復(fù)制,僅其內(nèi)容被復(fù)制。

          • 如果是以公認(rèn)的壓縮格式(身份,gzip,bzip2或xz)作為本地tar歸檔文件,則將其解壓縮為目錄,來(lái)自遠(yuǎn)程URL的資源不會(huì)被解壓縮。

          • 如果直接或由于使用通配符而指定了多個(gè)資源,則該資源必須是目錄,并且必須以斜杠結(jié)尾/

          • 如果不以斜杠結(jié)尾,則將其視為常規(guī)文件,并將其內(nèi)容寫(xiě)入

          • 如果不存在,它將與路徑中所有缺少的目錄一起創(chuàng)建

          9、COPY:復(fù)制文件到容器指定目錄

          COPY?[--chown=:]?...?
          COPY?[--chown=:]?["",...?""]
          例如:
          ?COPY?test.txt?/absoluteDir/
          ?COPY?test.txt?relativeDir/

           注意:同ADD指令差不多,區(qū)別為以下內(nèi)容

          • 不會(huì)自動(dòng)解壓文件,也不能訪問(wèn)網(wǎng)絡(luò)資源

          • src不能為網(wǎng)絡(luò)資源

          10、ENTRYPOINT:配置容器,使其可執(zhí)行化

          ENTRYPOINT?["executable",?"param1",?"param2"]????##(可執(zhí)行文件,?優(yōu)先)
          ENTRYPOINT?command?param1?param2????????????##(shell內(nèi)部命令)
          例如:
          ENTRYPOINT?["top",?"-b"]

           CMD和ENTRYPOINT相互作用

          1. Dockerfile應(yīng)至少指定CMDENTRYPOINT命令之一。

          2. ENTRYPOINT?使用容器作為可執(zhí)行文件時(shí)應(yīng)定義。

          3. CMD應(yīng)該用作ENTRYPOINT在容器中定義命令或執(zhí)行臨時(shí)命令的默認(rèn)參數(shù)的方式。

          4. CMD?當(dāng)使用替代參數(shù)運(yùn)行容器時(shí),將被覆蓋。  

          11、VOLUME:指定持久化目錄

          VOLUME?["/data"]
          例如:
          ?VOLUME?["/var/www",?"/var/log/apache2",?"/etc/apache2"]?

           注意:

          • 一個(gè)卷可以存在于一個(gè)或多個(gè)容器的指定目錄,該目錄可以繞過(guò)聯(lián)合文件系統(tǒng),并具有以下功能:

            • 卷可以容器間共享和重用

            • 容器并不一定要和其它容器共享卷

            • 修改卷后會(huì)立即生效

            • 對(duì)卷的修改不會(huì)對(duì)鏡像產(chǎn)生影響

            • 卷會(huì)一直存在,直到?jīng)]有任何容器在使用它

          • 基于Windows的容器上的卷:使用基于Windows的容器時(shí):除C盤(pán)目錄、不存在或空目錄

          • 從Dockerfile中更改卷:如果在聲明了卷之后有任何構(gòu)建步驟更改了卷中的數(shù)據(jù),則這些更改將被丟棄。

          • SON格式:列表被解析為JSON數(shù)組。您必須用雙引號(hào)(")而不是單引號(hào)(')括住單詞。

          12、USER:指定運(yùn)行容器時(shí)的用戶名或 UID,后續(xù)的 RUN 也會(huì)使用指定用戶

          USER?[:]
          or
          USER?[:]

           注意:

          • 使用USER指定用戶后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都將使用該用戶。

          • 鏡像構(gòu)建完成后,通過(guò)docker run運(yùn)行容器時(shí),可以通過(guò)-u參數(shù)來(lái)覆蓋所指定的用戶。

          • 當(dāng)服務(wù)不需要管理員權(quán)限時(shí),可以通過(guò)該命令指定運(yùn)行用戶。并且可以在之前創(chuàng)建所需要的用戶

          13、WORKDIR:設(shè)置工作目錄

          WORKDIR /path/to/workdir

          ?

          ? 注意:

          • 通過(guò)WORKDIR設(shè)置工作目錄后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都會(huì)在該目錄下執(zhí)行。
          • 在使用docker run運(yùn)行容器時(shí),可以通過(guò)-w參數(shù)覆蓋構(gòu)建時(shí)所設(shè)置的工作目錄。

          14、ARG:構(gòu)建參數(shù)

          ARG?[=]
          例如:
          ?ARG?user1=someuser
          ?ARG?buildno=1?

          ? 注意:

          • ARG 設(shè)置的環(huán)境變量?jī)H對(duì) Dockerfile 內(nèi)有效

          • 不建議使用構(gòu)建變量傳遞敏感信息,構(gòu)建變量值在docker history 可以查看

          • 內(nèi)置Arg變量:

            • HTTP_PROXY

            • http_proxy

            • HTTPS_PROXY

            • https_proxy

            • FTP_PROXY

            • ftp_proxy

            • NO_PROXY

            • no_proxy

          15、ONBUILD:設(shè)置鏡像觸發(fā)器

          ONBUILD?
          例如:
          ?ONBUILD?ADD?.?/app/src
          ?ONBUILD?RUN?/usr/local/bin/python-build?--dir?/app/src?

           注意:

          • 不允許ONBUILD使用鏈接說(shuō)明ONBUILD ONBUILD

          • ONBUILD指令可能不會(huì)觸發(fā)FROMMAINTAINER指令

          16、STOPSIGNAL:?STOPSIGNAL指令設(shè)置將發(fā)送到容器以退出的系統(tǒng)調(diào)用信號(hào)

          STOPSIGNAL signal

          17、HEALTHCHECK:指定某個(gè)程序或者指令來(lái)監(jiān)控 docker 容器服務(wù)的運(yùn)行狀態(tài)。

          兩種形式:
          ??HEALTHCHECK?[OPTIONS]?CMD?command???(通過(guò)在容器內(nèi)部運(yùn)行命令來(lái)檢查容器運(yùn)行狀況)
          ??HEALTHCHECK?NONE?????????????(禁用從基映像繼承的任何運(yùn)行狀況檢查)
          例如:
          ??HEALTHCHECK?--interval=5m?--timeout=3s?\
          ????CMD?curl?-f?http://localhost/?||?exit?1

           注意:

          • HEALTHCHECKDockerfile中只能有一條指令。如果您列出多個(gè),則只有最后一個(gè)HEALTHCHECK才會(huì)生效。

          18、SHELL:允許重寫(xiě)命令的SHELL形式所使用的默認(rèn)SHELL。Linux上的默認(rèn)shell為[“/bin/sh”、“-c”];Windows上的默認(rèn)shell為[“cmd”、“/S”、“/c”]

          語(yǔ)法:
          ??SHELL?["executable",?"parameters"]
          例如:
          ??SHELL?["powershell",?"-command"]

           注意:

          • SHELL可以出現(xiàn)多次。每個(gè)SHELL指令將覆蓋所有先前的SHELL指令,并影響所有后續(xù)的指令

          • SHELL指令在Windows上特別有用,在Windows上有兩個(gè)常用且完全不同的本機(jī)shell:cmdpowershell

          DockerFile示例:

          #設(shè)置基礎(chǔ)鏡像
          FROM?mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim?AS?base
          #設(shè)置工作目錄WORKDIR?/app
          #設(shè)置監(jiān)聽(tīng)端口EXPOSE?80
          #設(shè)置鏡像
          FROM?mcr.microsoft.com/dotnet/core/sdk:3.1-buster?AS?build#設(shè)置工作目錄
          WORKDIR?/src#復(fù)制文件夾
          COPY?["cz.IdentityServer/cz.IdentityServer.csproj",?"cz.IdentityServer/"]
          #執(zhí)行項(xiàng)目還原命令RUN?dotnet?restore?"cz.IdentityServer/cz.IdentityServer.csproj"
          #復(fù)制文件COPY?.?.
          WORKDIR?"/src/cz.IdentityServer"#執(zhí)行編譯項(xiàng)目命令
          RUN?dotnet?build?"cz.IdentityServer.csproj"?-c?Release?-o?/app/build
          #執(zhí)行發(fā)布項(xiàng)目
          FROM?build?AS?publish
          RUN?dotnet?publish?"cz.IdentityServer.csproj"?-c?Release?-o?/app/publish

          FROM?base?AS?final
          WORKDIR?/app#復(fù)制發(fā)布內(nèi)容到docker目錄
          COPY?--from=publish?/app/publish?.#啟動(dòng)項(xiàng)目
          ENTRYPOINT?["dotnet",?"cz.IdentityServer.dll"]

          參考:https://docs.docker.com/engine/reference/builder/





          粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取

          ???

          ?長(zhǎng)按上方微信二維碼?2 秒
          即可獲取資料



          感謝點(diǎn)贊支持下哈?

          瀏覽 46
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  高潮喷水视频 | 久久肏| 成人免费a级 | 99re最新 | a免费人日本网站. |