<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 選擇Docker ## Docker性能損耗的這幾個方面 : ### 1,CPU與內存隔離 Docker使用<span style='color:red;background:#ff0;'>`cgroup`</span>來限制容器的CPU和內存資源。這意味著Docker會在用戶空間和內核空間之間插入一層額外的開銷,來監控和隔離容器的資源使用。 ### 2,鏡像層加密 Docker image由多個layer組成,這些<span style='color:red;background:#ff0;'>`layer互相獨立,無法直接訪問下層layer的數據。這必然會帶來額外的I/O開銷。`</span> 對于overlay文件系統(`Docker默認的存儲驅動`),會將所有layer都載入內存,通過union mount的方式暴露給容器。這也增加了內存消耗。 ### 3,網絡 Docker使用iptables和自己的`veth`設備來實現容器網絡隔離。與直接使用宿主機`NIC`相比,這增加了軟件交換層,開銷較大。 尤其在處理大量小數據集錐的場景下,性能下降最多。 ### 4,I/O 容器訪問宿主機設備,不可避免多了一層映射,會帶來額外的`latencies`。 特別是對I/O密集型應用來說,這會造成明顯的性能損耗。 > 因此性能敏感的應用,仍需要直接部署到宿主機上,而不是通過Docker容器運行。 > <span style='color:red;background:#ff0;'>Docker的這些虛擬化技術,帶來了隔離性與可移植性的好處,但同時也有性能損耗。</span> # Docker 常用命令 ### Dockerfile #### 邏輯判斷 判斷容器用戶名是否存在; 不存在就創建用戶,并為用戶以及用戶組設定 apache2目錄權限 ``` ARG groupname\="staff" ARG username\="jerryxu" RUN getent passwd $username && \\ echo "it is exists!" || \\ useradd \-r \-g $groupname $username ; chown jerryxu:staff /etc/apache2 \-R ; ``` ### 管理鏡像 * `docker images`:列出所有本地鏡像 * `docker pull [image]`:從鏡像倉庫下拉一個鏡像 * `docker rmi [image]`:刪除一個本地鏡像 * `docker build -t [image]:[tag] .`:從 Dockerfile 創建鏡像 * `docker tag [image] [username/image]`:給鏡像打標簽 ### 管理容器 * `docker ps`:列出所有運行中的容器 * `docker ps -a`:列出所有容器,包括未運行的 * `docker run [image]`:創建一個新的容器并運行 * `docker start/stop [container]`: 啟動/停止一個容器 * `docker exec -it [container] bash`:進入一個運行中的容器的bash shell * `docker rm [container]`:刪除一個容器 ### 其他命令 * `docker version`:顯示docker的版本信息 * `docker system prune`:刪除所有停止的容器、網絡、圖像和磁盤卷 * `docker logs [container]`:獲取容器的日志 * `docker network ls`:列出所有網絡 * `docker inspect [container]`:獲取容器的配置細節 * `docker stats`:顯示實時運行容器的資源使用情況 <a style="color:#f00"> ##### </a> * `docker system df`:展示容器使用的磁盤空間 * `docker system info`:獲取docker系統信息 * `docker history [container]`:獲取鏡像創建歷史 # Dockerfile 指令優先級 1. ONBUILD - 最低優先級,只在父鏡像使用`ONBUILD`時才觸發 2. COPY 、 ADD - 將文件復制到鏡像內 3. RUN - 執行命令創建新的鏡像層 4. WORKDIR - 設置工作目錄 5. ENV - 設置環境變量 6. ARG - 定義構建參數 7. VOLUME - 將目錄掛載為數據卷 8. EXPOSE - 開放端口信息 9. USER - 指定運行容器時的用戶名或 UID 10. ENTRYPOINT - 指定容器默認執行命令,高于CMD 11. CMD - 與ENTRYPOINT類似,但可以被后續 Docker run 參數覆蓋 12. FROM - 指定基礎鏡像 ## CMD 和 `ENTRYPOINT` | 是否指定ENTRYPOINT | CMD指定 | 執行結果 | | --- | --- | --- | | 存在 | 為空字符串 | 執行ENTRYPOINT指定的命令 | | 存在 | 為具體命令 | 執行ENTRYPOINT指定的命令 | | 存在 | | 執行ENTRYPOINT指定的命令 | | 不存在 | 為空字符串 | 容器退出 | | 不存在 | 為具體命令 | 執行CMD指定的命令 | 根據表格可以總結: * 如果存在ENTRYPOINT,則執行ENTRYPOINT指定的命令 * 無論CMD是否指定,ENTRYPOINT都會生效 * ENTRYPOINT的優先級高于CMD * 如果只有CMD但沒有ENTRYPOINT,則執行CMD指定的命令 * 如果CMD為空字符串,而ENTRYPOINT又不存在,容器直接退出 # Docker compose 服務配置的指令 優先級 1. `command`:指定容器啟動時運行的命令。在命名沖突時,優先級最高。 2. `entrypoint`: 指定容器默認的入口點(entry point),可以覆蓋容器原來的`ENTRYPOINT`指令。 3. `build.context`: 使用構建上下文構建鏡像,生效`Dockerfile`中的指令。 4. `image`:指定用已有鏡像來啟動容器。 ## ENTRYPOINT 使用場景 | 場景 | 示例 | 作用 | | --- | --- | --- | | 作為系統服務運行 | ENTRYPOINT ["/usr/sbin/sshd", "-D"]`| 保證容器每次以同樣方式起服務 | | 作為命令行工具 | ENTRYPOINT ["my-cli"] | 形成一個可執行文件,運行時指定參數 | | 作為部署工具 | ENTRYPOINT ["deploy"] | 封裝整個部署過程在容器內 | | 作為once-off任務 | ENTRYPOINT ["make","build"] | 形成一個完整的可執行文件,自動完成任務 |
                  <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>

                              哎呀哎呀视频在线观看