Dockerによるコンテナ化
Dockerを使ってScalaアプリケーションをコンテナ化し、環境の統一とデプロイの簡素化を実現します。
「Dockerによるコンテナ化」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。
Scalaアプリをコンテナ化する理由
Scalaアプリケーションをデプロイする際、開発、テスト、本番で一貫した環境を確保するのは難しい場合があります。そこで役立つのがコンテナ化です。
コンテナは、アプリケーションとそのすべての依存関係(Java Virtual Machine、ライブラリ、設定など)を、分離された1つの単位にパッケージ化します。これにより、どの環境でも同じように実行できます。
Docker:イメージとコンテナ
Dockerは、コンテナ化で最も広く使われているプラットフォームです。中核となる概念は2つあります。
- 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 コードをコンパイルするため、完全な JDK を含む OpenJDK イメージを使用します。
# 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 の実行ステージ
2 番目のステージでは、JRE(Java Runtime Environment)とコンパイル済みの 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"]Scala 用の完全な Dockerfile
これが Scala アプリケーション用の完全なマルチステージ Dockerfile です。このファイルは 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 アプリケーションの実行
イメージのビルドが完了したら、docker run コマンドを使用して、Docker コンテナ内で Scala アプリケーションを実行できます。これにより、Dockerfile に定義した CMD 命令が実行されます。
docker run scala-hello
コンソールに "Hello from CoddyKit's Docker container!" と表示されます。
理解度を確認
Dockerfile に関する理解度を確認しましょう。
まとめ:Scala のコンテナ化
Docker を使って Scala アプリケーションをコンテナ化する基本を学習できました。
- Docker イメージは設計図であり、コンテナは実行可能なインスタンスです。
- Dockerfileは、イメージを構築するためのレシピです。
- マルチステージビルドを使うと、Scala アプリケーション向けの小さく効率的なイメージを作成できます。
docker buildやdocker runなどのコマンドで、イメージとコンテナを管理します。
この知識は、Scala マイクロサービスを一貫性と信頼性を保ってデプロイするうえで重要です。
よくある質問
「Dockerによるコンテナ化」レッスンは無料ですか?
はい。「Dockerによるコンテナ化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全3レッスンが含まれています。
「Dockerによるコンテナ化」で何を学びますか?
Dockerを使ってScalaアプリケーションをコンテナ化し、環境の統一とデプロイの簡素化を実現します。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「Dockerによるコンテナ化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Scalaマイクロサービスの設計
- Dockerによるコンテナ化
- クラウドへのデプロイ戦略