Настройка образа Docker для запуска веб-приложения
Docker Hub — это прекрасный источник образов, позволяющий приступить к созданию собственных контейнерных приложений. Вы можете скачать образ, предоставляющий необходимые основные функциональные возможности, а затем развернуть собственное приложение поверх него, чтобы создать новый пользовательский образ. Вы можете автоматизировать шаги для этого процесса, написав Dockerfile.
В сценарии с интернет-магазином одежды компания решила, что Docker — это перспективное решение. Следующим шагом является определение оптимального способа для упаковки веб-приложений в контейнер. Компания планирует создавать множество приложений с помощью ASP.NET Core. Вы уже заметили, что Docker Hub содержит базовый образ, включающий в себя эту платформу. В рамках подтверждения концепции вы хотите взять этот базовый образ и добавить код для одного из веб-приложений, чтобы создать пользовательский образ. Кроме того, вы хотите, чтобы этот процесс был легко воспроизводимым, чтобы его можно был автоматизировать при выпуске новой версии веб-приложения.
В этом уроке вы узнаете, как создать пользовательский образ Docker и как автоматизировать процесс, написав Dockerfile.
Создание пользовательского образа с помощью Dockerfile
Чтобы создать образ Docker, содержащий приложение, обычно сначала определите базовый образ, в который добавляются файлы и сведения о конфигурации. Процесс определения подходящего базового образа обычно начинается с поиска готового образа в Docker Hub. Вам нужен образ, который уже содержит исполняющую среду и все служебные программы и средства дистрибутива Linux, такого как Ubuntu или Alpine. Например, если у вас есть приложение ASP.NET Core, которое нужно упаковать в контейнер, корпорация Майкрософт публикует образ с именем mcr.microsoft.com/dotnet/core/aspnet
, уже содержащий среду выполнения ASP.NET Core.
Образ можно настроить, запустив контейнер с базовым образом и внеся в него изменения. Изменения обычно включают такие действия, как копирование файлов в контейнер из локальной файловой системы и выполнение различных средств и служебных программ для компиляции кода. По завершении выполните docker commit
команду, чтобы сохранить изменения в новом образе.
Выполнение приведенного выше процесса занимает много времени и подвержено ошибкам. Вы можете создать скрипт с помощью языка скрипта, например Bash, но Docker обеспечивает более эффективный способ автоматизации создания образа с помощью Dockerfile.
Dockerfile — это простой текстовый файл, содержащий все команды, необходимые для создания образа. Файлы Dockerfile создаются на минималистичном языке сценариев, предназначенном для создания и настройки образов. Они документируют операции, необходимые для создания образа, начиная с базового образа.
В следующем примере показан файл Dockerfile, который создает приложение .NET 6.0 и упаковает его в новый образ.
FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
COPY myapp_code .
RUN dotnet build -c Release -o /rel
EXPOSE 80
WORKDIR /rel
ENTRYPOINT ["dotnet", "myapp.dll"]
В этом файле выполняются следующие операции:
Команда | Действие |
---|---|
FROM | Скачивание указанного образа и создание контейнера на его основе. |
WORKDIR | Задает текущий рабочий каталог в контейнере; используется последующими командами. |
COPY | Копирование файлов с главного компьютера в контейнер. Первый аргумент (myapp_code ) — это файл или папка на главном компьютере. Второй аргумент (. ) указывает имя файла или папки, выступающих в качестве назначения в контейнере. В этом случае назначением является текущий рабочий каталог (/app ). |
ЗАПУСК | Выполнение команды в контейнере. Аргументы для команды RUN являются командами командной строки. |
EXPOSE | Создает конфигурацию на новом изображении, указывающую, какие порты следует открывать при запуске контейнера. Если в контейнере выполняется веб-приложение, обычно открывается порт 80. |
ENTRYPOINT | Указание операции, которую контейнер должен выполнять при запуске. В данном примере он запускает недавно созданное приложение. Вы указываете команду, которую нужно выполнить, и каждый из его аргументов в виде массива строк. |
По соглашению, приложениям, предназначенным для упаковки в виде образов Docker, обычно требуется файл Dockerfile, расположенный в корне их исходного кода и почти всегда имеющий имя Dockerfile
.
Команда docker build
создает образ, запуская файл Dockerfile. Синтаксис этой команды имеет несколько параметров:
- Флаг -f указывает имя используемого файла Dockerfile.
- Флаг -t указывает имя создаваемого изображения; в этом примере myapp:v1.
- Последний параметр . предоставляет контекст сборки для исходных файлов для команды COPY: набор файлов на главном компьютере, необходимый во время создания.
docker build -t myapp:v1 .
По сути, команда docker build
создает и запускает контейнер, выполняет команды в нем, а затем фиксирует изменения в новом образе.