咱们知道,想要通过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