Docker制作dotnet core控制台程序镜像

Docker制作dotnet core控制台程序镜像

创建控制台程序

$ dotnet new console
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on D:\Mytest\TestDockerConsole0110\TestDockerConsole0110.csproj...
  正在确定要还原的项目…
  已还原 D:\Mytest\TestDockerConsole0110\TestDockerConsole0110.csproj (用时 146 ms)。

Restore succeeded.
$ dotnet run
Hello World!

Dockerfile文件:

什么是 Dockerfile?

​ Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

#定制基础镜像
FROM mcr.microsoft.com/dotnet/sdk:3.1 as build-env

#指定工作目录
WORKDIR /code

#将文件拷贝到容器目录中
COPY *.csproj /code/

#用于执行后面跟着的命令行命令
#dotnet restore(.net CLI):还原当前目录中项目的依赖项和工具
RUN dotnet restore

##将文件拷贝到容器目录中
COPY . /code/

#用于执行后面跟着的命令行命令
#dotnet publish(.net CLI):将应用程序及其依赖项发布到文件夹以部署到托管系统
# -c 和 -o 参数分别映射到 MSBuild 的 Configuration(定义生成配置) 和 PublishDir(所有项目的所有输出都会进入相对于当前工作目录的指定文件夹中) 属性
RUN dotnet publish -c Release -o out    

FROM mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR  /app
#从build-env阶段的中拷贝编译结果到当前镜像/app/中
COPY --from=build-env /code/out /app/
ENTRYPOINT ["dotnet","console.dll"]

docker build 命令用于使用 Dockerfile 创建镜像

#使用当前目录的 Dockerfile 创建镜像,标签为 console:dev
$ docker build -t console:dev .

#使用docker镜像console:dev 挂起进程100s
$ docker run console:dev sleep 100
Hello World from docker !
Thread.Sleep(Timeout.Infinite);//无限期挂起进程

Error处理

PS D:\Mytest\TestDockerConsole0110> docker run console:dev sleep 100
  It was not possible to find any installed .NET Core SDKs
  Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
      https://aka.ms/dotnet-download

问题分析:DockerFile写的不对。找不到对应的运行程序

Docker中Dockerfile多From 指令存在的意义

每一条 FROM 指令都是一个构建阶段,多个From就是多阶段构建,虽然最后生成的镜像只能是最后一个阶段的结果,但是,能够将前置阶段中的文件拷贝到后边的阶段中,这就是多阶段构建的最大意义。

https://www.cnblogs.com/leoyang63/articles/13733967.html

posted @ 2021-11-29 16:08  CCmonitor  阅读(355)  评论(0)    收藏  举报