Как содержать приложения .NET без написания Dockerfiles

В этой статье представлен dotnet build-image — инструмент, автоматически контейнеризирующий приложения .NET . Вы можете использовать build-image для создания файлов Dockerfile и контейнерных образов. Вы также узнаете, как использовать этот инструмент в рабочем процессе GitHub для создания образа из приложения .NET и отправки его в репозиторий.

Создание образа или Dockerfile с помощью dotnet build-image

Чтобы запустить приложение .NET в контейнере , вам нужен Dockerfile. Поначалу изучение Dockerfiles и их написание может быть забавным. Но через какое-то время это повторяется. Кроме того, файлы должны быть синхронизированы с приложением. И если у вас есть несколько приложений, вам нужно постоянно обновлять их файлы Docker, чтобы использовать один и тот же стиль.

Образ сборки dotnet — это глобальный инструмент, который записывает Dockerfile для вас. Особенности инструмента включают в себя:

  • Он использует многоэтапную сборку: сначала приложение публикуется в один образ, затем результат копируется в меньший образ среды выполнения.
  • Инструмент определяет версию .NET, которую должен использовать образ, из проекта .NET ( TargetFramework).
  • Вы можете выбрать операционную систему базы образов, например Ubuntu или Alpine.
  • Он поддерживает как Podman, так и Docker для создания образа.
  • Он кэширует пакеты NuGet в сборках.
  • Он использует версию SDK из global.json для публикации приложения, если файл присутствует.

Для начала установите инструмент из NuGet:

$ dotnet tool install -g dotnet-build-image

Затем создайте образ из приложения веб-шаблона по умолчанию:

$ dotnet new web -o web
$ cd web
$ dotnet build-image -t mywebapp

Вы увидите сборку в терминале. После завершения сборки запустите образ:

$ podman run -p 8080:8080 mywebapp

Откройте веб-приложение в браузере по адресу: http://localhost:8080.

У инструмента есть несколько вариантов, которые вы можете изучить, передав аргумент: --help​​​​.

$ dotnet build-image --help
Description:
  Build a container image from a .NET project.

Usage:
  build-image [<PROJECT>] [options]

Arguments:
  <PROJECT>  .NET project to build [default: .]

Options:
  -b, --base <base>            	Flavor of the base image
  -t, --tag <tag>              	Name for the built image [default: dotnet-app]
  --push                       	After the build, push the image to the repository
  --as-dockerfile <as-dockerfile>  Generates a Dockerfile with the specified name
  --version                    	Show version information
  -?, -h, --help               	Show help and usage information

Мы уже использовали -tопцию тега ( ).

Опция --baseпозволяет указать базовое изображение. Вы можете указать любой базовый образ, который Microsoft публикует в реестре Microsoft Artifact Registry . Когда вы укажете  ubiв качестве базы, ваше приложение будет использовать образы .NET из Red Hat Ecosystem Catalog . Образы UBI Red Hat — это образы корпоративного уровня, которые можно свободно распространять и развертывать в любом месте. Чтобы узнать больше, загляните в FAQ по UBI или прочитайте электронную книгу Red Hat Universal Base Images (UBI) .

В качестве альтернативы указанию параметров в командной строке добавьте их в csprojфайл:

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImageTag>mywebapp</ImageTag>
    <ImageBase>ubi</ImageBase>
  </PropertyGroup>

Если вы предпочитаете иметь Dockerfileконтроль версий, этот инструмент все равно может быть полезен. Укажите --as-dockerfile Dockerfileаргумент, чтобы записать Dockerfileвместо создания изображения. Вы можете проверить файл и настроить его.

Использование образа сборки dotnet в рабочем процессе GitHub

В этом разделе создается репозиторий GitHub и используется dotnet build-image в рабочем процессе GitHub для настройки непрерывной доставки ( CI/CD ) приложения .NET в качестве образа контейнера.

В качестве реестра образов я использую свою бесплатную учетную запись на Quay.io. Другие реестры, такие как  Docker Hub ,  тоже работают.

Сначала создайте новый репозиторий и заполните его веб-приложением .NET. Я назвал свою build-image-demo:

$ git clone git@github.com:tmds/build-image-demo.git
$ dotnet new web -o web --no-restore
$ git add web
$ git commit -m "Add web project"
$ git push

Добавьте global.jsonфайл, содержащий версию SDK, которую вы хотите использовать для участников и CI:

$ dotnet new globaljson --sdk-version 6.0.100 --roll-forward latestFeature
$ git add global.json
$ git commit -m "Use 6.0 SDK"
$ git push

Обратите внимание, что мы использовали latestFeatureаргумент. Это позволяет использовать любой 6.0.xxxSDK. Без этого аргумента пакет SDK ограничен диапазоном 6.0.1xxфункций.

