<em id="3iliw"></em>
  • <progress id="3iliw"></progress>
  • <tbody id="3iliw"><pre id="3iliw"></pre></tbody><dd id="3iliw"><noscript id="3iliw"></noscript></dd>

    <progress id="3iliw"></progress>

    杭州.net培訓
    達內杭州.net培訓中心

    13175137725

    NET程序在Linux容器中的演變

    • 時間:2018-03-27 16:23
    • 發布:杭州.NET培訓
    • 來源:疑難解答

    1.短暫的停留

    考慮一個非常簡單的微服務示例,它只給出一個“Hello world”類型的HTTP響應。也就是說,當在瀏覽器中填寫URL,你就會得到一個包括主機名的Web頁面。

    我們可從這個代碼庫中(https://github.com/donschenck/dotnet_docker_msa)下載源碼,并制作第一個Dockerfile(Dockerfile.attempt1),接著使用以下命令構建鏡像:

    # docker build -t attempt1 -f Dockerfile.attempt1 .

    然后在容器中運行鏡像:

    # docker run -d -p 5000:5000 --name attempt1 attempt1

    將瀏覽器的URL指向主機的IP地址,情況如下:

    2.數字

    第一次構建鏡像,一共耗時95秒。其中,下載紅帽企業Linux(簡稱RHEL)鏡像與安裝.NET SDK,這些文件一共490MB。最終,鏡像大小為659MB。

    一般而言,鏡像的后續構建將更快,因為Docker化的鏡像已經在主機上可用。改變源碼后,我們再次運行構建。這一次構建鏡像,大約耗時50秒,得到了相同大小的鏡像,也是659MB。

    鏡像的大小很重要。因為鏡像使用操作系統的存儲空間,雖然空間便宜,但它仍然是有限的商品。當定期使用容器時,我們很容易忽略過時的鏡像,然而它仍然在占用磁盤。如果你不注意的話,磁盤空間將很快用盡。

    如何使鏡像盡可能的小?

    3.移除鏡像不需要的部分

    使用命令dotnet restore --no-cache可以消除任何緩存,這樣鏡像的大小下降到608.6MB,減少了50.6 MB,同比縮小超過7%。

    4.在構建鏡像之前構建應用

    應用是在容器中運行鏡像時構建.NET程序的。這耗時大約1.6秒——雖然時間不長,但卻是在浪費時間。

    在恢復之前插入的dotnet build命令,并在構建鏡像之前構建應用,這樣的話容器將會更快地啟動。這個結果可在Dockerfile.attempt3中實現。

    與此同時,鏡像大小卻增加到610.2MB,而我們還得運行dotnet build,雖然現在花這個時間,但卻可在每次啟動容器時受益。

    5.運行Dotnet Publish命令

    因為容器是一個運行時環境,那我們為什么不使用dotnet publish命令發布代碼,然后把代碼放入鏡像呢?如果這樣做的話,我們就沒必要在鏡像中安裝.NET程序了。畢竟,我們需要的是一個可在任何地方獨立運行的應用。

    使用dotnet發布代碼,會減少鏡像大小和縮短容器啟動時間。更改project.json文件,注釋掉下圖中紅框的內容,這告訴編譯器此文件為一個平臺構建。您可以在下圖中看到它:

    接下來,我們使用dotnet publish -c Release -r rheh.7.2-x64發布代碼,這會把所有的編譯文件和運行時文件,放入一個文件夾,我們把此文件夾復制到鏡像中。

    因為我們不再需要安裝.NET程序,只要一個包含RHEL文件的基礎鏡像即可,這樣就減少了鏡像的大小。這是Dockerfile的第四次迭代——Dockerfile.attempt4:

    FROM registry.access.redhat.com/rhel7

    RUN yum install -y libunwind

    RUN yum install -y libicu

    ADD bin/Release/netcoreapp1.0/rhel.7.2-x64/publish/. /opt/app-root/src/

    WORKDIR /opt/app-root/src/

    EXPOSE 5000

    CMD ["/bin/bash", "-c", "/opt/app-root/src/dotnet_docker_msa"]

    請注意,yum install命令將安裝一些.NET需要的依賴文件,然后運行docker build命令,最終生成一個694.6MB的鏡像。

    6.誰需要緩存?

    多次運行yum install命令,前一次操作將為后一次構建緩存。如果在每個yum install命令之后,我們立即清除緩存,效果將會很好。下面是Dockerfile的第五次迭代———Dockerfile.attempt5:

    FROM registry.access.redhat.com/rhel7

    RUN yum install -y libunwind && yum clean all

    RUN yum install -y libicu && yum clean all

    ADD bin/Release/netcoreapp1.0/rhel.7.2-x64/publish/. /opt/app-root/src/

    WORKDIR /opt/app-root/src/

    EXPOSE 5000

    CMD ["/bin/bash", "-c", "/opt/app-root/src/dotnet_docker_msa"]

    基于Dockerfile.attempt5構建的鏡像,其大小減少到293.7MB,這比第一次構建縮小了55%。

    7.堆疊命令

    對Dockerfile做最后更改,我們需要堆疊yum install命令,具體內容如下所示:

    FROM registry.access.redhat.com/rhel7

    `RUN yum install -y libunwind libicu && yum clean all

    `ADD bin/Release/netcoreapp1.0/rhel.7.2-x64/publish/. /opt/app-root/src/

    `WORKDIR /opt/app-root/src/

    `EXPOSE 5000

    `CMD ["/bin/bash", "-c", "/opt/app-root/src/dotnet_docker_msa"]

    最終得到的鏡像大小為257.5MB,這比第一次構建縮小了60%。

    預約申請免費試聽課

    怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

    上一篇:網頁設計的一般流程
    下一篇:.NET中的抽象類和接口
    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    江西省

    貴州省

    廣西省

    海南省

    国拍自产亚洲 2019国拍自产在线,国拍自产亚洲,国产a在线不卡 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>