VSCode + DockerでSpringBoot開発環境の構築
概要
VSCodeとDockerを使用したSpringBootの開発環境の構築手順を記す。
この記事の対象者
Spring Bootの開発やデバッグを行いたいが、
MacにIDEやDBをインストールしたくない方。
この記事の目的
VSCodeのRemote-Containerを使用して、
Docker上のJavaコンテナ内でコードを編集、実行できるようにする。
コード
解説
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起動
- VSCode画面左下にある「><」マークを選択。
- コマンド一覧から「Reopen in Container」を実行。
環境
- macOS Monterey
- Docker 20.10.8