はじめに
この記事ではSpring BootをDockerで動かし,hello worldを表示させます.
Dockerは勉強中なので,間違いなどがあればコメントお願い致します.
環境
- 言語
- java8
- ビルドシステム
- maven
Springプロジェクトの作成
雛形のプロジェクトのDL
**こちら**から雛形を作成することが出来ます.
Dependenciesのところで,web
とdevtools
を検索し,追加しましょう.
devtools
を入れることで,ファイルが変更された時にコンパイルしてくれ,ブラウザをリロードするだけで表示に反映させてくれます.入れないと毎回mvnw spring-boot:run
? mvn spring-boot:run
? をし直さないとブラウザには反映されない・・・
その後,Generate Projectで雛形のプロジェクトのDLしましょう.
DLしたらzipを解凍し,好きな場所にプロジェクトを配置しましょう.
hello worldの記述
src/main/java/com/example/demo/DemoApplication.java
(※プロジェクト名がdemoなので,ファイル名がDemoApplication.java
になった)を変更して,以下のようにします.
@RequestMapping("/")
はWebのフレームワーク使ったことがある方は分かるかもしれませんが,URLのパスがルートの時,このアノテーションが付いているメソッドが呼ばれます.
つまり,http://localhost/
にアクセスすると,public String home()
が実行されます.
もし,@RequestMapping("/hoge")
のアノテーションをつけたときは,http://localhost/hoge
で実行されます.
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
@RequestMapping("/")
public String home() {
return "Hello Docker World";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
Dockerで動かすための設定
次にDockerで動かすためにdocker-compose.ymlを作成します.
docker-compose.ymlの作成
以下のdocker-compose.ymlを作成します.
volumesを.:/app
とすることで,作業するホストPC(カレントディレクトリ)とDockerのコンテナ(/appディレクトリ)を共有することが出来ます.
で,commandを./mvnw spring-boot:run
とすることで,Spring Bootのプロジェクトを起動しています.
version: '2'
services:
app:
image: openjdk:8-jdk-alpine
ports:
- "8080:8080"
volumes:
- .:/app
working_dir: /app
command: ./mvnw spring-boot:run
プロジェクトを動かす
docker-compose.yml
があるページで以下のコマンドを実行してください.
そうするとDockerのコンテナで今回作成したプロジェクトがビルドされ,実行されます.
オプション | 備考 |
---|---|
-d | バックグランドで実行 |
docker-compose up -d
ちょっと数分待てば,以下のようにhello worldが出来ると思います.
ipアドレスはdocker-machine ip
で取得し,port番号は8080です.
Hello Docker World
を修正して保存すると,少し時間たった後にブラウザをリロードすると,表示もかわると思います.
これは,Dockerコンテナとフォルダ共有しているのと,devtools
を入れたのと,./mvnw spring-boot:run
を実行しているおかげでこうなってます.〜
最後に
出来たものはGithubに公開しています〜
https://github.com/ferretdayo/spring-with-docker
これからDBの連携など色々していきたいと思います〜