前期项目准备这些就不多做介绍了,新建一个ASP.NET Core3.1的API项目即可。
重点来了,我们需要新建Dockerfile文件,直接右键-新增中就有,新建成功后复制下面内容:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
#引入镜像,低版本 docker 去掉 AS base
#换成别人做的阿里镜像
#FROM registry.cn-hangzhou.aliyuncs.com/newbe36524
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
#配置工作目录 相当于cd
WORKDIR /app
#暴露容器端口,此端口与程序运行路径一致,可
EXPOSE 5000
#复制文件到工作目录
COPY . .
#ENV :配置系统环境变量,比如程序环境环境等在这里配置(开发、预发、线上环境)
#这里是配置程序运行端口,如果程序不使用默认的80端口这里一定要设置(程序运行端口)
ENV ASPNETCORE_URLS http://+:5000
#设置时间为中国上海,默认为UTC时间
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#启动程序
ENTRYPOINT ["dotnet", "WebApplication2.dll"]
编译发布



这个时候项目就打包完成了。
1、拷贝到linux服务器,这里我用的是FileZilla工具

2、构建镜像
在构造之前,先测试下当前dll是否有效
首先 cd 上传到linux服务器的项目文件夹目录
然后执行 dotnet 项目dll文件名

如果提示dotnet命令不可使用,查看版本,测试是否安装成功。
dotnet –version
访问正常,关闭网站,开始构建镜像:
进入当前程序目录,输入构建命令
[root@localhost publish]# docker build -t test-demo .
build 命令参数:
-t --指定镜像名称 (只能小写)
. --表示build上下文为当前目录,默认情况docker会使用上下文的根目录找到Dockerfile文件
查看构建后的:docker image
docker images
3、创建并启动容器
[root@localhost publish]# docker run --name 容器名称 -d -p 外部访问端口:5000 镜像名称自定义
如:docker run --name=wakaserver -p 外部访问端口:5000 --restart=always -d test-demo
run命令参数:
-d --表示在后台以守护态(daemonized)形式运行容器
-p --外部端口与内部容器端口映射。
--name 指定容器的名称。当然可以不指定,默认会为我们创建
自动重启,设置restart属性为always,防止宿主机或者docker重启后容器停止
最后一个参数 test-demo 就是我们刚创建的镜像名称
4、检查docker容器列表
[root@ls6vd3vxe5 publish]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4896a816d270 nginx "/docker-entrypoint.…" About an hour ago Up 7 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
307989f55614 test-demo "dotnet WebApplicati…" 2 days ago Exited (0) 3 hours ago test-demo
0891a9f4591f ubuntu:15.10 "/bin/echo 'Hello wo…" 3 days ago Exited (0) 3 days ago competent_moore
最后效果:

这里是我项目中集成了swagger,所以直接看这个页面直观些。
可能会遇到所有流程都没问题,docker容器中也可以看到项目发布成功,这时候可以试试重新启动docker服务:
restart docker.service