<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] ## 一 docker鏡像構建說明 ### A. 兩種構建方式 1. 手動構建docker鏡像 2. 自動構建docker鏡像[dockerfile] ### B. 構建步驟 * **手工構建步驟** 1. 啟動容器安裝軟件服務 2. 將安裝好服務的容器commit提交為鏡像 3. 啟動新容器來測試新提交的鏡像 * **自動構建步驟** 1. 編寫dockerfile文件 2. 通過build命令使用該dockerfile構建鏡像 3. 啟動新容器來測試新提交的鏡像 ### C. dockerfile命令集 | 指令 | 功能 |特殊說明| | --- | --- | --- | | FROM | 指定基礎鏡像 | 必須有 | | MAINTAINER | 指定維護者信息 | 可以沒有 | | ENV | 設置環境變量 | 可被后面的指令使用 | | COPY | 復制文件到容器 | | | ADD | 復制文件到容器 | 壓縮文件會自動解壓 | | WORKDIR | 設置當前工作目錄 | 類似linux的cd命令 | | VOLUME | 設置卷,掛載主機目錄 | 需'-v'配合 | | EXPOSE | 指定對外的端口 | 默認不暴露,需"-P"配合 | | RUN | 運行指定的命令 | 在用于容器創建過程中執行命令 | | CMD | 容器啟動后執行的命令 | 容易被替換 | | ENTRYPOINT | 容器啟動后執行的命令 | 無法被替換 | [兩種命令方式以及run,cmd,ENTRYPOINT的關系說明](https://www.cnblogs.com/CloudMan6/p/6875834.html) ## 二 手動構建docker鏡像 案例以cnetos6.9為基礎鏡像,制作含有nginx的鏡像 ### A. 環境準備 ```sh docker container rm `docker container ls -q -a` docker volume rm `docker volume ls -q` docker run -it --name noah-nginx centos:7.4 ``` ### B. 在容器中執行操作 ``` rm /etc/yum.repos.d/* -f curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum install -y nginx echo 'this nginx test pag' >/usr/share/nginx/html/index.html exit ``` ### C. 打包為新鏡像`conmit` ```sh docker commit noah-nginx c7-nginx:v1 [root@docker01 ~]# docker image ls c7-nginx REPOSITORY TAG IMAGE ID CREATED SIZE c7-nginx v1 f823aff3828d 39 seconds ago 388MB ``` ### D. 以新鏡像創建容器 ```sh docker run -d --name nginx-test -p 880:80 c7-nginx:v1 nginx -g "daemon off;" [root@docker01 ~]# curl 127.0.0.1:880 this nginx test pag ``` 已經通過自己手動構建的鏡像創建了新容器,并且成功運行和訪問 ## 三 自動構建docker鏡像[dockerfile] 相對于手動制作的docker鏡像,使用dockerfile構建的鏡像有以下優點: 1. dockerfile只有幾kb,便于傳輸 2. 使用dockerfile構建出來的鏡像,在運行容器的時候,不用指定容器的初始命令 3. 支持更多的自定義操作 接下來通過dockerfile構建一個nginx鏡像 ### A. 環境準備 ```sh docker container rm `docker container ls -q -a` docker volume rm `docker volume ls -q` mkdir -p /data/docker-file/c7-nginx/ cd /data/docker-file/c7-nginx/ ``` ### B. 編寫dockerfile鏡像 1. 編寫dockerfile ```sh cat >dockerfile <<EOF FROM centos:7.4 RUN rm -f /etc/yum.repos.d/*.repo RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo RUN yum clean all && yum makecache RUN yum install -y nginx RUN echo 'this nginx test pag' >/usr/share/nginx/html/index.html CMD nginx -g "daemon off;" EOF ``` 2. docker build構建鏡像 `docker build -t c7-nginx:v2 .` 3. 啟動新容器來測試新構建的鏡像 ```sh docker run -d --name nginx-test -p 980:80 c7-nginx:v2 nginx -g "daemon off;" [root@docker01 ~]# curl 127.0.0.1:980 this nginx test pag ``` ## 四 CMD|ENTRYPOINT和兩種格式 RUN、CMD 和 ENTRYPOINT 這三個 Dockerfile 指令看上去很類似,很容易混淆。簡單的說他們的**區別**: 1. RUN 執行命令并創建新的鏡像層,RUN 經常用于安裝軟件包。 2. CMD 設置容器啟動后默認執行的命令及其參數. 但 CMD 能夠被?`docker run`?后面跟的命令行參數替換。 3. ENTRYPOINT 配置容器啟動時運行的命令。 4. 都可以使用兩種命令格式:`Shell 和 Exec` ### **A. Shell 和 Exec 命令格式** 可用兩種方式指定 RUN、CMD 和 ENTRYPOINT 要運行的命令:Shell 格式和 Exec 格式 **CMD 和 ENTRYPOINT 推薦使用 Exec 格式**,因為指令可讀性更強,更容易理解。RUN 則兩種格式都可以。 1. 兩種格式語法 * Shell 格式: `<instruction> <command>` ```sh RUN apt-get install python3 ? CMD echo "Hello world" ? ENTRYPOINT echo "Hello world" ``` * Exec 格式: `<instruction> ["executable", "param1", "param2", ...]` ```sh RUN ["apt-get", "install", "python3"] CMD ["/bin/echo", "Hello world"] ENTRYPOINT ["/bin/echo", "Hello world"] ``` 2. Shell格式詳解 當指令執行時,shell 格式底層會調用 /bin/sh -c ,例如下面的 Dockerfile 片段: ```sh ENV name Noah luo ? ENTRYPOINT echo "Hello, $name"? ``` 執行 docker run 將輸出:"Hello, Noah luo" 注意環境變量?`name`?已經被值?`Noah luo`?替換。 3. Exec格式詳解 當指令執行時,會直接調用 ,不會被 shell 解析, 例如下面的 Dockerfile 片段: ```sh ENV name Noah luo ENTRYPOINT ["/bin/echo", "Hello, $name"] ``` 運行容器將輸出: "Hello, $name" 注意環境變量“name”沒有被替換,如果希望使用環境變量,照如下修改 ```sh ENV name Noah luo ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $name"] ``` 運行容器將輸出: 'Hello, Noah luo' ### B. CMD命令詳解 CMD 指令允許用戶指定容器的默認執行的命令,此命令會在容器啟動且 docker run 沒有指定其他命令時運行。 * 如果 docker run 指定了其他命令,CMD 指定的默認命令將被忽略。 * 如果 Dockerfile 中有多個 CMD 指令,只有最后一個 CMD 有效。 1. CMD 有三種格式: 1. Exec 格式:`CMD ["executable","param1","param2"] ` 3. Shell 格式:`CMD command param1 param2 ` 2. ENTRYPOINT參數格式:`CMD ["param1","param2"]` 專為 ENTRYPOINT 提供額外的參數,此時 ENTRYPOINT 必須使用 Exec 格式,詳見 ENTRYPOINT部分說明。 2. 使用舉例 Dockerfile 片段:`CMD echo "Hello world" `,運行容器 `docker run -it [image] `將輸出:`Hello world `. 但當后面加上一個命令,比如`docker run -it [image] /bin/bash`,CMD 會被忽略掉,命令 bash 將被執行 ### C. ENTRYPOINT命令詳解 ENTRYPOINT 指令可讓容器以應用程序或者服務的形式運行, 與 CMD都可以指定要執行的命令及其參數. 不同的地方在于 ENTRYPOINT 不會被忽略,一定會被執行,即使運行 docker run 時指定了其他命令。 1. ENTRYPOINT 有兩種格式: 兩種格式的效果差別很大 * Exec 格式:`ENTRYPOINT ["executable", "param1", "param2"] ` * Shell 格式:`ENTRYPOINT command param1 param2 ` 2. Exec 格式詳解 ENTRYPOINT 的 Exec 格式用于設置要執行的命令及其參數,同時可通過 CMD 提供額外的參數。 ENTRYPOINT 中的參數始終會被使用,而 CMD 的額外參數可以在容器啟動時動態替換掉。 Dockerfile 片段如下: ``` ENTRYPOINT ["/bin/echo", "Hello"] CMD ["world"] ``` 當容器通過 `docker run -it [image] `啟動時,輸出為:`Hello world ` 而如果通過 `docker run -it [image] noah` 啟動,則輸出為:`Hello noah` 3. Shell 格式 ENTRYPOINT 的 Shell 格式會忽略任何 CMD 或 docker run 提供的參數。 ### **D. 最佳實踐總結** 1. 如果 Docker 鏡像的用途是運行應用程序或服務,如運行MySQL,優先使用 Exec 格式的 ENTRYPOINT 指令。 CMD 可為 ENTRYPOINT 提供額外的默認參數,同時可利用 docker run 命令行替換默認參數。 2. 如果想為容器設置默認的啟動命令,可使用 CMD 指令。用戶可在 docker run 命令行中替換此默認命令。
                  <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>

                              哎呀哎呀视频在线观看