Py学习  »  docker

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

dotNET跨平台 • 1 年前 • 175 次点击  

通过 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();
    }

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


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/147497
 
175 次点击