Зачастую разработчикам необходимо устанавливать и настраивать разные приложения, технологии, сервисы для локальной разработки проектов. Когда проект один и вы работаете, например, с одной версией .NET, или если все разработчики работают на Windows, то какие-либо проблемы с настройкой проекта вряд ли появятся.
Но что, если вам периодически нужно переключаться между разными версиями Java, PHP, Node.js, да еще и у одного разработчика установлен Linux, а у другого Windows? Конечно, можно писать инструкции по установке и настройке, но это не решает проблему изолированности вашей операционной системы от среды приложения.
После удаления уже установленной версии .NET, SQL Server могут остаться какие-либо файлы конфигурации, которые могут привести к ошибке запуска другой установленной версии приложения.
События и курсы на rolarap
Для решения подобных проблем запуска приложения .NET, SQL Server на разных средах можно использовать Docker, Docker Compose.
1. Установка Docker, Docker Compose
Для установки Docker нам нужно на странице Install Docker Engine открыть руководство по необходимой ОС.
Для установки Docker Compose — на странице Install Docker Сompose также открыть руководство по необходимой ОС.
Проверяем, что Docker и Docker Compose работает, выполняя команды в консоли:
$ docker-compose -v
docker-compose version 1.28.6, build unknown
$ docker-compose --version
docker-compose version 1.28.6, build unknown
2. Создание структуры директорий проекта
Для своих проектов, где используется Docker, я придерживаюсь следующей структуры:
src — исходный код проекта
docker:
api — директория с файлами конфигурации, файлом docker для сборки образа .NET приложения,
db — директория с файлами конфигурации, файлом docker для сборки образа SQL Server, миграциями,
docker-compose.yml — файл с настройками запуска контейнеров.
3. Формирование Docker-файлов для .NET, SQL Server
3.1. Настройка образа .NET Docker
Для работы .NET-приложения создадим файл Dockerfile в директории проекта с путем docker/api/Dockerfile:
FROM mcr.microsoft.com/dotnet/aspnet:3.1-focal AS base
WORKDIR /app
EXPOSE 5000
ENV ASPNETCORE_URLS=http://+:5000
ENV ASPNETCORE_ENVIRONMENT Development
# Creates a non-root user with an explicit UID and adds permission to access the /app folder
For more info, please refer to https://aka.ms/vscode-docker-dotnet-configure-containers
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
FROM mcr.microsoft.com/dotnet/sdk:3.1-focal AS build
WORKDIR /src
COPY ["./src/app.csproj", "/src"]
COPY ["./nuget.config", "./"]
RUN dotnet restore "app.csproj"
COPY ./src .
WORKDIR "/src"
RUN dotnet build "app.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "app.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "app.dll"]
3.2. Настройка образа SQL Server Docker
Для работы SQL Server создадим файл Dockerfile в директории проекта с путем docker/db/Dockerfile, содержимое которого:
FROM flyway/flyway:8.0.4-alpine
COPY ./*.sql /flyway/sql/
COPY ./flyway.conf /flyway/conf/
ENTRYPOINT [ "flyway", "migrate" ]
3.3. создадим файл конфигурации /docker/db/migrations/flyway.conf с содержимым:
flyway.url=jdbc:sqlserver://mssql-db
flyway.user=sa
flyway.password=Your_password123
flyway.mixed=true
3.3.1. создадим файл миграции в директории /docker/db/migrations/V1__DatabaseCreation.sql с содержимым:
USE [master]
GO
CREATE DATABASE [TEST]
GO
USE [TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE SCHEMA data AUTHORIZATION dbo;
GO
CREATE TABLE [dbo].[test](
[Id] [int] NOT NULL,
[Name] [varchar](30) NOT NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[test] ([Id], [Name])
VALUES (1, 'User1')
GO
Подробнее о работе с миграциями с помощью Flyway можно почитать тут:
— https://flywaydb.org/documentation/,
— https://flywaydb.org/documentation/
4.Создание файла docker-compose.yml
Итак, нам осталось создать только файл docker-compose.yml, чтобы описать в нем все сервисы:
db — сервис для работы MS SQL Server,
db-migration — сервис для работы с Flyway-миграциями,
api — сервис для работы с .NET-приложением.
Создадим файл docker-compose.yml в директории проекта с путем docker/docker-copmose.yml и содержимым:
version: "3.4"
services:
api:
build:
context: "../"
dockerfile: ./docker/api/Dockerfile
container_name: "api"
ports:
- "5000-5001:5000-5001"
depends_on:
- db
- db-migrations
networks:
- app-network
db:
build:
context: "./db"
container_name: "db"
environment:
SA_PASSWORD: "Your_password123"
ACCEPT_EULA: "Y"
ports:
- "1433:1433"
networks:
- app-network
db-migrations:
build:
context: "./db/migrations"
container_name: "db-migrations"
volumes:
- ./db/migrations:/flyway/sql
networks:
- app-network
depends_on:
- db
networks:
app-network:
driver: bridge
5. Запуск приложения
Для запуска нам нужно запустить Docker-контейнеры при помощи команды docker-compose. Из директории проекта выполняем в терминале команду:
cd ./docker && docker-compose up -d --force-recreate --build
после чего наше приложение должно открыться в браузере по url: http://localhost:5000
К SQL Server мы можем подключиться с помощью команды:
sqlcmd -S db -d TEST -G -U sa
указав пароль Your_password123
Полезные ссылки
Учебник. Контейнеризация приложения .NET Core
Образы Docker для ASP.NET Core
Страница образами .NET
Руководство по настройке .NET и SQL Server
Документация по Flyway: https://flywaydb.org/documentation/, https://flywaydb.org/documentation/
Net
#docker
#sql
#IT #программирование #it новости
Поделиться
Оценить
Также рекомендуем
Обложка: Основные команды SQL
Основные команды SQL, которые должен знать каждый программист
вопросы на собеседовании sql
27 распространённых вопросов по SQL с собеседований и ответы на них
15 полезных команд PostgreSQL
Оконные функции в SQL — что это и зачем они нужны
Наш основной канал в Telegram: @rolarap