首先,我们把编译好的.Net Core 3.1程序上传到宿主机的特地目录,如下图,确保你的程序路径在netcoreapp3.1/publish/文件夹中,以下是以我的程序Web.dll为例
然后,在netcoreapp3.1文件同级,新建Dockerfile文件,并且为了防止DOCK镜像中可能不存在字体,我们在同级别目录放一个字体文件 simsun.ttc
Dockerfile的内容如下,以下我以运行我的Web.dll程序为例子,为了调试方便,看到错误信息,ASPNETCORE_ENVIRONMENT暂时设置为Development,容器内端口设置为80,容器内的工作目录设置为/app
# 使用官方.NET Core运行时镜像作为基础镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
# 设置工作目录
WORKDIR /app
# 复制项目发布文件到容器中的工作目录
COPY ./netcoreapp3.1/publish/ .
COPY simsun.ttc /usr/share/fonts/
# 设置环境变量,端口
ENV ASPNETCORE_ENVIRONMENT=Development
ENV ASPNETCORE_URLS=http://+:80
# 当容器启动时,运行应用程序
ENTRYPOINT ["dotnet", "Web.dll"]
接下来,在控制台,定位到指定目录,用以下命令生成镜像,然后就会新增一个mathapp的Image镜像
sudo docker build -t mathapp .
此时,我们可以试着用这个镜像部署一个容器mathapp,并且把宿主机的8080端口,映射到容器80
sudo docker run --name mathapp -d -p 8080:80 mathapp
这时,我们就可以在游览器地址栏输入:http://服务器IP:8080 来访问自己的.Net Core程序了
接下来,我们为了后续更新方便,也可以试着在宿主机做个文件映射,首先,把容器内刚刚的/app工作目录的文件,复制到宿主机
sudo docker cp mathapp:/app /home/ec2-user/www
此时,我们看到,宿主机的对应目录中多了一个app文件,里面就是我们容器的工作目录文件
此时,我们可以删除之前创建的测试容器,创建全新容器,然后把这个目录挂载到新容器上
sudo docker stop mathapp
sudo docker rm mathapp
sudo docker run -d -p 8080:80 --name mathapp --restart=always -v /home/ec2-user/www/app:/app mathapp
接下来,后续更新只要更新宿主机中的文件,然后重启对应的docker容器即可