0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【試し】SpringプロジェクトをDocker上で起動させてみる

Last updated at Posted at 2024-04-13

やること

Springプロジェクトをdockerコンテナ上で動かす

使用するもの

  • Springプロジェクト(DB接続なし、簡素なものがよい)
  • Docker(ver 20.10以上)

※注意:勉強記録として失敗した内容も残しています

実施記録

こちらの記事を参考に実施
SpringBootのアプリケーションをDockerコンテナで動かす

手順

  1. DockerFileの作成
  2. GradleでJarファイル作成
  3. Dockerイメージをビルドし、コンテナ作成 docker build
  4. コンテナ起動 docker run
  5. アプリ実行

DockerFileの作成、GradleでJarファイル作成

./gradlew clean build
既存のビルド結果を削除し、クリーンな状態からビルドを実行しjarファイルが生成される。

image1.png

Dockerイメージをビルドし、コンテナ作成

PS C:\Users\****\IdeaProjects\text-file-download> docker -v
Docker version 20.10.12, build e91ed57
PS C:\Users\****\IdeaProjects\text-file-download> docker build -t spring-container-sample .
[+] Building 0.0s (2/2) FINISHED
 => [internal] load build definition from Dockerfile                    0.0s
 => => transferring dockerfile: 2B                                      0.0s 
 => CANCELED [internal] load .dockerignore                              0.0s 
 => => transferring context:                                            0.0s 
failed to solve with frontend dockerfile.v0: failed to read dockerfile: open 
/var/lib/docker/tmp/buildkit-mount738487121/Dockerfile: no such file or directory
PS C:\Users\****\IdeaProjects\text-file-download> 

失敗しちゃった。

原因

Dockerfile: no such file or directory

Dockerfileのファイル名は、頭文字以外は小文字が正しい
修正して再ビルド

image2.png
PS C:\Users\****\IdeaProjects\text-file-download> docker build -t spring-container-sample .
[+] Building 152.9s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                    0.0s
 => => transferring dockerfile: 384B                                    0.0s 
 => [internal] load .dockerignore                                       0.0s 
 => => transferring context: 2B                                         0.0s 
 => [internal] load metadata for docker.io/library/openjdk:17           3.0s 
 => [1/3] FROM docker.io/library/openjdk:17@sha256:528707081fdb9562e  149.3s
 => => resolve docker.io/library/openjdk:17@sha256:528707081fdb9562eb8  0.0s 
 => => sha256:98f0304b3a3b7c12ce641177a99d1f3be56f532473a5 954B / 954B  0.0s
 => => sha256:5e28ba2b4cdb3a7c3bd0ee2e635a5f6481682b77 4.45kB / 4.45kB  0.0s 
 => => sha256:38a980f2cc8accf69c23deae6743d42a87eb3 42.11MB / 42.11MB  33.6s 
 => => sha256:de849f1cfbe60b1c06a1db83a3129ab0ea397 13.53MB / 13.53MB  18.1s 
 => => sha256:a7203ca35e75e068651c9907d659adc721 187.53MB / 187.53MB  145.9s 
 => => sha256:528707081fdb9562eb819128a9f85ae7fe000e2f 1.04kB / 1.04kB  0.0s 
 => => extracting sha256:38a980f2cc8accf69c23deae6743d42a87eb34a54f023  1.3s 
 => => extracting sha256:de849f1cfbe60b1c06a1db83a3129ab0ea397c4852b98  0.4s 
 => => extracting sha256:a7203ca35e75e068651c9907d659adc721dba823441b7  3.2s 
 => [internal] load build context                                       0.2s 
 => => transferring context: 19.75MB                                    0.2s 
 => [2/3] WORKDIR /app                                                  0.3s 
 => [3/3] COPY build/libs/*.jar app.jar                                 0.1s 
 => exporting to image                                                  0.1s 
 => => exporting layers                                                 0.1s 
 => => writing image sha256:7439c961dba53d6583a3bbeb733ed88c00bfa5ab08  0.0s 
 => => naming to docker.io/library/spring-container-sample              0.0s 

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

結果、3分ほど掛かったが成功。

※コマンド補足

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

コンテナ起動し、アプリ実行

PS C:\Users\****\IdeaProjects\text-file-download> docker run -d -p 8080:8080 spring-container-sample spring-container-sample
faf2392867f7da84f0d5d79729961db1ccf4a19a4f2f74f65e9199d745852deb

PS C:\Users\****\IdeaProjects\text-file-download> 

あれ...起動してない。一覧みても、デスクトップアプリ見ても。

デスクトップアプリの方にエラーが出ていた

Exception in thread "main" java.lang.UnsupportedClassVersionError: org/example/textfiledownload/TextFileDownloadApplication has been compiled by a more recent version of the Java Runtime (class file version 65.0), this version of the Java Runtime only recognizes class file versions up to 61.0

(省略)
__下記は訳

スレッド「メイン」java.lang.UnsupportedClassVersionError での例外: org/example/textfiledownload/TextFileDownloadApplication は、より新しいバージョンの Java ランタイム (クラス ファイル バージョン 65.0) によってコンパイルされています。このバージョンの Java ランタイムは、それより上のバージョンのクラス ファイルのみを認識します。 61.0まで

Gradle.buildのJavaのバージョンを確認したら21だった。

build.gradle
...

java {
    sourceCompatibility = '21'
}

Dockerfileに記載したjdkのバージョンを上げて再ビルドして再起動してみる。

PS C:\Users\****\IdeaProjects\text-file-download> docker run -d -p 8080:8080 --name spring-container-sample spring-container-sample
b8f08998b3a05b8a3c8bc7228abe452f88f0e5b41ce041118e3b1ca204605c7b
PS C:\Users\****\IdeaProjects\text-file-download> docker container ls -q                                      
b8f08998b3a0         

コンテナIDが表示され、立ち上がった気がする。

http://localhost:8080/download へアクセス

>成功!アプリが実行され、テキストファイルがDownloadされました。

コンテナの停止、削除

不要になったら削除しないと、容量をどんどん食ってしまうため停止(また削除)。

PS C:\Users\****\IdeaProjects\text-file-download> docker stop spring-container-sample
spring-container-sample
PS C:\Users\****\IdeaProjects\text-file-download> 
PS C:\Users\****\IdeaProjects\text-file-download> docker container ls -q             
PS C:\Users\****\IdeaProjects\text-file-download> docker rm spring-container-sample    
spring-container-sample
PS C:\Users\****\IdeaProjects\text-file-download> 

参考記事

SpringBootのアプリケーションをDockerコンテナで動かす
(https://qiita.com/ke_suke0215/items/1b0128c140dd051b5993)

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?