Чтобы использовать образы Red Hat .NET, добавьте ImageBaseсвойство в web.csprojфайл. Добавьте строку, отмеченную знаком плюс ( +), в PropertyGroupраздел:

   <PropertyGroup>
 	<TargetFramework>net6.0</TargetFramework>
 	<Nullable>enable</Nullable>
 	<ImplicitUsings>enable</ImplicitUsings>
+	<ImageBase>ubi</ImageBase>
   </PropertyGroup>

Включите это изменение в свой следующий коммит:

$ git add web/web.csproj

Теперь добавьте учетные данные для доступа к серверу реестра в свой проект GitHub. Щелкните  ссылку Settings проекта  в веб-интерфейсе GitHub и откройте вкладку Environments . Затем нажмите New Environment и назовите его ImageRegistry. Добавьте два секрета с именами REGISTRY_USERи REGISTRY_PASSWORD. Они содержат учетные данные, используемые для доступа к реестру (рис. 1). После добавления этих значений убедитесь, что они работают, используя их с командой podman login или docker login.

Добавьте два секрета, REGISTRY_USER и REGISTRY_PASSWORD, в проект GitHub.

Рисунок 1. Добавьте два секрета, REGISTRY_USER и REGISTRY_PASSWORD, в проект GitHub.

 

Теперь вы готовы добавить рабочий процесс. Создайте файл по адресу:  .github/workflows/deploy-image.yml и добавьте следующее содержимое.

name: Deploy Image

on:
  push:
	branches: [ "main" ]

env:
  DOTNET_PROJECT: web
  REGISTRY: quay.io
  IMAGE_NAME: tmds/web

jobs:
  deploy:

	environment: ImageRegistry
	runs-on: ubuntu-latest

	steps:
	- uses: actions/checkout@v3
	- name: Install .NET
  	uses: actions/setup-dotnet@v2
	- name: Install dotnet-build-image
  	run: dotnet tool install -g dotnet-build-image
	- name: Log in to Image registry
  	run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login $REGISTRY -u "${{ secrets.REGISTRY_USER }}" --password-stdin
	- name: Build and push image
  	run: dotnet build-image --push "$DOTNET_PROJECT" -t "$REGISTRY/$IMAGE_NAME"

Update the REGISTRY and IMAGE_NAME properties under the env field to the right values for your image registry. If you're using Docker Hub, use docker.io as the REGISTRY.

Let's take a look at the steps in the workflow:

  1. The first step (checkout) checks the source code.
  2. The next step (setup-dotnet) installs the .NET SDK using the version from global.json.
  3. A command runs which logs into the image registry.
  4. The last step runs the dotnet build-image tool to build the image and push it to the registry.

When you've finished updating the file, push it to the repository:

$ git add .github/workflows/deploy-image.yml
$ git commit -m "Add deploy-image workflow."
$ git push

GitHub will trigger the workflow. You can follow progress under the Actions tab in the GitHub web interface.

Когда вы вносите изменения в веб-приложение и фиксируете их в основной ветке, оно запускает рабочий процесс, который создает новый образ и отправляет его в репозиторий.

$ podman run –rm -p 8080:8080 quay.io/tmds/web

Если вы откроете веб-сайт по адресу http://localhost:8080, приложение .NET ответит.

Теперь, когда вы вносите изменения в веб-приложение и фиксируете его в основной ветке, оно снова запускает рабочий процесс и отправляет новый образ в репозиторий.

Автоматизация создания Dockerfile

В этой статье вы узнали, как использовать dotnet build-image для создания образа контейнера из приложения .NET без написания Dockerfile, а также как интегрировать build-image в рабочий процесс GitHub CI/CD. Чтобы поделиться отзывом об этом инструменте, создайте тикет в репозитории GitHub .

Ссылка: https://developers.redhat.com/articles/2022/08/01/containerize-net-applications-without-writing-dockerfiles#using_dotnet_build_image_in_a_github_workflow

#dotnet #csharp #aps.net #docker

What is GEEK

Buddha Community

Как содержать приложения .NET без написания Dockerfiles
Einar  Hintz

Einar Hintz

1602560783

jQuery Ajax CRUD in ASP.NET Core MVC with Modal Popup

In this article, we’ll discuss how to use jQuery Ajax for ASP.NET Core MVC CRUD Operations using Bootstrap Modal. With jQuery Ajax, we can make HTTP request to controller action methods without reloading the entire page, like a single page application.

To demonstrate CRUD operations – insert, update, delete and retrieve, the project will be dealing with details of a normal bank transaction. GitHub repository for this demo project : https://bit.ly/33KTJAu.

Sub-topics discussed :

  • Form design for insert and update operation.
  • Display forms in modal popup dialog.
  • Form post using jQuery Ajax.
  • Implement MVC CRUD operations with jQuery Ajax.
  • Loading spinner in .NET Core MVC.
  • Prevent direct access to MVC action method.

Create ASP.NET Core MVC Project

