自从.net core支持linux后,.net core程序也可以从linux的docker生态中受益了。在docker中运行.net core程序还是非常简单的,微软已经为我们制作好了.net core runtime的基础镜像包,只需要将我们的程序拷贝到基础镜像即可,下面我们就以一个简单的示例来介绍下这一过程,
下图就是一个已经编译好的控制台程序,入口是app.dll。
编写Dockerfile
有了程序后,我们还编写相应的dockerfile来制作Docker镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY app /app
WORKDIR /app
ENTRYPOINT [“dotnet”,”app.dll”]
程序非常简单,只有四行
- FROM指令指定了基础镜像,这里使用的是.net 6的runtime镜像mcr.microsoft.com/dotnet/aspnet:6.0 ,也可以使用更小的镜像
- 通过COPY 将程序集导入到基础镜像中
- WORKDIR 指令指定了工作路径
- ENTRYPOINT 指令指定了应用程序入口
Build镜像
编写好dockerfile 后,就可以直接build 了,指令如下(注意不要漏了结尾的.):
docker build -t tianfang:console .
这里通过参数-t 指定了容器的名称:tianfang:console ,
运行容器
使用docker run命令运行镜像,即可看到程序输出
dev@dev:~/docker$ docker run tianfang:console
Hello, World!
Web程序示例
有了上面的基础后,再来一个web程序的导报示例,Dockerfile如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 ENV ASPNETCORE_URLS http://+:80
COPY app /app
WORKDIR /app
ENTRYPOINT [“dotnet”,”app.dll”]
和前面的示例相比多了一个ENV指令指定web程序的url,如果程序中显示指定了url,这个也不是必要的,此时就和控制台程序的dockerfile是一样了,
运行时稍微有点差异, 需要增加 -p 指令开放web服务端口,这个也是docker的常规操作了。
dev@dev:~/docker$ docker run -p 1080:80 tianfang:web
基本上和控制台程序差不多,非常简单。
其它
如果我们修改dockerfile进行多次构建时,可以通过docker image ls指令看到会产生一些废弃的匿名镜像,
dev@dev:~/docker$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
tianfang hello c0d8c6a310a1 3 minutes ago 212MB
可以用下列命令删除
docker image rm -f $(docker images -f dangling=true -q)
Original: https://www.cnblogs.com/TianFang/p/16462183.html
Author: 天方
Title: 使用Docker运行.net core程序
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/534158/
转载文章受原作者版权保护。转载请注明原作者出处!