Open31

[InProgress] VS Code の Remote Container で Spring Boot ( gradle x Java ) の開発環境を構築する手順を整理する

anfangdanfangd

やりたいこと(優先度順)

  1. Visual Studio Code の Remote Container を使用して Spring Boot の Application を作成する
  2. Remote Container を使用することで HostOS を汚さず環境構築する
  3. Spring Boot で アプリケーションを実装する
  4. gradle を使う
  5. kotlinを使う

Step

  • VS Code の基本構成を準備する
    • Docker で試す
    • docker-compose で試す
  • コンテナを準備する
    • application server
    • db server
  • Spring Boot の初期プロジェクトを作成する
    • java x maven
    • java x gradle
    • kotlin x maven ※未着手
    • kotlin x gradle ※失敗する
  • アプリケーションの基本的な設定
    • DB接続設定
  • PHP/Laravel のように migrationツール で migrate できるようにする

課題

  • 次の構成で実現しようとしたら実現出来なかった。
    • 構成
      • Visual Studio Code
      • Remote Container
      • Spring Boot ( gradle x kotlin )
    • 発生したエラー

中間成果物

参考

VS Code Remote - Containers を Docker Compose で使うのだー! - Mitsuyuki.Shiiba

これを参考にしながら構築する

anfangdanfangd

起動しないなぁと思っていたら、 VS Code の Configuration の設定が VirtualBox で構築した Docker へ接続するようになってた。設定が Global 過ぎたので、より狭い範囲で設定しておくべきだった。

anfangdanfangd

VS Code のコマンドパレットから作成すると以下の構成になる。

tree -a
.
└── .devcontainer
    └── devcontainer.json
    └── Dockerfile
.devcontainer/devcontainer.json
{
	"build": {
		"dockerfile": "Dockerfile",
	},
}

これを、今後を見越して以下の感じにする。

tree -a
.
├── .devcontainer
│   └── devcontainer.json
└── docker
    └── Dockerfile
.devcontainer/devcontainer.json
{
	"build": {
		"dockerfile": "../docker/Dockerfile",
	},
}
anfangdanfangd

お試しで構築しようとしている コンテナ のベースイメージのバージョンは以下。

  • openjdk: 15
  • alpin: 3.12

pull コマンド

command
docker pull openjdk:15-jdk-alpine

掲載ページ。

openjdk Tags - Docker Hub

anfangdanfangd

pom だと Spring Boot Dashboard が Side Menu で出てくるけど、 gradle だと出てこないのはなんでなん

anfangdanfangd

pom だと Spring Boot Dashboard が Side Menu で出てくるけど、 gradle だと出てこないのはなんでなん

起動タイミングの問題だった。
gradle でも対象コードまで行って Run すれば Side Menu が出てきた。

anfangdanfangd

いまのところのベース構成

Command
$ tree -a
.
├── .devcontainer
│   └── devcontainer.json
└── docker
    ├── docker-compose.yml
    ├── mysql-confd
    │   └── default_authentication.cnf
    └── openjdk
        └── Dockerfile
.devcontainer/devcontainer.json
{
	"name": "My Java/Kotlin Application",

	"dockerComposeFile": "../docker/docker-compose.yml",
	"service": "openjdk",
	"workspaceFolder": "/workspace",
	"settings": {
	},

	"extensions": [
		// Language: Java / Kotlin
		"vscjava.vscode-java-pack",
		"redhat.java",
		"vscjava.vscode-java-debug",

		// Spring Boot
		"vscjava.vscode-spring-initializr",
		"pivotal.vscode-spring-boot",
		"pivotal.vscode-boot-dev-pack",
		"vscjava.vscode-spring-boot-dashboard"
	],
}
docker/docker-compose.yml
version: '3'
services:
  openjdk:
    build: ./openjdk
    ports:
      - "8080:8080"
    command: /bin/sh -c "while :; do sleep 10; done"
    volumes:
      - ..:/workspace:cached

  mysql:
    image: mysql:5.7
    container_name: "dc-db-mysql"
    restart: always
    environment:
      MYSQL_DATABASE: mysqldb
      MYSQL_ROOT_PASSWORD: mysqldb
    ports: 
      - 13306:3306
    volumes:
      - ./mysql-confd:/etc/mysql/conf.d
docker/openjdk/Dockerfile
ARG JDK_VERSION="15"
ARG ALPIN_VERSION="3.12"
FROM openjdk:${JDK_VERSION}-jdk-alpine${ALPIN_VERSION}

RUN apk update \
    && apk add git curl maven make mysql-client
docker/mysql-confd/default_authentication.cnf
[mysqld]
default_authentication_plugin= mysql_native_password

あとは、 vscode-spring-initializr で適当に Spring Boot プロジェクトを新規作成する。

anfangdanfangd

TODO: Spring Boot に Migration Tool を導入する

anfangdanfangd

[Unsolved] Kotlin で構築しようとしたときに Unresolved reference エラーが発生

anfangdanfangd

フレームワークや言語の全体像が分かっていないので解決方法が思い浮かばない。

anfangdanfangd

[Solved] 予期せぬ Thymeleaf のエラーが発生する

※エラーログはメモし忘れた。

anfangdanfangd

Spring Boot Application を実装するための IDE

  • InteliJ IDEA
  • Spring Tool Suite
  • Eclipse + Spring Tools 4 for Eclipse
  • Visual Studio Code + Spring Tools 4 for Visual Studio Code
  • Theia + Spring Tools 4 for Theia