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


    通过 Docker File 的方式来生成镜像,这个时候,镜像可以单独打包给对方,对方 Docker 加载了,就可以运行了。

    通过对控制台应用以及 web 服务应用一起举例,会更容易参考。

    新建 控制台应用和 web 服务

    通过两种不同形态的程序来部署镜像

    控制台应用

    新建项目后,可以通过,项目右键,添加,docker 支持


    直接 Linux 即可

    然后,查看就有一个 dockerfile 文件

    我们,增加逻辑后

        /// 
        /// 此服务,不能停
        /// 
        /// 
        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();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    我在上面增加了三行代码,主要是解决时区和显示定义环境变量

    ENV TZ=Asia/Shanghai
    ENV config=empty
    ENV psw=empty
    
    • 1
    • 2
    • 3

    生成镜像的话,可以用 VS 自己的命令

    十分的方便,不用敲命令,如果你想敲,大概如下:

    docker build -f "G:\git\03 自己的项目\DockerFileDemo\ConsoleApp1\Dockerfile" --force-rm -t consoleapp1  "G:\git\03 自己的项目\DockerFileDemo"
    
    • 1

    因为在 windows 上,所以,此命令指定了具体的 dockerfile 地址和最后的上下文地址,其他的跟正常的命令一致。

    运行 docker 镜像为容器服务

    docker run --name test -e psw=123 -e config=配置 -it -d consoleapp1
    
    • 1

    执行以上方法就可以把容器运行起来

    可以明显看到内容是符合我们预期的,也获取到了环境变量的相关配置信息。

    如果默认不给环境变量,会是我们自己定义的值

    控制台方案,就以环境变量为案例。

    web api 服务

    添加后,默认就有 docker file 了,这docker file可以删除,然后,重新添加,如上

    下面是我随便修改了一下逻辑

    [ApiController]
    [Route("[controller]")]
    public class HomeController : ControllerBase
    {
        [HttpGet]
        public string Get()
        {
            var info = ConfigManage.GetSetting("conn");
            return info;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    然后,右键生成镜像

    执行docker 命令

    docker run --name test1  -p 900:80  -it -d webapplication1
    
    • 1

    然后访问 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
    
    • 1


    命令实现了对 以下路径 配置文件的挂载 mount

    总结

    Visual Studio 真是好工具,我只能说太方便了,加上容器的功能,简直不要太到位。

    不仅仅通过dockerfile创建了控制台的容器和web的容器,还解决了时区的问题,以及实现了服务器环境下的环境变量传参以及配置文件挂载传参。

    一键三连呦!,感谢大佬的支持,您的支持就是我的动力!

    代码地址

    https://github.com/kesshei/DockerFileDemo.git
    https://gitee.com/kesshei/DockerFileDemo.git

  • 相关阅读:
    linux命令笔记
    2022谷粒商城学习笔记(二十一)购物车相关功能
    使用vue-cli来搭建vue项目
    [TypeScript]Vue/React子组件实例暴露方法
    部署Envoy
    易语言软件定制开发爬虫模拟协议填写自动化办公软件开发多人团队
    学会这招,轻松掌握学校教学质量!
    第一次写计算机论文无从下手怎么办?(一) - 易智编译easeediting
    为什么要用回馈式电子负载
    python之文件处理
  • 原文地址:https://blog.csdn.net/kesshei/article/details/126923554