Создание Dockerfile
Для работы с образом Docker вам понадобится Dockerfile — текстовый файл, содержащий инструкции
по сборке вашего приложения в виде образа Docker. Образ Docker содержит все необходимое
для запуска вашего приложения в качестве контейнера Docker.
Добавить Dockerfile
Создайте файл, вызываемый Dockerfile с помощью этой команды (внимание, файл должен быть
создан в корне вашего проекта):
fsutil file createnew Dockerfile 0
Затем вы можете открыть его в своем любимом текстовом редакторе вручную или с помощью этой команды:
start Dockerfile
Замените содержимое Dockerfile на следующее в текстовом редакторе:
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY MyMicroservice.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY /app .
ENTRYPOINT ["dotnet", "MyMicroservice.dll"]
Убедитесь, что файл назван как Dockerfile, а не как Dockerfile.txt или какое-либо другое имя.
Необязательно: добавьте файл .dockerignore
Файл .dockerignore сокращает набор файлов, которые используются как часть сборки Docker.
Чем меньше файлов, тем быстрее сборка.
Создайте файл с именем .dockerignore (это похоже на .gitignore файл, если вы знакомы с ним)
с помощью этой команды:
fsutil file createnew .dockerignore 0
Затем вы можете открыть его в своем любимом текстовом редакторе вручную или с помощью этой команды:
start .dockerignore
Замените содержимое .dockerignore на следующее в текстовом редакторе:
Dockerfile
[b|B]in
[O|o]bj
Как работает Dockerfile?
Выполнение файла Dockerfile приводит к созданию образа приложения. Этот образ размещается не в каталоге проекта,
в каталоге установленного на компьютере Docker.
Инструкция FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build задает базовый образ,
на основе которого будет создан следующий образ.
Инструкция AS указывает, что этот образ будет использоваться как промежуточный, а окончательный образ приложения
будет создан инструкцией FROM без AS.
Инструкция WORKDIR /src устанавливает рабочий каталог /src для всех инструкций
RUN, CMD, ENTRYPOINT, COPY и ADD которые будут выполнены в Dockerfile.
Это рабочий каталог, который будет создан в файловой системе контейнера.
Инструкция COPY MyMicroservice.csproj . копирует файл MyMicroservice.csproj из каталога вашего проекта
в файловую систему контейнера в каталог /src (здесь точка заменяется на каталог, указанный
в инструкции WORKDIR /src).
Инструкция RUN dotnet restore выполняет команду dotnet restore относительно каталога /src
в файловой системе контейнера.
Инструкция COPY . . копирует все файлы из каталога вашего проекта в файловую систему контейнера в каталог /src.
Инструкция RUN dotnet publish -c release -o /app выполняет команду dotnet publish -c release -o /app
относительно каталога /src в файловой системе контейнера.
Инструкция FROM mcr.microsoft.com/dotnet/aspnet:7.0 задает базовый образ,
на основе которого будет создан образ приложения.
Инструкция WORKDIR /app устанавливает рабочий каталог /app.
Инструкция COPY --from=build /app . копирует файлы из образа, который у нас был выше помечен как build,
все файлы /app в каталог /app в файловой системе уже второго контейнера.
Инструкция ENTRYPOINT ["dotnet", "MyMicroservice.dll"] настраивает контейнер так, чтобы он работал
как исполняемый файл. В данном случае, эта инструкция настраивает контейнер так, чтобы при его запуске
выполнялась команда dotnet MyMicroservice.dll относительно каталога /app.
Более подробно см. статью Шпаргалка по инструкциям файла Dockerfile.