自从.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"]

  程序非常简单,只有四行

  1. FROM指令指定了基础镜像,这里使用的是.net 6的runtime镜像mcr.microsoft.com/dotnet/aspnet:6.0,也可以使用更小的镜像
  2. 通过COPY将程序集导入到基础镜像中
  3. WORKDIR指令指定了工作路径
  4. 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
<none> <none> 4b4d47f8602c 4 minutes ago 212MB
<none> <none> 10e7cece6d5c 4 minutes ago 212MB
<none> <none> 56b9bc345162 5 minutes ago 212MB
mcr.microsoft.com/dotnet/aspnet 6.0 e3f3ae957ae9 7 days ago 212MB

可以用下列命令删除

docker image rm -f $(docker images -f dangling=true -q)

posted on 2022-07-09 22:45  天方  阅读(838)  评论(0编辑  收藏  举报