<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # <span style="font-size:15px">**構建介紹**</span> 1. Dockerfile中所用的所有文件一定要和Dockerfile文件在同一級父目錄下,可以為Dockerfile父目錄的子目錄 2. Dockerfile中相對路徑默認都是Dockerfile所在的目錄 3. Dockerfile中每一條指令被視為一層,執行順序從上至下,每一個指令都會創建一個新的鏡像層,并提交 ![](https://img.kancloud.cn/f2/54/f254225d144c33380c727a40b9e7b846_735x478.png) # <span style="font-size:15px">**指令介紹**</span> ![](https://img.kancloud.cn/15/36/15369d7d2b97369dd25fa094d30c59d9_528x277.png) ## <span style="font-size:15px">**FROM**</span> 指定基礎鏡像,并且必須是第一條指令。 如果不以任何鏡像為基礎,那么寫法為:FROM scratch。 ``` FROM <image> FROM <image>:<tag> FROM <image>:<digest> 其中<tag>和<digest> 是可選項,默認值為latest ``` ## <span style="font-size:15px">**MAINTAINER**</span> 指定作者,國際標準為姓名加郵箱 ``` MAINTAINER <name> ``` ## <span style="font-size:15px">**LABEL**</span> LABEL 指令用來給鏡像添加一些元數據(metadata),以鍵值對的形式。 LABEL會繼承基礎鏡像種的LABEL,如遇到key相同,則值覆蓋。 ``` // 語法格式如下: LABEL <key>=<value> <key>=<value> <key>=<value> ... // 添加作者 LABEL org.opencontainers.image.authors="cy" ``` ## <span style="font-size:15px">**ADD**</span> ADD 指令和 COPY 的使用格類似(同樣需求下,官方推薦使用 COPY)。功能也類似,不同之處如下: * ADD 的優點:在執行 為 tar 壓縮文件的話,壓縮格式為 gzip, bzip2 以及 xz 的情況下,會自動復制并解壓到目標路徑。 * ADD 的缺點:在不解壓的前提下,無法復制 tar 壓縮文件。會令鏡像構建緩存失效,從而可能會令鏡像構建變得比較緩慢。具體是否使用,可以根據是否需要自動解壓來決定。 **說明:** 1. 路徑的填寫可以是容器內的絕對路徑,也可以是相對于工作目錄的相對路徑,推薦寫成絕對路徑 2. 可以是一個本地文件或者是一個本地壓縮文件,還可以是一個url 3. 如果把寫成一個url,那么ADD就類似于wget命令 ``` // src為一個目錄的時候,會自動把目錄下的文件復制過去,目錄本身不會復制 // 如果src為多個文件,dest一定要是一個目錄 ADD <src>... <dest> ADD ["<src>",... "<dest>"] ADD test relativeDir/ ADD test /relativeDir ADD http://example.com/foobar / ``` ## <span style="font-size:15px">**COPY**</span> * COPY 指令從 <src> 復制新文件、目錄或遠程文件 URL,并將它們添加到路徑 <dest> * 可以指定多個 <src> 資源,但如果它們是文件或目錄,則它們的路徑被解析為相對于構建上下文的源 * 每個 <src> 可能包含通配符,匹配將使用 Go 的 filepath.Match 規則完成 * <dst\>是絕對路徑,或相對于 WORKDIR 的路徑 ``` COPY [--chown=<user>:<group>] <源路徑1>... <目標路徑> COPY [--chown=<user>:<group>] ["<源路徑1>",... "<目標路徑>"] ``` **通配符用法:** * \* 通配符:把所有 hom 開頭的文件復制到鏡像文件系統的 /mydir/ 目錄下 ~~~ COPY hom* /mydir/ ~~~ * \* ? 通配符:?匹配 0 或 1 個字符,比如會把 home.txt 文件復制到 /mydir/ 目錄下 ``` COPY hom?.txt /mydir/ ``` **注意:** * <src\>路徑必須在構建的上下文中:不能添加 ?../something?、?/something?,因為docker構建的第一步是將上下文目錄(和子目錄)發送到 docker 守護進程 ``` # test.txt 是相對路徑,相對于構建上下文 COPY test.txt /mkdir/ # 錯誤寫法,文件均不在上下文目錄中,并不會被找到 # 這個找的就是構建上下文的上級目錄的 test.txt COPY ../test.txt /mkdir/ # 這個找的是本機根目錄下的 test.txt COPY /test.txt /mkdir/ ``` * <src\>是目錄,則復制目錄的全部內容,不會復制目錄本身 `COPY dir /mydir/` * <dst\> 必須是一個目錄,并且必須以斜杠/ 結尾 * <dst\> 不以斜杠結尾,將被視為常規文件,并且 <src\>的內容將寫入<dst\> * <dst\>不存在時,會自動創建 ## <span style="font-size:15px">**EXPOSE**</span> 僅僅只是聲明端口。 作用: * 幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射。 * 在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。 ``` EXPOSE <端口1> [<端口2>...] ``` ## <span style="font-size:15px">**ENV**</span> 設置環境變量,定義了環境變量,那么在后續的指令中,就可以使用這個環境變量。 ``` ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>... ``` 在Dockerfile中使用變量的方式 * $varname * ${varname} * ${varname:-default value}:當變量不存在使用-號后面的值 * $(varname:+default value}:當變量存在時使用+號后面的值(當然不存在也是使用后面的值) ## <span style="font-size:15px">**RUN**</span> 用于執行后面跟著的命令行命令。有以下倆種格式: ``` RUN <命令行命令> // shell格式,<命令行命令> 等同于,在終端操作的 shell 命令。 RUN ["可執行文件", "參數1", "參數2"] // exec 格式 // 例子: RUN ["./test.php", "dev", "offline"] 等價于 RUN ./test.php dev offline ``` **注意:** Dockerfile 的指令每執行一次都會在 docker 上新建一層。所以過多無意義的層,會造成鏡像膨脹過大。 ``` // 此操作執行會創建 3 層鏡像 FROM centos RUN yum -y install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz // 簡化后效果一致,且只會創建1層鏡像 FROM centos RUN yum -y install wget \ && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \ && tar -xvf redis.tar.gz ``` ## <span style="font-size:15px">**CMD**</span> 類似于 RUN 指令,用于運行程序,但二者運行的時間點不同: * CMD 在docker run 時運行。 * RUN 是在 docker build。 **作用**:為啟動的容器指定默認要運行的程序,程序運行結束,容器也就結束。CMD 指令指定的程序可被 docker run 命令行參數中指定要運行的程序所覆蓋。 **注意**:如果 Dockerfile 中如果存在多個 CMD 指令,僅最后一個生效。 ``` CMD <shell 命令> CMD ["<可執行文件或命令>","<param1>","<param2>",...] CMD ["<param1>","<param2>",...] # 該寫法是為 ENTRYPOINT 指令指定的程序提供默認參數 ``` ## <span style="font-size:15px">**ENTRYPOINT**</span> 容器啟動時運行的啟動命令。 > 類似于 CMD 指令,但其不會被 docker run 的命令行參數指定的指令所覆蓋,而且這些命令行參數會被當作參數送給 ENTRYPOINT 指令指定的程序。 > 但是, 如果運行 docker run 時使用了 --entrypoint 選項,將覆蓋 ENTRYPOINT 指令指定的程序。 **優點**:在執行 docker run 的時候可以指定 ENTRYPOINT 運行所需的參數。 **注意**:如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最后一個生效。 **與CMD的區別:** * ENTRYPOINT不會被運行的command覆蓋,而CMD則會被覆蓋 * 如果在Dockerfile種同時寫了ENTRYPOINT和CMD,并且CMD指令不是一個完整的可執行命令,那么CMD指定的內容將會作為ENTRYPOINT的參數;如果CMD是一個完整的指令,那么它們兩個會互相覆蓋,誰在最后誰生效 ``` ENTRYPOINT ["<executeable>","<param1>","<param2>",...] // 實例: 1、Dockerfile 構建了 nginx:test 鏡像 FROM nginx ENTRYPOINT ["nginx", "-c"] # 定參 CMD ["/etc/nginx/nginx.conf"] # 變參 2、不傳參運行,容器內會默認運行以下命令,啟動主進程。 $ docker run nginx:test // nginx -c /etc/nginx/nginx.conf 3、傳參運行,容器內會默認運行以下命令,啟動主進程(/etc/nginx/new.conf:假設容器內已有此文件) $ docker run nginx:test -c /etc/nginx/new.conf // nginx -c /etc/nginx/new.conf ``` ## <span style="font-size:15px">**VOLUME**</span> 定義匿名數據卷。在啟動容器時忘記掛載數據卷,會自動掛載到匿名卷。 作用: * 避免重要的數據,因容器重啟而丟失,這是非常致命的。 * 避免容器不斷變大。 ``` VOLUME ["<路徑1>", "<路徑2>"...] VOLUME <路徑> ``` ## <span style="font-size:15px">**USER**</span> 用于指定執行后續命令的用戶和用戶組,這邊只是切換后續命令執行的用戶(用戶和用戶組必須提前已經存在)。 ``` USER <用戶名>[:<用戶組>] ``` ## <span style="font-size:15px">**WORKDIR**</span> 指定工作目錄。用 WORKDIR 指定的工作目錄,會在構建鏡像的每一層中都存在。(WORKDIR 指定的工作目錄,必須是提前創建好的)。 docker build 構建鏡像過程中的,每一個 RUN 命令都是新建的一層。只有通過 WORKDIR 創建的目錄才會一直存在。 ``` WORKDIR <工作目錄路徑> ``` ## <span style="font-size:15px">**ARG**</span> 構建參數,與 ENV 作用一致。不過作用域不一樣。ARG 設置的環境變量僅對 Dockerfile 內有效,也就是說只有 docker build 的過程中有效,構建好的鏡像內不存在此環境變量。 構建命令 docker build 中可以用` --build-arg <參數名>=<值> `來覆蓋。 ``` ARG <參數名>[=<默認值>] ``` ## <span style="font-size:15px">**ONBUILD**</span> 用于延遲構建命令的執行。 簡單的說,就是 Dockerfile 里用 ONBUILD 指定的命令,在本次構建鏡像的過程中不會執行(假設鏡像為 test-build)。當有新的 Dockerfile 使用了之前構建的鏡像 FROM test-build ,這時執行新鏡像的 Dockerfile 構建時候,會執行 test-build 的 Dockerfile 里的 ONBUILD 指定的命令。 ``` ONBUILD <其它指令> ``` ## <span style="font-size:15px">**STOPSIGNAL**</span> STOPSIGNAL命令是的作用是當容器停止時給系統發送什么樣的指令,默認是15 ``` STOPSIGNAL signal ``` ## <span style="font-size:15px">**HEALTHCHECK**</span> 用于指定某個程序或者指令來監控 docker 容器服務的運行狀態。 HEALTHCHECK命令只能出現一次,如果出現了多次,只有最后一個生效。 ``` HEALTHCHECK [選項] CMD <命令>:設置檢查容器健康狀況的命令 HEALTHCHECK NONE:如果基礎鏡像有健康檢查指令,使用這行可以屏蔽掉其健康檢查指令 HEALTHCHECK [選項] CMD <命令> : 這邊 CMD 后面跟隨的命令使用,可以參考 CMD 的用法。 ``` 選項支持以下三種: * –interval=DURATION 兩次檢查默認的時間間隔為30秒 * –timeout=DURATION 健康檢查命令運行超時時長,默認30秒 * –retries=N 當連續失敗指定次數后,則容器被認為是不健康的,狀態為unhealthy,默認次數是3 CMD后邊的命令的返回值決定了本次健康檢查是否成功,具體的返回值如下: * 0: success - 表示容器是健康的 * 1: unhealthy - 表示容器已經不能工作了 * 2: reserved - 保留值
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看