<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] ## dockerfile ### 構建鏡像:docker build -f /path/Dockerfile dockerfile:https://blog.csdn.net/m0_46090675/article/details/121846718 https://www.jianshu.com/p/11265192400a >Dockerfile 是一個文本文件,其內包含了一條條的指令(Instruction),用于構建鏡像。每一條指令構建一層鏡像,因此每一條指令的內容,就是描述該層鏡像應當如何構建。 >完整鏡像結構圖 ![](https://img.kancloud.cn/11/a7/11a7044ddeefa9224cab88a5d46abdec_1977x994.png) ### 命令解析 #### FROM >指定基礎鏡像,必須為第一個命令 ~~~ 格式:   FROM <image>   FROM <image>:<tag>   FROM <image>@<digest> 示例:   FROM mysql:5.6 注:tag或digest是可選的,如果不使用這兩個值時,會使用latest版本的基礎鏡像 ~~~ #### RUN >構建鏡像時執行的命令 ~~~ RUN用于在構建鏡像時執行命令,其有以下兩種命令執行方式: shell執行 格式: RUN <command> exec執行 格式: RUN ["executable", "param1", "param2"] 示例: RUN apk update RUN ["/etc/execfile", "arg1", "arg1"] 注:RUN指令創建的中間鏡像會被緩存,并會在下次構建中使用。如果不想使用這些緩存鏡像, 可以在構建時指定--no-cache參數,如:docker build --no-cache ~~~ #### ADD >將本地文件添加到容器中,tar類型文件會自動解壓(網絡壓縮資源不會被解壓),可以訪問網絡資源,類似wget ~~~ 格式: ADD <src>... <dest> ADD ["<src>",... "<dest>"] 用于支持包含空格的路徑 示例: ADD hom* /mydir/ # 添加所有以"hom"開頭的文件 ADD hom?.txt /mydir/ # ? 替代一個單字符,例如:"home.txt" ADD test relativeDir/ # 添加 "test" 到 `WORKDIR`/relativeDir/ ADD test /absoluteDir/ # 添加 "test" 到 /absoluteDir/ ~~~ #### COPY >功能類似ADD,但是是不會自動解壓文件,也不能訪問網絡資源 ~~~ # 復制單個文件 COPY data01.txt /home/data/ # 復制多個文件,根據通配符匹配 COPY data*.txt /home/data/ # 復制文件夾 COPY temp/data/ /home/data/ ~~~ #### CMD >構建鏡像后調用,也就是在容器啟動時才進行調用。 ~~~ 格式: CMD ["executable","param1","param2"] (執行可執行文件,優先) CMD ["param1","param2"] (設置了ENTRYPOINT,則直接調用ENTRYPOINT添加參數) CMD command param1 param2 (執行shell內部命令) 示例: CMD echo "This is a test." | wc -l CMD ["/usr/bin/wc","--help"] 注:CMD不同于RUN,CMD用于指定在容器啟動時所要執行的命令,而RUN用于指定鏡像構建時所要執行的命令 ~~~ #### ENTRYPOINT >配置容器,使其可執行化。配合CMD可省去"application",只使用參數。指定容器啟動時執行的命令 ~~~ 格式: ENTRYPOINT ["executable", "param1", "param2"] (可執行文件, 優先) ENTRYPOINT command param1 param2 (shell內部命令) 示例: FROM ubuntu ENTRYPOINT ["ls", "/usr/local"] CMD ["/usr/local/tomcat"] 之后,docker run 傳遞的參數,都會先覆蓋cmd,然后由cmd 傳遞給entrypoint ,做到靈活應用 注:ENTRYPOINT與CMD非常類似,不同的是通過docker run執行的命令不會覆蓋ENTRYPOINT, 而docker run命令中指定的任何參數,都會被當做參數再次傳遞給CMD。 Dockerfile中只允許有一個ENTRYPOINT命令,多指定時會覆蓋前面的設置, 而只執行最后的ENTRYPOINT指令。 通常情況下, ENTRYPOINT 與CMD一起使用,ENTRYPOINT 寫默認命令,當需要參數時候 使用CMD傳參 ~~~ #### LABEL >用于為鏡像添加元數據 ~~~ 格式: LABEL <key>=<value> <key>=<value> <key>=<value> ... 示例:   LABEL version="1.0" description="這是一個Web服務器" by="IT筆錄" 注:   使用LABEL指定元數據時,一條LABEL指定可以指定一或多條元數據,指定多條元數據時不同元數據   之間通過空格分隔。推薦將所有的元數據通過一條LABEL指令指定,以免生成過多的中間鏡像。 ~~~ #### ENV >設置環境變量 ~~~ 格式: ENV <key> <value> #<key>之后的所有內容均會被視為其<value>的組成部分,因此,一次只能設置一個變量 ENV <key>=<value> ... #可以設置多個變量,每個變量為一個"<key>=<value>"的鍵值對,如果<key>中包含空格,可以使用\來進行轉義,也可以通過""來進行標示;另外,反斜線也可以用于續行 示例: ENV myName John Doe ENV myDog Rex The Dog ENV myCat=fluffy ~~~ #### EXPOSE >指定于外界交互的端口 ~~~ 格式: EXPOSE <port> [<port>...] 示例: EXPOSE 80 443 EXPOSE 8080 EXPOSE 11211/tcp 11211/udp 注:EXPOSE并不會讓容器的端口訪問到主機。要使其可訪問,需要在docker run運行容器時通過-p來發布這些端口,或通過-P參數來發布EXPOSE導出的所有端口 如果沒有暴露端口,后期也可以通過-p 8080:80方式映射端口,但是不能通過-P形式映射 ~~~ #### VOLUME >用于指定持久化目錄(指定此目錄可以被掛載出去) ~~~ 格式: VOLUME ["/path/to/dir"] 示例: VOLUME ["/data"] VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2" 注:一個卷可以存在于一個或多個容器的指定目錄,該目錄可以繞過聯合文件系統,并具有以下功能: 1 卷可以容器間共享和重用 2 容器并不一定要和其它容器共享卷 3 修改卷后會立即生效 4 對卷的修改不會對鏡像產生影響 5 卷會一直存在,直到沒有任何容器在使用它 ~~~ #### WORKDIR >工作目錄,類似于cd命令 ~~~ 格式: WORKDIR /path/to/workdir 示例: WORKDIR /a (這時工作目錄為/a) WORKDIR b (這時工作目錄為/a/b) WORKDIR c (這時工作目錄為/a/b/c) 注:  通過WORKDIR設置工作目錄后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都會在該目錄下執行。在使用docker run運行容器時,可以通過-w參數覆蓋構建時所設置的工作目錄。 ~~~ #### USER >指定運行容器時的用戶名或 UID,后續的 RUN 也會使用指定用戶。使用USER指定用戶時,可以使用用戶名、UID或GID,或是兩者的組合。當服務不需要管理員權限時,可以通過該命令指定運行用戶。并且可以在之前創建所需要的用戶 ~~~ 格式:   USER user   USER user:group   USER uid   USER uid:gid   USER user:gid   USER uid:group 示例:    USER www 注:   使用USER指定用戶后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT都將使用該用戶。   鏡像構建完成后,通過docker run運行容器時,可以通過-u參數來覆蓋所指定的用戶。 ~~~ #### ARG >設置鏡像構建參數。與*ENV*指令作用一致,不過作用域不一樣:ARG 設置的環境變量僅對*Dockerfile*內有效,也就是說只有`docker build`的過程中才有效,構建好的鏡像內不存在此環境變量。 * 構建命令`docker build`中可以用`--build-arg <key>=<value>`來覆蓋。 ~~~ 格式: ARG <name>[=<default value>] 示例: ARG site ARG build_user=www ~~~ ![](https://img.kancloud.cn/79/93/799396247891ab420614ff12a34a2810_494x211.png) #### ONBUILD >配置當所創建的鏡像作為其他新創建鏡像的基礎鏡像時,所執行的操作指令。 ~~~ 格式:  ONBUILD [INSTRUCTION] 示例:   ONBUILD ADD . /app/src   ONBUILD RUN /usr/local/bin/python-build --dir /app/src ~~~ 當新的*Dockerfile*中基于鏡像*myImage*(*即使用`FROM myImage`*)時,會自動執行*ONBUILD*指令的內容,等價于在后面添加了兩條指令: ~~~ FROM myImage # 自動運行以下兩條指令 ADD . /app/src RUN /usr/local/bin/python-build –dir /app/src ~~~ ### 制作鏡像的注意事項 * 如果有多個RUN,自上而下依次運行,每次運行都會形成新的層,建議&& 放入一行運行 * 如果有多個CMD,只有最后一個運行 * 如果有多個Entrypoint,只有最后一個運行 * 如果CMD和entrypoint共存,只有entrypoint運行,且最后的CMD會當做entrypoint的參數 >鏡像制作分為兩個階段 * docker build階段 基于dockerfile制作鏡像 (RUN,用于此階段的運行命令) * docker run階段 基于鏡像運行容器 (CMD,基于image run容器時候,需要運行的命令) * docker build 基于第一階段的鏡像被別人from制作新鏡像 (entrypoint 或onbuild 基于鏡像重新構建新鏡像時候在此階段運行的命令) #### 完整的dockerfile示列 ~~~ # This my first nginx Dockerfile # Version 1.0 # Base images 基礎鏡像 FROM centos #MAINTAINER 維護者信息 MAINTAINER bertwu #ENV 設置環境變量 ENV PATH /usr/local/nginx/sbin:$PATH #ADD 文件放在當前目錄下,拷過去會自動解壓 ADD nginx-1.8.0.tar.gz /usr/local/ ADD epel-release-latest-7.noarch.rpm /usr/local/ #RUN 執行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all RUN useradd -s /sbin/nologin -M www #WORKDIR 相當于cd WORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install RUN echo "daemon off;" >> /etc/nginx.conf #EXPOSE 映射端口 EXPOSE 80 #CMD 運行以下命令 CMD ["nginx"] ~~~ eg: ~~~ FROM centos:7 MAINTAINER bertwu <1258398543@qq.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim net-tools EXPOSE 80 CMD /bin/bash ~~~ 逐行解釋該Dockerfile文件的指令: FROM centos:7 該image文件繼承官方的centos7 ENV MYPATH /usr/local:設置環境變量MYPATH WORKDIR $MYPATH:直接使用上面設置的環境變量,指定/usr/local為工作目錄 RUN yum -y install vim && net-tools:在/usr/local目錄下,運行yum -y install vim和yum -y install net-tools命令安裝工具,注意安裝后的所有依賴和工具都會打包到image文件中 EXPOSE 80:將容器80端口暴露出來,允許外部連接這個端口 CMD:指定容器啟動的時候運行命令 >查看鏡像構建過程:docker history 鏡像id
                  <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>

                              哎呀哎呀视频在线观看