Контейнеризация с Docker
Научитесь контейнеризировать приложения Scala с помощью Docker для создания согласованных сред и упрощения развёртывания.
«Контейнеризация с Docker» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 3 уроков всего.
Зачем контейнеризировать приложения на Scala?
При развёртывании приложений на Scala бывает сложно обеспечить единообразную среду разработки, тестирования и эксплуатации. Здесь на помощь приходит контейнеризация!
Контейнер упаковывает приложение и все его зависимости (например, виртуальную машину Java, библиотеки и конфигурацию) в единый изолированный блок. Благодаря этому приложение работает одинаково в любой среде.
Docker: образы и контейнеры
Docker — самая популярная платформа для контейнеризации. Она использует два основных понятия:
- Образ Docker: лёгкий автономный исполняемый пакет, содержащий всё необходимое для запуска части программного обеспечения, включая код, среду выполнения, системные инструменты, системные библиотеки и настройки. Представьте его как чертёж.
- Контейнер Docker: запускаемый экземпляр образа Docker. Когда Вы запускаете образ, он становится контейнером. Контейнеры изолированы друг от друга и от основной системы.
Первый запуск Docker
Попробуем запустить очень простой контейнер Docker. Эта команда загружает образ hello-world (если он ещё не загружен) и запускает его как контейнер.
Вы увидите сообщение, подтверждающее, что Docker работает!
docker run hello-world
Наше простое приложение на Scala
Прежде чем создавать контейнер, давайте создадим минимальное приложение на Scala. Эта программа просто выведет сообщение в консоль.
Скоро мы упакуем его в образ Docker!
object Main extends App {
val message = "Hello from CoddyKit's Docker container!"
println(message)
}Шаблон: Dockerfile
Dockerfile — это текстовый файл, содержащий все команды, которые можно выполнить в командной строке для сборки образа. Это своего рода рецепт создания образа Docker.
Основные инструкции:
FROM: задаёт базовый образ.WORKDIR: задаёт рабочий каталог.COPY: копирует файлы в образ.RUN: выполняет команды во время сборки образа.CMD: указывает команду, которая будет выполнена при запуске контейнера.
Dockerfile: этап сборки для Scala
Для Scala мы часто используем многоэтапную сборку. На первом этапе собирается приложение. Для компиляции кода Scala мы используем образ OpenJDK с полным JDK.
# Stage 1: Build the Scala application
FROM adoptopenjdk/openjdk11:latest as builder
WORKDIR /app
COPY Main.scala .
RUN scalac Main.scala
RUN jar -cvf app.jar Main.classDockerfile: этап выполнения для Scala
На втором этапе создаётся гораздо меньший образ, содержащий только JRE (среду выполнения Java) и скомпилированное приложение на Scala (файл JAR). Благодаря этому размер итогового образа остаётся минимальным.
# Stage 2: Create a minimal runtime image
FROM adoptopenjdk/openjdk11:jre-hotspot
WORKDIR /app
COPY --from=builder /app/app.jar .
CMD ["java", "-jar", "app.jar"]Полный Dockerfile для Scala
Вот полный Dockerfile с многоэтапной сборкой для нашего приложения на Scala. Этот файл следует назвать Dockerfile и разместить в том же каталоге, что и Main.scala.
# Stage 1: Build the Scala application
FROM adoptopenjdk/openjdk11:latest as builder
WORKDIR /app
COPY Main.scala .
RUN scalac Main.scala
RUN jar -cvf app.jar Main.class
# Stage 2: Create a minimal runtime image
FROM adoptopenjdk/openjdk11:jre-hotspot
WORKDIR /app
COPY --from=builder /app/app.jar .
CMD ["java", "-jar", "app.jar"]Сборка образа Docker
Теперь, когда у нас есть Dockerfile и Main.scala, давайте соберём образ Docker. Флаг -t присваивает образу имя (например, scala-hello), а . указывает, что текущий каталог является контекстом сборки.
docker build -t scala-hello .
Запуск контейнеризированного приложения на Scala
После сборки образа вы можете запустить приложение на Scala внутри контейнера Docker с помощью команды docker run. При этом будет выполнена инструкция CMD, определённая в вашем Dockerfile.
docker run scala-hello
В консоли должно появиться сообщение "Hello from CoddyKit's Docker container!"!
Проверьте свои знания
Проверьте, насколько хорошо вы поняли устройство Dockerfile.
Итоги: контейнеризация Scala
Вы успешно освоили основы контейнеризации приложения на Scala с помощью Docker!
- Образы Docker — это шаблоны, а контейнеры — их экземпляры, готовые к запуску.
- Dockerfile — это рецепт сборки образа.
- Многоэтапные сборки помогают создавать небольшие и эффективные образы для приложений на Scala.
- Такие команды, как
docker buildиdocker run, управляют образами и контейнерами.
Эти знания необходимы для единообразного и надёжного развёртывания микросервисов на Scala.
Часто задаваемые вопросы
Урок «Контейнеризация с Docker» бесплатный?
Да — полный текст урока «Контейнеризация с Docker» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 3 уроков всего.
Чему я научусь в уроке «Контейнеризация с Docker»?
Научитесь контейнеризировать приложения Scala с помощью Docker для создания согласованных сред и упрощения развёртывания. Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.
Сколько времени занимает урок «Контейнеризация с Docker»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проектирование микросервисов на Scala
- Контейнеризация с Docker
- Стратегии развёртывания в облаке