7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SpringBootのアプリケーションをDockerコンテナで動かす

Last updated at Posted at 2023-05-12

はじめに

この記事では、既に作成されたSpring BootアプリケーションをDockerコンテナで動かす手順について説明します。Dockerは軽量で柔軟性のあるコンテナプラットフォームで、開発から運用に至るまでのワークフローを簡素化し、一貫性を保つことができます。

この記事の目的は、Spring BootアプリケーションをDockerコンテナでどのように動かすか、具体的な手順を通じて理解を深めることです。記事の終わりまでには、Dockerコンテナ内でSpring Bootアプリケーションを正常に動作させることができるようになることを目指しています。

必要なツールと環境

この記事では、Spring BootアプリケーションをDockerコンテナで動かすための基本的なツールと環境について説明します。具体的には、以下のものが必要となります。

Java

Spring BootはJavaベースのフレームワークなので、Javaの環境が必要です。この記事では、Java 17を前提としています。もしまだJavaをインストールしていない場合は、公式サイトまたは適切なパッケージマネージャを使用してインストールしてください。

Spring Boot

Spring BootはJavaでWebアプリケーションを構築するためのフレームワークです。この記事では、Spring Boot 2.7.11を前提としています。Spring Bootのプロジェクトは、Spring Initializrを使用して簡単に作成することができます。

Docker

Dockerはアプリケーションをパッケージ化し、他のマシンで同じ環境を再現するためのプラットフォームです。この記事では、Docker 20.10を前提としています。もしまだDockerをインストールしていない場合は、公式サイトからダウンロードしてインストールしてください。

Gradle

GradleはJavaプロジェクトのビルドツールです。Spring Bootプロジェクトのビルドと、JARファイルの生成に使用します。Gradleはプロジェクトに組み込まれているため、特別にインストールする必要はありません。

SpringBootにコントローラを作成

コンテナでアプリケーションを起動した際の動作確認を行うため、簡単なコントローラを作成します。内容は以下の通りで、今回は/src/main/java/com/template/controller/SampleController.javaにファイルを作成しています。

package com.template.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SampleController {

	@GetMapping("/hello")
	public String hello() {
		return "Hello, World!";
	}
}

Dockerfileの作成

DockerコンテナでSpring Bootアプリケーションを実行するためには、Dockerfileを作成する必要があります。Dockerfileは、Dockerイメージの作成手順を定義したテキストファイルです。このセクションでは、Dockerfileの記述方法について説明します。

Dockerfileとは

Dockerfileは、Dockerイメージの作成手順を記述したテキストファイルです。Dockerfileには、ベースとなるイメージの指定、必要なソフトウェアのインストール、環境変数の設定、アプリケーションのコピー、ポートの公開、実行コマンドなど、イメージ作成に必要な手順が記述されます。

Dockerfileの記述

Spring Bootアプリケーション用のDockerfileの内容は以下の通りです。ファイルはプロジェクトルーとに配置されています。

# ベースイメージの指定
FROM openjdk:17

# ワーキングディレクトリの設定
WORKDIR /app

# アプリケーションのJARファイルをコンテナにコピー
COPY build/libs/*.jar app.jar

# ポートの公開
EXPOSE 8080

# アプリケーションの実行コマンド
ENTRYPOINT ["java", "-jar", "app.jar"]

このDockerfileでは、openjdk:17イメージをベースにしています。ワーキングディレクトリを/appに設定し、ビルド済みのJARファイルをコンテナにコピーしています。また、ポート8080を公開し、エントリポイントとしてアプリケーションの実行コマンドを設定しています。

これでDockerfileの作成が完了しました。

Dockerイメージのビルド

Dockerfileが作成できたら、次はDockerイメージをビルドします。Gradleを使用してアプリケーションをビルドし、Dockerコマンドを使用してDockerイメージをビルドします。

まず、Gradleでアプリケーションをビルドします。以下のコマンドを実行してください。

./gradlew clean build

これで以前のビルドで生成した内容を削除し、クリーンな状態からビルドしてjarファイルを生成します。

次に、DockerコマンドでDockerイメージをビルドします。以下のコマンドを実行してください。今回はイメージのタグをspring-container-sampleとしています。

docker build -t spring-container-sample .

これでDockerイメージのビルドが完了しました。docker imagesコマンドを使用して、ビルドされたイメージを確認することができます。こちらのdockerコマンドの具体的な内容は、以下の通りです。

  1. build:Dockerイメージをビルドするよう指示
  2. -t spring-container-sample:ビルドされるDockerイメージにspring-container-sampleというタグ(名前)を付ける
  3. .:Dockerビルドコンテキストの場所(Dockerfileへの相対パス)

Dockerコンテナの操作

Dockerイメージが作成できたら、次はDockerコンテナの操作方法について説明します。

Dockerコンテナの起動

以下のコマンドでDockerコンテナを起動します。

docker run -d -p 8080:8080 --name spring-container-sample spring-container-sample

この状態でhttp://localhost:8080/helloにアクセスするとHello, World!と表示されるはずです。

Dockerコンテナの停止

以下のコマンドでDockerコンテナを停止します。

docker stop spring-container-sample

Dockerコンテナの再起動

以下のコマンドでDockerコンテナを再起動します。

docker restart spring-container-sample

まとめ

この記事では、Spring BootアプリケーションをDockerコンテナで動かす手順について説明しました。Dockerfileの作成、Dockerイメージのビルド、Dockerコンテナの操作という基本的なステップを通じて、Dockerを使用してSpring Bootアプリケーションを動かす方法を学びました。

Dockerを使用することで、開発環境から本番環境まで一貫した環境を提供し、アプリケーションのデプロイを簡単に行うことができます。これからもDockerの活用を通じて、より効率的な開発ワークフローを追求していきましょう。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?