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