Docker 系列之 .Net Core 控制台和 Asp.net Core 服务生成镜像(DockerFile)
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 系列之 .Net Core 控制台和 Asp.net Core 服务生成镜像(DockerFile)相关的知识,希望对你有一定的参考价值。
通过 Docker File 的方式来生成镜像,这个时候,镜像可以单独打包给对方,对方 Docker 加载了,就可以运行了。
通过对控制台应用以及 web 服务应用一起举例,会更容易参考。
新建 控制台应用和 web 服务
通过两种不同形态的程序来部署镜像
控制台应用
新建项目后,可以通过,项目右键,添加,docker 支持
直接 Linux 即可
然后,查看就有一个 dockerfile 文件
我们,增加逻辑后
/// <summary>
/// 此服务,不能停
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
//获取环境变量
var env = ConfigManage.GetSetting("config");
var psw = ConfigManage.GetSetting("psw");
Log.Info($"获取环境变量 config:env psw:psw");
Task.Run(() =>
while (true)
Log.Info("自动执行");
Thread.Sleep(5000);
);
Console.ReadLine();
DockerFile 内容
FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
WORKDIR /app
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["ConsoleApp1/ConsoleApp1.csproj", "ConsoleApp1/"]
COPY ["Common/Common.csproj", "Common/"]
RUN dotnet restore "ConsoleApp1/ConsoleApp1.csproj"
COPY . .
WORKDIR "/src/ConsoleApp1"
RUN dotnet build "ConsoleApp1.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ConsoleApp1.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
ENV TZ=Asia/Shanghai
ENV config=empty
ENV psw=empty
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]
我在上面增加了三行代码,主要是解决时区和显示定义环境变量
ENV TZ=Asia/Shanghai
ENV config=empty
ENV psw=empty
生成镜像的话,可以用 VS 自己的命令
十分的方便,不用敲命令,如果你想敲,大概如下:
docker build -f "G:\\git\\03 自己的项目\\DockerFileDemo\\ConsoleApp1\\Dockerfile" --force-rm -t consoleapp1 "G:\\git\\03 自己的项目\\DockerFileDemo"
因为在 windows 上,所以,此命令指定了具体的 dockerfile 地址和最后的上下文地址,其他的跟正常的命令一致。
运行 docker 镜像为容器服务
docker run --name test -e psw=123 -e config=配置 -it -d consoleapp1
执行以上方法就可以把容器运行起来
可以明显看到内容是符合我们预期的,也获取到了环境变量的相关配置信息。
如果默认不给环境变量,会是我们自己定义的值
控制台方案,就以环境变量为案例。
web api 服务
添加后,默认就有 docker file 了,这docker file可以删除,然后,重新添加,如上
下面是我随便修改了一下逻辑
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
[HttpGet]
public string Get()
var info = ConfigManage.GetSetting("conn");
return info;
然后,右键生成镜像
执行docker 命令
docker run --name test1 -p 900:80 -it -d webapplication1
然后访问 http://127.0.0.1:900/home 即可看到效果
然后,执行以下命令
docker run --name test1 -p 900:80 --mount type=bind,src=/d/dockerConfig/web/appsettings.json,dst=/app/appsettings.json -it -d webapplication1
命令实现了对 以下路径 配置文件的挂载 mount
总结
Visual Studio 真是好工具,我只能说太方便了,加上容器的功能,简直不要太到位。
不仅仅通过dockerfile创建了控制台的容器和web的容器,还解决了时区的问题,以及实现了服务器环境下的环境变量传参以及配置文件挂载传参。
阅
一键三连呦!,感谢大佬的支持,您的支持就是我的动力!
代码地址
https://github.com/kesshei/DockerFileDemo.git https://gitee.com/kesshei/DockerFileDemo.git
以上是关于Docker 系列之 .Net Core 控制台和 Asp.net Core 服务生成镜像(DockerFile)的主要内容,如果未能解决你的问题,请参考以下文章
asp.net core 系列之Dependency injection(依赖注入)
asp.net core 系列6 实战之 一个项目的完整结构
ASP.NET Core分布式项目实战Docker制作dotnet core控制台程序镜像