In Visual Studio 2019, Go to File > New > Project (Ctrl + Shift + N).

From new project window, Select Asp.Net Core Web Application_._

Image showing how to create ASP.NET Core Web API project in Visual Studio.

Once you provide the project name and location. Select Web Application(Model-View-Controller) and uncheck HTTPS Configuration. Above steps will create a brand new ASP.NET Core MVC project.

Showing project template selection for .NET Core MVC.

Setup a Database

Let’s create a database for this application using Entity Framework Core. For that we’ve to install corresponding NuGet Packages. Right click on project from solution explorer, select Manage NuGet Packages_,_ From browse tab, install following 3 packages.

Showing list of NuGet Packages for Entity Framework Core

Now let’s define DB model class file – /Models/TransactionModel.cs.

public class TransactionModel
{
    [Key]
    public int TransactionId { get; set; }

    [Column(TypeName ="nvarchar(12)")]
    [DisplayName("Account Number")]
    [Required(ErrorMessage ="This Field is required.")]
    [MaxLength(12,ErrorMessage ="Maximum 12 characters only")]
    public string AccountNumber { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Beneficiary Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BeneficiaryName { get; set; }

    [Column(TypeName ="nvarchar(100)")]
    [DisplayName("Bank Name")]
    [Required(ErrorMessage = "This Field is required.")]
    public string BankName { get; set; }

    [Column(TypeName ="nvarchar(11)")]
    [DisplayName("SWIFT Code")]
    [Required(ErrorMessage = "This Field is required.")]
    [MaxLength(11)]
    public string SWIFTCode { get; set; }

    [DisplayName("Amount")]
    [Required(ErrorMessage = "This Field is required.")]
    public int Amount { get; set; }

    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime Date { get; set; }
}

C#Copy

Here we’ve defined model properties for the transaction with proper validation. Now let’s define  DbContextclass for EF Core.

#asp.net core article #asp.net core #add loading spinner in asp.net core #asp.net core crud without reloading #asp.net core jquery ajax form #asp.net core modal dialog #asp.net core mvc crud using jquery ajax #asp.net core mvc with jquery and ajax #asp.net core popup window #bootstrap modal popup in asp.net core mvc. bootstrap modal popup in asp.net core #delete and viewall in asp.net core #jquery ajax - insert #jquery ajax form post #modal popup dialog in asp.net core #no direct access action method #update #validation in modal popup

Eric  Bukenya

Eric Bukenya

1618666860

.NET Conf 2020 Demos & Sessions for .NET 5 + Virtual Events!

This year’s .NET Conf was the largest one yet, with over 80 live sessions across three days that were co-organized and presented by the .NET community and Microsoft. On top of all of that, it also marked the release of .NET 5.0  that brings a full set of new capabilities, performance gains, and new languages features for developers to create amazing apps. If you missed this year’s .NET Conf live stream, don’t worry because we have you covered!

#.net #.net core #asp.net #c# #.net conf #.net foundation #community #demos

Hire Dedicated ASP.NET Developers | ASP.NET Web Development Company

A universally accepted and the most popular framework that can be used for a small or big websites or Web application development projects is the ASP.NET. This framework is majorly used to produce an interactive and data driven web applications.

Are you looking to use an ASP.NET framework for your development needs?

WebClues Infotech offers a dedicated ASP.NET developers where a business can hire a dedicated ASP.NET developer that matches their project requirement. WebClues Infotech also has a flexible pricing structure that suits most project or business requirements.

Want to hire a dedicated ASP.NET developers?

Share your requirements here https://www.webcluesinfotech.com/contact-us/

Book Free Interview with ASP.NET developer: https://bit.ly/3dDShFg

#hire dedicated asp.net developers #hire asp.net developers #hire .net developers #full-stack .net developers india #dedicated .net programmers india #hire asp.net developers or programmers

Hire ASP.Net Developers

Looking to outsource your asp dot net development requirement?

ASP.Net is a special feature of the DOT Net framework created by Microsoft. At HourlyDeveloper.io, we have a team of experienced ASP.Net developers who are experts in delivering custom solutions based on your business requirements. Hire ASP.Net Developers who will provide tailored solutions to facilitate your business growth.

Consult with experts: https://bit.ly/3fNpVqr

#hire asp.net developers #asp.net development company #asp.net development services #asp.net development #asp.net developer #asp.net

Shayne  Bayer

Shayne Bayer

1591455526

ML.NET Model Builder is now a part of Visual Studio | .NET Blog

ML.NET is a cross-platform, machine learning framework for .NET developers. Model Builder is the UI tooling in Visual Studio that uses Automated Machine Learning (AutoML) to train and consume custom ML.NET models in your .NET apps. You can use ML.NET and Model Builder to create custom machine learning models without having prior machine learning experience and without leaving the .NET ecosystem.

#.net #.net blog #visual studio #ml.net model builder #asp.net (.net) #progaming