Beginner's Hack

復習用。誰かのためになれば...

VSCode + DockerでSpringBoot開発環境の構築

概要

VSCodeとDockerを使用したSpringBootの開発環境の構築手順を記す。

この記事の対象者

Spring Bootの開発やデバッグを行いたいが、
MacIDEやDBをインストールしたくない方。

この記事の目的

VSCodeのRemote-Containerを使用して、
Docker上のJavaコンテナ内でコードを編集、実行できるようにする。

コード

github.com

解説

DockerでJavaコンテナ(+α)を立ち上げる

必要なファイルの作成

workspace
  |-docker
      |- docker-compose.yml
      |- mysql
           |- sql_init:起動時に実行されるSQL文
           |- db.env:DB設定の記述(DB名、パスワード等)
           |- Dockerfile:使用するイメージの指定やmy.cnf(設定ファイル)のコピーなどを記述
           |- my.cnf:文字コード等

/mysqlの中身はgithub参照

docker-compose.ymlの記述

services:
  java:
    image: openjdk:15
    container_name: java
    env_file:
      - ./mysql/db.env # mysqlと同じものを指定
    tty: true
    working_dir: /app #コンテナ内のワーキングディレクトリ
    volumes:
      - type: bind # source(ホストマシン)のディレクトリをtarget(コンテナ)にマウントする
        source: ../spring_prj
        target: /app
    ports:
      - 8080:8080 # 通常実行
      - 5050:5050 # デバッグ用
    depends_on:
      - mysql # 「mysql」の後で起動

  mysql:
    # imageの指定ではなく、Dockerfileを用意している。
    # 理由:ビルドの過程で必要な情報を読み取ることが可能。
    # 補足:docker-compose.ymlではビルド後にコンテナへマウントする。
    build: ./mysql
    container_name: mysql
    env_file:
      - ./mysql/db.env #MySQLの設定ファイル
    volumes:
      - mysql_data:/var/lib/mysql #実データの永読化
      - ./mysql/log:/var/log/mysql #logの永読化
      - ./mysql/sql_init:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

volumes:
  mysql_data:
    name: spring_boot_mysql

一度コンテナが起動できるか確認しておく

コンテナ起動
$ docker-compose up -d


コンテナ停止、削除
$ docker-compose down

Remote-Containersを使用する為のファイルの作成

workspace
  |- docker
  |- .devcontainer #新規作成
          |- devcontainer.json #新規作成

devcontainer.jsonの記述

{
  // 任意の名前
  "name": "remote-java",
  // DockerComposeFileを指定
  "dockerComposeFile": "../docker/docker-compose.yml",
  // DockerComposeFileにあるservice名を指定
  "service": "java",
  // コンテナに入ったときの作業ディレクトリ
  "workspaceFolder": "/app",
  "settings": {
      // bashでターミナルを起動
      "terminal.integrated.defaultProfile.linux": "bash"
  },
  // コンテナ内で使いたい拡張機能
  "extensions": [
    // Java関連の拡張機能パック
    "vscjava.vscode-java-pack",
    // Spring Boot関連の拡張機能パック
    "pivotal.vscode-boot-dev-pack",
    "gabrielbb.vscode-lombok",
  ]
}

Remote-Containers起動

  1. VSCode画面左下にある「><」マークを選択。
  2. コマンド一覧から「Reopen in Container」を実行。
    Remote-Container起動

環境

  • macOS Monterey
  • Docker 20.10.8