C# Docker
最后修改于 2023 年 7 月 5 日
在本文中,我们将展示如何为 C# 应用程序使用 Docker。
应用程序容器化是一种 OS 级别的虚拟化方法,用于部署和运行分布式应用程序,而无需为每个应用程序创建一个完整的虚拟机。 使用容器,可以在单个主机上运行多个隔离的应用程序或服务,并访问相同的 OS 内核。 容器可以在裸机系统、云实例或虚拟机上运行。
Docker
Docker 是一个平台,供开发人员和系统管理员构建、运行和共享包含在容器中的应用程序。 Docker 提高了应用程序的可移植性和可伸缩性。 它提供应用程序隔离,从而消除了许多由库和环境差异引起的问题。 它有助于自动化开发和部署。 借助预定义的社区镜像,开发人员可以节省时间并改善他们的整体体验。
一个 Docker 镜像 是一个只读模板,其中包含创建 Docker 容器的说明。一个 Docker 容器 是镜像的一个可运行实例。
镜像存储在仓库中。Docker Hub 是官方 Docker 仓库。Docker Engine 是底层的客户端-服务器技术,它使用 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
dotnet restore
安装当前目录范围内的 .NET 本地工具。
RUN dotnet publish -c Release -o out
dotnet publish
命令编译应用程序,读取项目文件中指定的依赖项,并将生成的文件集发布到目录。
CMD ["dotnet", "out/First.dll"]
CMD 指令在启动容器时运行程序。
$ docker build -t first .
我们构建镜像并将其命名为 first。
$ 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
我们使用 docker image ls
命令列出可用的镜像。
$ 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# Docker ASP.NET 示例
在下面的示例中,我们在 Docker 镜像中创建一个 ASP.NET 应用程序。
$ dotnet new web --no-https -o WebApp
我们创建一个新的 Web 应用程序。
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");
该应用程序使用 Minimal API;它有三个终结点并映射到端口 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# 教程。