zoukankan      html  css  js  c++  java
  • ASP.NET Core 的 Docker 映像

    在本教程中,你下载 ASP.NET Core 示例应用并在 Docker 容器中运行它。 此示例适用于 Linux 和 Windows 容器。

    示例 Dockerfile 使用 Docker 多阶段构建功能在不同的容器中生成和运行。 生成和运行容器是由 Microsoft 从 Docker 中心提供的映像中创建的:

    • dotnet/core/sdk

      此示例将此映像用于生成应用。 此映像包含带有命令行工具 (CLI) 的 .NET Core SDK。 此映像对本地开发、调试和单元测试进行了优化。 为开发和编译而安装的工具使其成为一个相对较大的映像。

    • dotnet/core/aspnet

      此示例将此映像用于运行应用。 此映像包含 ASP.NET Core 运行时和库,并针对在生产中运行应用进行了优化。 此映像专为部署和应用启动的速度而设计,相对较小,因此优化了从 Docker 注册表到 Docker 主机的网络性能。 仅将运行应用所需的二进制文件和内容复制到容器。 已准备运行内容,以此实现从 Docker run 到应用启动的最快时间。 Docker 模型中不需要动态代码编译。

    先决条件

    • Docker 客户端 18.03 或更高版本

      • Linux 分布
        • CentOS
        • Debian
        • Fedora
        • Ubuntu
      • macOS
      • Windows
    • Git

    下载示例应用

    git clone https://github.com/dotnet/dotnet-docker
    

      

    本地运行应用

    • 导航到 dotnet-docker/samples/aspnetapp/aspnetapp 下的项目文件夹。

    • 运行以下命令以本地生成并运行应用:

      .NET Core CLI
    • 在浏览器中转到 http://localhost:5000 以测试应用。

    • 在命令提示符处按 Ctrl+C 以停止应用。

    在 Linux 容器中运行

    • 在 Docker 客户端中,切换到 Linux 容器。

    • 导航到 dotnet-docker/samples/aspnetapp 下的 Dockerfile 文件夹。

    • 运行以下命令以在 Docker 中生成并运行示例:

    docker build -t aspnetapp .
    docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp
    

      

    build 命令参数:

    • 将映像命名为 aspnetapp。
    • 在当前文件夹(末尾的句点)中查找 Dockerfile。

    运行命令参数:

      • 分配伪 TTY,即使未附加也使其保持打开状态。 (与 --interactive --tty 的效果相同。)
      • 容器在退出时自动删除。
      • 将本地计算机上的端口 5000 映射到容器中的端口 80。
      • 将容器命名为 aspnetcore_sample。
      • 指定 aspnetapp 映像。
    • 在浏览器中转到 http://localhost:5000 以测试应用。

    在 Windows 容器中运行

    • 在 Docker 客户端中,切换到 Windows 容器。

    导航到 dotnet-docker/samples/aspnetapp 下的 docker 文件文件夹。

    • 运行以下命令以在 Docker 中生成并运行示例:

    docker build -t aspnetapp .
    docker run -it --rm --name aspnetcore_sample aspnetapp
    • 对于 Windows 容器,你需要容器的 IP 地址(浏览到 http://localhost:5000 不起作用):

      • 打开另一个命令提示符。

      • 运行 docker ps 以查看正在运行的容器。 验证其中是否包含“aspnetcore_sample”容器。

      • 运行 docker exec aspnetcore_sample ipconfig 以显示容器的 IP 地址。 该命令的输出如以下示例所示:

    Ethernet adapter Ethernet:
    
       Connection-specific DNS Suffix  . : contoso.com
       Link-local IPv6 Address . . . . . : fe80::1967:6598:124:cfa3%4
       IPv4 Address. . . . . . . . . . . : 172.29.245.43
       Subnet Mask . . . . . . . . . . . : 255.255.240.0
       Default Gateway . . . . . . . . . : 172.29.240.1
    

      

    • 将容器 IPv4 地址(例如,172.29.245.43)复制并粘贴到浏览器地址栏以测试应用。

    手动生成和部署

    在某些情况下,你可能希望通过将运行时所需的应用程序文件复制到容器来将应用部署到容器。 本部分演示如何手动进行部署。

    • 导航到 dotnet-docker/samples/aspnetapp/aspnetapp 下的项目文件夹。

    • 运行 dotnet publish 命令:

      .NET Core CLI
    dotnet publish -c Release -o published
    • 命令参数:

      • 在发布模式(默认为调试模式)下生成应用程序。
      • 在“已发布”文件夹中创建文件 。
    • 运行该应用程序。

      • Windows:

        .NET Core CLI
    dotnet publishedaspnetapp.dll
    

      

      • Linux:

        .NET Core CLI
    dotnet published/aspnetapp.dll
    

      

    • 浏览到 http://localhost:5000 以查看主页。

    要在 Docker 容器中使用手动发布的应用程序,请创建新的 Dockerfile,并使用 docker build . 命令构建容器。

    Dockerfile
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
    WORKDIR /app
    COPY published/aspnetapp.dll ./
    ENTRYPOINT ["dotnet", "aspnetapp.dll"]
    

      

    Dockerfile

    下面是先前运行的 docker build 命令使用的 Dockerfile 。 它以本部分中所用的方式使用 dotnet publish 进行生成和部署。

    Dockerfile
    FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
    WORKDIR /app
    
    # copy csproj and restore as distinct layers
    COPY *.sln .
    COPY aspnetapp/*.csproj ./aspnetapp/
    RUN dotnet restore
    
    # copy everything else and build app
    COPY aspnetapp/. ./aspnetapp/
    WORKDIR /app/aspnetapp
    RUN dotnet publish -c Release -o out
    
    
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
    WORKDIR /app
    COPY --from=build /app/aspnetapp/out ./
    ENTRYPOINT ["dotnet", "aspnetapp.dll"]
    

     Dockerfile

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
    WORKDIR /app
    COPY published/aspnetapp.dll ./
    ENTRYPOINT ["dotnet", "aspnetapp.dll"]
    

      

  • 相关阅读:
    微信小程序Rx 引入 调用合并的方法
    小程序 引入 es-canvas wx:for 单页面渲染多个for不同数据
    jquery操作数组对象
    Docker MySQL 8 主从配置
    CentOS 7 安装 LNMP
    lnmp1.6 配置负载均衡
    Nginx + PHP-FPM 参数优化、性能监视和问题排查
    「查缺补漏」巩固你的Nginx知识体系
    Android生成SHA1(证书指纹)
    android studio 如何把依赖导出成 jar
  • 原文地址:https://www.cnblogs.com/navysummer/p/12886904.html
Copyright © 2011-2022 走看看