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

Создание 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 --from=build /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.