在本文中,我们展示了如何将Docker用于C#应用程序。
应用程序容器化是一种操作系统级别的虚拟化方法,用于部署和运行分布式应用程序,而无需为每个应用程序创建一个完整的虚拟机。使用容器,可以在单个主机上运行多个隔离的应用程序或服务并访问相同的操作系统内核。容器可在裸机系统、云实例或虚拟机上运行。
泊坞窗
Docker是一个供开发人员和系统管理员使用容器构建、运行和共享应用程序的平台。Docker提高了应用程序的可移植性和可扩展性。它提供应用程序隔离,从而消除了由库和环境差异引起的许多问题。它有助于自动化开发和部署。借助预定义的社区图像,开发人员可以节省时间并改善他们的整体体验。
Docker镜像是一个只读模板,其中包含创建Docker容器的说明。Docker容器是图像的可运行实例。
图像存储在存储库中。DockerHub是官方的Docker存储库。Docker引擎是使用Docker的组件和服务构建和运行容器的底层客户端-服务器技术。
Dockerfile是一个特殊文件,其中包含构建Docker映像所需的指令。
$ docker --version Docker version 20.10.21, build baeda1f
这是我们使用的Docker版本。
C#Docker控制台示例
在下一个示例中,我们将创建并运行一个非常简单的Docker映像。当我们运行图像时,将执行控制台C#应用程序。
$ dotnet new console -o First
我们创建一个新的C#应用程序。
Console.WriteLine("C# in Docker"); Console.WriteLine(Environment.OSVersion); Console.WriteLine(Environment.Version); Console.WriteLine(Environment.MachineName);
该应用程序是一个控制台程序。它打印一条消息和一些环境细节。
FROM bitnami/dotnet-sdk WORKDIR /app COPY . . RUN dotnet restore RUN dotnet publish -c Release -o out CMD ["dotnet", "out/First.dll"]
Dockerfile是构建镜像的一系列命令。
FROM bitnami/dotnet-sdk
我们的图像基于bitnami/dotnet-sdk图像。它是由Bitnami提供的最新且安全的映像。
WORKDIR /app
我们需要设置一个构建目录。WORKDIR
命令指示Docker使用指定目录作为所有后续命令的默认目标。
COPY . .
我们将所有文件复制到工作目录。
RUN dotnet restore
dotnetrestore
安装当前目录范围内的.NET本地工具。
RUN dotnet publish -c Release -o out
dotnetpublish
命令编译应用程序,读取项目文件中指定的依赖项,并将生成的文件集发布到目录。
CMD ["dotnet", "out/First.dll"]
CMD指令在启动容器时运行程序。
$ docker build -t first .
我们构建图像并将其称为pygetreq。
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE first latest 9bec9d62a4ba 4 minutes ago 1.13GB web latest 2423121e25d3 5 months ago 131MB hello latest 1525ae981450 5 months ago 966MB docker/getting-started latest cb90f98fd791 7 months ago 28.8MB
我们使用dockerimagels
命令列出可用的图像。
$ docker run first Welcome to the Bitnami dotnet-sdk container Subscribe to project updates by watching https://github.com/bitnami/containers Submit issues and feature requests at https://github.com/bitnami/containers/issues C# in Docker Unix 5.10.104.0 7.0.0 a75c8bf3c3bf
我们运行图像。
$ dotnet run C# in Docker Unix 5.15.0.56 7.0.0 andromeda
这是程序在我们本地机器上的输出。
C#DockerASP.NET示例
在下面的示例中,我们在Docker映像中创建了一个ASP.NET。
$ dotnet new web --no-https -o WebApp
我们创建一个新的网络应用程序。
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "home page\n"); app.MapGet("/about", () => Results.Content("about page\n")); app.MapGet("/contact", () => "contact page\n"); app.Run("http://0.0.0.0:3000");
应用程序使用MinimalAPI;它具有三个端点并映射到端口3000。
FROM bitnami/dotnet-sdk WORKDIR /app COPY . . RUN dotnet restore RUN dotnet publish -c Release -o out EXPOSE 3000 CMD ["dotnet", "out/WebApp.dll", "--urls=http://0.0.0.0:3000"]
Dockerfile包含构建镜像的说明。
$ docker build . -t webapp
我们构建图像。
$ docker run -p 3000:3000 webapp
我们运行图像。容器的3000端口映射到我们主机的3000端口。
$ curl localhost:3000 home page $ curl localhost:3000/about about page
我们使用curl
工具测试应用程序。
在本文中,我们使用了C#和Docker。
列出所有C#教程。