0Pricing
Scala for Backend Engineering & Functional Programming · Урок

Контейнеризация с 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.class

Dockerfile: этап выполнения для 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 — локальная установка не требуется.

Все уроки этого курса

  1. Проектирование микросервисов на Scala
  2. Контейнеризация с Docker
  3. Стратегии развёртывания в облаке
← Назад к Scala for Backend Engineering & Functional Programming