Docker 系列之 .Net Core 控制台和 Asp.net Core 服务生成镜像(DockerFile)

目录

新建 控制台应用和 web 服务

控制台应用

web api 服务

总结

代码地址


 

通过 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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值