咱們知道,想要通過docker運行.net core程序,那么我們需要將.net core程序通過Dockerfile制作成鏡像,然后就可以基於鏡像創建容器,同時也可以對鏡像和容器進行導出。然而這樣的方式就會造成docker容器中的日志文件或配置需要進入到docker里面去查看或修改,於是我們通過docker run運行容器時需要增加一個參數--volume , -v,這個參數就是將物理機的磁盤路徑映射到docker磁盤路徑,映射之后物理磁盤的文件就可以覆蓋docker里面對應的目錄文件,我們就可以通過物理文件來間接修改docker文件了,這里有一個原則:docker容器不保存核心數據,所有的核心數據都需要輸入到物理磁盤。
通過上面的介紹能夠知道,本地文件可以直接覆蓋docker文件,因此我們也可以使用另外一種方式,那就是不需要通過Dockerfile制作程序鏡像,直接用官方的鏡像mcr.microsoft.com/dotnet/aspnet:3.1,我們只需要將本地的文件夾映射到docker容器里面即可,具體命令如下:
docker run -d -p 8077:80 --name gdnp -v D:/Release/netcoreapp3.1:/app --workdir /app mcr.microsoft.com/dotnet/aspnet:3.1 dotnet /app/WebApplication1.dll
解釋一下:
-d:后台運行
-p:端口映射,物理機的8077端口映射到docker容器的80端口
--name:給容器取一個名字叫gdnp
-v:磁盤映射,物理機的D:/Release/netcoreapp3.1路徑映射到docker容器的/app路徑。因為docker容器是Linux,因此路徑以斜杠開頭(/)
--workdir:啟動容器后的默認工作目錄,因為我們的程序是映射到/app路徑的,因此工作目錄也定義為/app路徑
mcr.microsoft.com/dotnet/aspnet:3.1:這個是鏡像的名稱和版本號,這里我們用的是微軟官方的鏡像
dotnet /app/WebApplication1.dll:容器啟動后需要運行的命令,因為.net core程序的啟動命令是dotnet。因此這樣定義。
更多參數解析可參考:https://www.runoob.com/docker/docker-run-command.html