Docker:四、Docker進階 Windows Docker IIS 部署


前面的三篇docker 文檔大家看的肯定不過癮,自己可能也已經上手一試了。。。不知道有沒有發現問題。。。

哈哈。。。

我來說說我遇到的問題哦

一、windows docker 鏡像越來越大

默認的docker 鏡像全部下載到了C盤 C:\ProgramData\Docker 中 ...  ,導致越來越大,最后c盤就爆了,我們需要切換下鏡像保存位置

docker desktop 的setting中設置data-root

一旦切換了目錄,原來存在鏡像以及容器就不被檢查出來了,都需要重新創建,所以在切換之前最好先刪除原來下載好的鏡像&容器;

 

二、鏡像下載速度問題

前面文章提到過,通過使用網易等鏡像服務地址可以加載下載速度;這里推薦另外一種更好的一種方式,使用 阿里雲的鏡像服務,從而使用自己的鏡像加速地址

1.訪問地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

2.如果沒有阿里雲賬號,自己注冊登錄即可

3.然后開啟鏡像服務即可,就可以得到鏡像加速地址

 

 4.docker desktop 中設置鏡像地址

 

 然后你會發現下載,推送速度會變快,使用也會更加愉快哦。。。

 

三、容器站點權限

  這個問題只是一個點,需要引入的是一個鏡像中配置IIS的概念;我們系統的站點文件,在配置站點時會出現如下錯誤:

 有了這個錯誤,其實我們在windows中IIS可以通過如下方式設置,還是比較方便的

 

  docker中我們改如何配置呢?

  那就需要引入powershell命令,來操作IIS配置了,來看具體的命令;

#引入IIS配置模塊
RUN Import-Module IISAdministration; \     
Import-Module WebAdministration; \     
#設置允許加載用戶配置為true Set
-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name "processModel.loadUserProfile" -Value true;

 將上訴命令直接放入dockerfile即可解決上訴問題。來完整看看dockerfile文件內容

復制代碼
#引入運行環境
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
SHELL ["powershell", "-command"]

#引入IIS配置模塊
RUN Import-Module IISAdministration; \     
Import-Module WebAdministration; \     
Set-ItemProperty -Path IIS:\AppPools\DefaultAppPool -Name "processModel.loadUserProfile" -Value true;

#復制站點文件
WORKDIR /inetpub/wwwroot
COPY Publish/. ./
復制代碼

 解讀下上面的dockerfile,上訴的dockerfile還是比較簡單的,后續系列會慢慢完善和補充這些內容;

 1.引入鏡像文件,aspnet:4.8

 2.SHELL ["powershell", "-command"]

    SHELL用於設置執行命令(shell式)所使用的的默認 shell 類型:

    SHELL在Windows環境下,Windows 下通常會有 cmd 和 powershell 兩種 shell,可能還會有 sh。這時就可以通過 SHELL 來指定所使用的 shell 類型:

 3.引入IIS配置模塊,設置允許加載用戶配置

 4.復制站點文件到容器內

 補充說明下,dockerfile就在Publish的同級目錄下

 四、dockerfile常見指令

復制代碼
1.FROM:指定base鏡像,如果本地不存在會從遠程倉庫下載
2.MAINTAINER:設置鏡像的作者,比如用戶郵箱等
3.COPY:把文件從build context復制到鏡像,支持兩種形式:COPY src dest 和 COPY [“src”, “dest”],src必須指定build context中的文件或目錄
4.ADD:用法與COPY類似,不同的是src可以是歸檔壓縮文件,文件會被自動解壓到dest,也可以自動下載URL並拷貝到鏡像:ADD html.tar /var/www ADD http://ip/html.tar /var/www
5.ENV:設置環境變量,變量可以被后續的指令使用:ENV HOSTNAME sevrer1.example.com
6.EXPOSE:如果容器中運行應用服務,可以把服務端口暴露出去:,EXPOSE 80
7.VOLUME:申明數據卷,通常指定的是應用的數據掛在點:VOLUME ["/var/www/html"]
8.WORKDIR:為RUN、CMD、ENTRYPOINT、ADD和COPY指令設置鏡像中的當前工作目錄,如果目錄不存在會自動創建。
9.RUN:在容器中運行命令並創建新的鏡像層,常用於安裝軟件包:RUN yum install -y vim
10.CMD 與 ENTRYPOINT:這兩個指令都是用於設置容器啟動后執行的命令,但CMD會被docker run后面的命令行覆蓋,而ENTRYPOINT不會被忽略,一定會被執行。docker run后面的參數可以傳遞給ENTRYPOINT指令當作參數。Dockerfile中只能指定一個ENTRYPOINT,如果指定了很多,只有最后一個有效
復制代碼

 

五、windows對docker支持

 眾所周知,docker基於linux內核,其實時不支持windows系統,兩者內核差距太大,那windows又是如何支持docker的呢?虛擬機技術來實現,將docker運行於linux虛擬機中

復制代碼
 在linux下面安裝docker和在windows下面安裝docker概念有所不同。通常來講,linux下面安裝docker,你的機器既是localhost,同時也是docker主機。
Docker的客戶端,docker守候進程和容器都是直接運行在你的localhost機器上面的。因為是在一台機器上,所以你可以使用localhost為你的docker容器做端口映射,比如:localhost:8000或者0.0.0.0:8000 在window下面安裝docker,docker的守候進程和容器是運行在linux虛擬機里面,docker命令則是運行在windows系統里面。
Docker主機的地址是linux虛擬機的地址,它被啟動的時候,會分到一個ip地址。當你啟動一個容器的時候,容器的端口號會映射到虛擬機的一個端口號
復制代碼

        那虛擬機的技術就很多了,可以自己選擇來使用了;

  1. Docker desktop for windows

  2. Microsoft store app來安裝linux子系統

  3. Hyper-V創建虛擬機來安裝docker

    這段內容也是網上學習到的,只是符合我的理解想法,希望大家來交流;

 

    后續:

     后面本系列的內容會圍繞windows docker進階來展開,一些深入的應用方式;另外一個方向就是.net core部署到docker上,也是后續的重點,讓.net跨平台容器部署;

 

************轉摘:https://www.cnblogs.com/tiaoshuidenong/p/13713662.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM