Перейти к основному содержимому

Лабораторная работа №10. Docker с использованием .NET приложений

Цель работы:

Освоение основных принципов работы с Docker для контейнеризации .NET приложений. В процессе выполнения лабораторной работы студенты научатся создавать Docker-контейнеры, работать с Docker-образами и Docker-контейнерами, настраивать и запускать .NET приложения внутри контейнеров.

Теория

Общие сведения о контейнерах и Docker

Введение в .NET и Docker

Почти все, что вы хотели бы знать про Docker

Оборудование и ПО:

  • Компьютер с установленной операционной системой (Windows, macOS или Linux).
  • Установленный Docker (Docker Desktop для Windows/macOS или Docker Engine для Linux).
  • Установленный .NET SDK (версии 5.0 или выше).
  • Текстовый редактор или IDE, например Visual Studio Code.
  • Доступ в интернет для загрузки Docker образов.

Основные этапы лабораторной работы:

Этап 1: Подготовка окружения

  1. Установка Docker:

    • Убедитесь, что Docker установлен и правильно настроен. Если Docker еще не установлен, скачайте и установите Docker Desktop с официального сайта Docker или следуйте инструкциям для установки Docker Engine на Linux.
    • Проверьте успешность установки командой:
      docker --version
    • Запустите Docker (если еще не запущен) и убедитесь, что он работает корректно.
  2. Установка .NET SDK:

    • Убедитесь, что .NET SDK установлен на вашей машине. Если он еще не установлен, скачайте и установите его с официального сайта Microsoft.
    • Проверьте успешность установки командой:
      dotnet --version

Этап 2: Создание простого .NET приложения

  1. Создание нового .NET приложения:

    • В командной строке создайте новый каталог для проекта и перейдите в него:
      mkdir MyDockerApp
      cd MyDockerApp
    • Создайте новое консольное приложение .NET:
      dotnet new console -n MyApp
    • Перейдите в каталог созданного приложения:
      cd MyApp
    • Убедитесь, что приложение работает, выполнив команду:
      dotnet run
  2. Создание Dockerfile для .NET приложения:

    • В каталоге проекта создайте файл Dockerfile со следующим содержимым:
      # Указываем базовый образ с .NET SDK
      FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
      WORKDIR /app

      # Копируем csproj и восстанавливаем зависимости
      COPY *.csproj ./
      RUN dotnet restore

      # Копируем остальные файлы и собираем приложение
      COPY . ./
      RUN dotnet publish -c Release -o out

      # Указываем базовый образ для запуска приложения
      FROM mcr.microsoft.com/dotnet/aspnet:6.0
      WORKDIR /app
      COPY --from=build-env /app/out .
      ENTRYPOINT ["dotnet", "MyApp.dll"]
  3. Создание файла .dockerignore:

    • В каталоге проекта создайте файл .dockerignore, чтобы исключить ненужные файлы из сборки Docker образа:
      bin/
      obj/

Этап 3: Создание и запуск Docker-образа

  1. Сборка Docker-образа:

    • Убедитесь, что вы находитесь в каталоге с Dockerfile и выполните команду для сборки Docker-образа:
      docker build -t myapp-image .
  2. Запуск контейнера из Docker-образа:

    • После успешной сборки запустите контейнер из созданного образа:
      docker run --name myapp-container -d myapp-image
    • Проверьте, что контейнер запущен и работает:
      docker ps
  3. Просмотр логов контейнера:

    • Для просмотра вывода вашего приложения используйте команду:
      docker logs myapp-container

Этап 4: Изучение Docker-команд

  1. Просмотр списка образов:

    • Выполните команду, чтобы увидеть все доступные на вашем компьютере Docker-образы:
      docker images
  2. Просмотр списка контейнеров:

    • Для просмотра всех запущенных контейнеров:
      docker ps
    • Для просмотра всех контейнеров (включая остановленные):
      docker ps -a
  3. Остановка и удаление контейнера:

    • Остановите контейнер:
      docker stop myapp-container
    • Удалите контейнер:
      docker rm myapp-container
  4. Удаление Docker-образа:

    • Удалите созданный Docker-образ:
      docker rmi myapp-image

Этап 5: Индивидуальное задание

Индивидуальные задания по Docker для .NET

Каждое задание включает пять задач, каждая из которых направлена на закрепление навыков контейнеризации различных типов .NET приложений и работы с Docker Compose. Задания разделены на варианты для распределения среди студентов.


Вариант 1:

Задача 1: Контейнеризация простого .NET консольного приложения

  • Разработайте .NET консольное приложение, которое считывает имя пользователя и приветствует его. Создайте Dockerfile для контейнеризации приложения, соберите Docker-образ и запустите приложение в контейнере.

Задача 2: Контейнеризация ASP.NET Core веб-приложения

  • Создайте простое веб-приложение на ASP.NET Core, которое отображает текущую дату и время на главной странице. Разработайте Dockerfile для контейнеризации веб-приложения, соберите Docker-образ и запустите приложение в контейнере.

Задача 3: Контейнеризация .NET приложения с подключением к базе данных

  • Разработайте .NET консольное приложение, которое подключается к базе данных SQLite и выполняет операции добавления и чтения записей о сотрудниках (имя, должность). Создайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 4: Создание и контейнеризация многослойного .NET приложения

  • Создайте многослойное .NET приложение, где backend реализует API для управления списком задач, а frontend — веб-интерфейс для взаимодействия с этим API. Контейнеризируйте оба слоя и настройте взаимодействие между контейнерами.

Задача 5: Создание Docker Compose для развертывания веб-приложения с базой данных

  • Создайте ASP.NET Core веб-приложение, которое подключается к базе данных PostgreSQL и позволяет управлять списком задач. Напишите docker-compose.yml, который развертывает приложение и базу данных в отдельных контейнерах.

Вариант 2:

Задача 1: Контейнеризация простого .NET консольного приложения

  • Создайте .NET консольное приложение, которое вычисляет факториал введенного числа. Создайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 2: Контейнеризация ASP.NET Core веб-приложения

  • Создайте веб-приложение на ASP.NET Core, которое выводит случайную цитату из списка на главной странице. Разработайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 3: Контейнеризация .NET приложения с подключением к базе данных

  • Разработайте консольное приложение на .NET, которое подключается к базе данных SQLite и выполняет операции добавления, удаления и отображения записей о книгах в библиотеке. Контейнеризируйте приложение с использованием Docker.

Задача 4: Создание и контейнеризация многослойного .NET приложения

  • Создайте многослойное приложение, где backend реализует API для управления библиотекой, а frontend — веб-интерфейс для взаимодействия с этим API. Разработайте Dockerfile для каждого слоя и настройте их взаимодействие в контейнерах.

Задача 5: Создание Docker Compose для развертывания веб-приложения с базой данных

  • Разработайте ASP.NET Core веб-приложение для управления библиотекой, которое подключается к базе данных MySQL. Напишите docker-compose.yml для развертывания веб-приложения и базы данных в отдельных контейнерах.

Вариант 3:

Задача 1: Контейнеризация простого .NET консольного приложения

  • Создайте .NET консольное приложение, которое генерирует случайный пароль. Разработайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 2: Контейнеризация ASP.NET Core веб-приложения

  • Создайте веб-приложение на ASP.NET Core, которое позволяет пользователю добавлять и удалять элементы списка покупок. Создайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 3: Контейнеризация .NET приложения с подключением к базе данных

  • Разработайте .NET консольное приложение, которое подключается к базе данных SQLite и выполняет операции CRUD для списка контактов (имя, телефон, email). Контейнеризируйте приложение с помощью Docker.

