前面的三篇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地址。當你啟動一個容器的時候,容器的埠號會對映到虛擬機器的一個埠號
那虛擬機器的技術就很多了,可以自己選擇來使用了;
-
Docker desktop for windows
-
Microsoft store app來安裝linux子系統
-
Hyper-V建立虛擬機器來安裝docker
這段內容也是網上學習到的,只是符合我的理解想法,希望大家來交流;
後續:
後面本系列的內容會圍繞windows docker進階來展開,一些深入的應用方式;另外一個方向就是.net core部署到docker上,也是後續的重點,讓.net跨平臺容器部署;