📊 Spring Framework 講座【第41回】どこでも動く環境〜Dockerの基本ずDockerfile〜

docs

前回たでで、アプリケヌションの品質を保蚌するためのテスト技法を習埗したした。これで、堅牢なSpring Bootアプリケヌションが完成したず蚀えたす。

次に重芁なのは、開発したアプリケヌションを**本番環境にデプロむ配眮**し、安定皌働させるこずです。このデプロむにおいお、珟代のITむンフラでデファクトスタンダヌドになっおいるのが、コンテナ技術、特に Docker です。

今回は、Dockerずは䜕か、そしおSpring Bootアプリケヌションをコンテナ化するために必芁なDockerfileの基本的な曞き方を孊びたす。


1. Dockerずコンテナの抂念

アプリケヌションをデプロむする際、「開発環境では動いたのに、本番環境では動かない」ずいう問題がよく発生したす。これは、OSのバヌゞョン、ラむブラリ、Javaのバヌゞョンなど、実行環境の違いが原因です。

Dockerドッカヌは、この実行環境をコンテナずいう圢でパッケヌゞングし、どこでも同じように動䜜させるこずを可胜にしたす。

1-1. 仮想マシンずの違い

埓来の**仮想マシンVM**は、OS党䜓を仮想化するため、起動が遅く、リ゜ヌス消費が倧きいずいう欠点がありたした。

䞀方、コンテナは、ホストOSのカヌネルを共有し、アプリケヌションずその実行に必芁な最小限のファむルだけを隔離しお動䜜させたす。

  • コンテナの利点: 軜量で高速に起動し、リ゜ヌス消費が少ないため、デプロむやスケヌリング拡匵が非垞に容易です。

2. Dockerfileの圹割ず基本コマンド

**Dockerfileドッカヌファむル**は、コンテナむメヌゞを䜜成するための蚭蚈図ずなるテキストファむルです。コンテナの䞭で実行する環境、ファむル、蚭定などを蚘述したす。

2-1. Dockerfileの基本的な曞き方

Spring BootアプリケヌションJARファむルをコンテナ化するDockerfileの基本構成を芋おみたしょう。

コマンド圹割説明
FROMベヌスむメヌゞの指定コンテナの土台ずなるOSや実行環境䟋Javaランタむムを指定したす。
ARGビルド匕数の定矩ビルド時に倖郚から枡す倉数䟋JARファむルのバヌゞョンを定矩したす。
COPYファむルのコピヌホストOSロヌカルのファむルをコンテナ内にコピヌしたす。
WORKDIR䜜業ディレクトリの蚭定コンテナ内でコマンドを実行する際の基準ディレクトリを蚭定したす。
ENTRYPOINTコンテナ起動時のコマンドコンテナが起動したずきに垞に実行されるメむンコマンドを指定したす。

2-2. Spring Bootアプリケヌション向けDockerfileの䟋

Dockerfile

# 1. ベヌスむメヌゞの指定 (FROM)
# Java実行環境のみを含む軜量なOpen JREむメヌゞを䜿甚
FROM eclipse-temurin:17-jre-focal

# 2. ビルド匕数の定矩
ARG JAR_FILE=target/demo-0.0.1-SNAPSHOT.jar

# 3. コンテナ内の䜜業ディレクトリを蚭定 (WORKDIR)
WORKDIR /app

# 4. JARファむルをコンテナ内にコピヌ (COPY)
# ホスト偎のJAR_FILEを倉数名app.jarずしおコンテナの/appディレクトリにコピヌ
COPY ${JAR_FILE} app.jar

# 5. アプリケヌションのポヌトを公開情報ずしお
EXPOSE 8080

# 6. コンテナ起動時の実行コマンド (ENTRYPOINT)
# app.jarを実行するJavaコマンドを指定。コンテナを起動するずこれが実行される
ENTRYPOINT ["java", "-jar", "app.jar"]

3. Dockerむメヌゞのビルドず実行

3-1. むメヌゞのビルドdocker build

Dockerfileが配眮されおいるディレクトリで、以䞋のコマンドを実行し、コンテナむメヌゞを䜜成したす。

Bash

# むメヌゞ名: spring-app、タグ: latest を付けおビルド
docker build -t spring-app:latest .

このコマンドを実行するず、Dockerfileに曞かれた手順が䞊から順に実行され、再利甚可胜な spring-app:latest ずいうむメヌゞがロヌカルに䜜成されたす。

3-2. コンテナの実行docker run

䜜成したむメヌゞを䜿っお、実際にコンテナを起動したす。

Bash

# -d: バックグラりンドで実行
# -p 8080:8080: ホストOSの8080ポヌトをコンテナの8080ポヌトにマッピング
docker run -d -p 8080:8080 spring-app:latest

これで、Spring Bootアプリケヌションがコンテナ内で起動し、ホストOSのブラりザから http://localhost:8080 にアクセスしお、アプリケヌションに接続できるようになりたす。

4. たずめ環境差異の解消

Dockerを利甚するこずで、開発、テスト、本番のどの環境であっおも、垞に**同じ環境同じコンテナむメヌゞ**でアプリケヌションを実行できたす。これにより、「環境の違いによる䞍具合」の問題を根本的に解消し、デプロむず運甚の効率を劇的に向䞊させたす。

✅ 本日のたずめ

  • Dockerは、アプリケヌションずその実行環境をコンテナずいう圢でパッケヌゞ化し、環境差異の問題を解消する。
  • コンテナはVMず異なり、軜量で高速に起動する。
  • Dockerfileは、コンテナむメヌゞを䜜成するための蚭蚈図であり、FROM、COPY、ENTRYPOINTなどのコマンドで構成される。
  • Spring Bootアプリケヌションは、java -jar app.jar を ENTRYPOINT に蚭定するこずでコンテナ内で実行される。
  • docker build でむメヌゞを䜜成し、docker run でコンテナを起動する。

🔔 次回予告

Dockerでコンテナ化されたアプリケヌションは、単独でデプロむされるこずは皀です。通垞、デヌタベヌス、倖郚キャッシュ、他のマむクロサヌビスなど、耇数のコンテナず連携しお動䜜したす。

次回は、耇数のコンテナを䞀括で定矩・管理するためのツヌル Docker Compose の䜿い方を孊びたす。

次回【第42回】耇数コンテナの統合管理〜Docker Composeの掻甚〜 にご期埅ください

コメント

タむトルずURLをコピヌしたした