Задача 4: Создание и контейнеризация многослойного .NET приложения

  • Создайте многослойное приложение с API для управления списком контактов и веб-интерфейсом для работы с этим API. Создайте Dockerfile для каждого слоя и настройте их взаимодействие в контейнерах.

Задача 5: Создание Docker Compose для развертывания веб-приложения с базой данных

  • Разработайте ASP.NET Core веб-приложение для управления списком контактов, подключенное к базе данных PostgreSQL. Напишите docker-compose.yml для развертывания веб-приложения и базы данных.

Вариант 4:

Задача 1: Контейнеризация простого .NET консольного приложения

  • Создайте .NET консольное приложение, которое выводит таблицу умножения для введенного числа. Разработайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 2: Контейнеризация ASP.NET Core веб-приложения

  • Создайте веб-приложение на ASP.NET Core, которое позволяет пользователю вести список задач (To-Do List). Создайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 3: Контейнеризация .NET приложения с подключением к базе данных

  • Разработайте .NET приложение, которое подключается к базе данных SQLite и выполняет CRUD-операции для списка студентов (имя, факультет). Контейнеризируйте приложение с помощью Docker.

Задача 4: Создание и контейнеризация многослойного .NET приложения

  • Создайте многослойное приложение с API для управления списком студентов и веб-интерфейсом для работы с этим API. Контейнеризируйте каждый слой приложения и настройте их взаимодействие.

Задача 5: Создание Docker Compose для развертывания веб-приложения с базой данных

  • Создайте ASP.NET Core веб-приложение для управления списком студентов, подключающееся к базе данных MySQL. Напишите docker-compose.yml для развертывания приложения и базы данных.

Вариант 5:

Задача 1: Контейнеризация простого .NET консольного приложения

  • Создайте .NET консольное приложение, которое проверяет, является ли введенное число простым. Разработайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 2: Контейнеризация ASP.NET Core веб-приложения

  • Создайте веб-приложение на ASP.NET Core, которое выводит текущую погоду для заданного города (используйте фиктивные данные). Создайте Dockerfile, соберите Docker-образ и запустите приложение в контейнере.

Задача 3: Контейнеризация .NET приложения с подключением к базе данных

  • Разработайте .NET приложение, которое подключается к базе данных SQLite и выполняет CRUD-операции для списка заказов (номер заказа, дата, клиент). Контейнеризируйте приложение.

Задача 4: Создание и контейнеризация многослойного .NET приложения

  • Создайте многослойное приложение с API для управления списком заказов и веб-интерфейсом для работы с этим API. Контейнеризируйте каждый слой и настройте их взаимодействие в контейнерах.

Задача 5: Создание Docker Compose для развертывания веб-приложения с базой данных

  • Разработайте ASP.NET Core веб-приложение для управления списком заказов, подключенное к базе данных PostgreSQL. Напишите docker-compose.yml для развертывания приложения и базы данных.

Этап 6: Завершение лабораторной работы

  1. Удаление всех созданных контейнеров и образов:

    • Убедитесь, что все созданные вами контейнеры остановлены и удалите их.
    • Удалите все созданные образы, чтобы очистить систему.
  2. Подведение итогов:

    • Проверьте, что вы выполнили все шаги лабораторной работы и дали ответы на все вопросы.
  3. Отчет по лабораторной работе:

    • Подготовьте отчет по лабораторной работе, включив в него:
      • Описание всех выполненных шагов.
      • Снимки экрана с ключевыми результатами выполнения команд.
      • Ответы на вопросы, возникшие по ходу выполнения работы.
      • Анализ проблем и решений, которые вам удалось найти во время работы с Docker.

Результаты лабораторной работы:

После выполнения лабораторной работы студент должен уметь:

  • Разрабатывать и контейнеризировать .NET приложения с использованием Docker.
  • Создавать и оптимизировать Dockerfile.
  • Работать с Docker Hub для публикации образов.
  • Настраивать и запускать многослойные приложения с использованием Docker Compose.