ゆるふわエンジニアのブログ

行ったこと、調べたこと等をつらつらと書いていくかもしれません。

Tomcat for JavaでDockerコンテナ上のTomcatを指定する方法

Tomcat for JavaでDockerコンテナ上のTomcatを指定して使用する方法を説明していきます。

j-levia.hatenablog.jp
の「何故Dockerイメージおよびコンテナを使わないのか?」で書いた内容へのアンサー的な内容です。

本記事の内容です。

本記事の内容は何が嬉しいのか?

デバッグ用に使用するTomcatをいちいちインストールする必要が無くなります。
また、Tomcatが不要になった時はDockerコンテナおよびイメージを削除するだけでよくなるので、開発環境が汚されることも無くなります。

対象読者

Visual Studio Code(VS Code)の拡張機能であるTomcat for JavaでDockerコンテナ上のTomcatを指定して使用したい方。

本記事の内容を試した環境

ホストOS: Ubuntu 18.04
Docker: 18.09.1-rc1, build bca0068
VS Code: ver 1.30.2
Tomcat for Java: ver 0.11.1

上記環境はVirtualBox上に構築しています。

Tomcat環境構築

1. Docker環境の権限変更

Tomcat for JavaTomcatディレクトリを指定する際にアクセスできるよう、下記コマンドで

にアクセス権限を付与します。

sudo chmod 755 /var/lib/docker
sudo chmod 755 /var/lib/docker/volumes

ちなみに、元の設定に戻したい場合は下記のコマンドを実行することで戻すことができます。(権限変更前がデフォルト状態の場合。)

sudo chmod 711 /var/lib/docker
sudo chmod 700 /var/lib/docker/volumes

2. Docker Volumeの作成

下記コマンドで使用するDocker Volumeを作成します。
今回はTomcat9を使用するので
Tomcat9
という名前で作成します。

docker volume create tomcat9

作成後は

docker volume ls

を実行し、リストにtomcat9が表示されることを確認してください。

3. Tomcatコンテナ、Volume、シンボリックリンクを作成するスクリプトファイル作成

任意のディレクトリで
run-tomcat9-jre8.sh
というファイルを作成し、中に下記のコードを貼り付けて保存します。

#!/bin/bash
# Declare variables.
CreateServerDir="${HOME}/server/tomcat"
UseVolumeName="tomcat9"
TomcatMajorVer=9
JreMajorVer=8
VolumeDir="/var/lib/docker/volumes/${UseVolumeName}/_data"
CreateSymbolicLink="${CreateServerDir}/${TomcatMajorVer}"
UseImage="tomcat:${TomcatMajorVer}-jre${JreMajorVer}"
ContainerName="tomcat${TomcatMajorVer}-jre${JreMajorVer}"

# Stop and remove docker container.
docker stop $ContainerName
docker rm $ContainerName

# Create and run docker container.
docker run -p 18080:8080 -d --rm --name $ContainerName -v $UseVolumeName:/usr/local/tomcat $UseImage

# Create symbolic link.
mkdir -p $CreateServerDir
rm $CreateSymbolicLink
ln -sf $VolumeDir $CreateSymbolicLink

# Change permission of docker volume directory for allow access.
sudo chmod 777 -R $VolumeDir

Tomcatディレクトリへのシンボリックリンク作成場所を変更したい場合はCreateServerDir変数の中身を、
使用するDocker Volumeを変更したい場合はUseVolumeName変数の中身を、
他バージョンのTomcatを使用したい場合はTomcatMajorVer変数およびJreMajorVer変数の中身をそれぞれ変更してお使いください。
なんなら上記コードを元に自由に改良してください。

最後にDocker Volumeディレクトリの権限を全ユーザに対して読み取り、書き込み、実行可に設定していますが、開発環境でかつ使い捨ての環境なので、このような設定にしています。
あくまでもPublicになっていないPrivateな開発環境でのみ許されることなので、Publicな(インターネット上で公開されている)環境でこのような権限の設定は行わないでください。

4. 作成したスクリプトファイル実行

下記のコマンドで作成したスクリプトファイルを実行します。

sh run-tomcat9-jre8.sh 

Tomcat for JavaでDockerコンテナ上のTomcatを使用

1. Tomcat for JavaTomcatコンテナ内のTomcatを指定および追加

Visual Studio Code(VS Code)を起動し、デバッグに使用するTomcatサーバを追加します。
Tomcat for Java自体の使い方については本記事では説明しません。
公式情報を参照ください。
marketplace.visualstudio.com

Tomcatディレクトリを選択する時、
$HOME/server/tomcat/9
もしくは
/var/lib/docker/volumes/tomcat9/_data
のどちらかのディレクトリを選択してください。

2. 追加したTomcatサーバの名前を変更

追加したTomcatサーバの名前はデフォルトだと一目で何かを判断できないような名前になっているので、
サーバ名を右クリック→Rename(日本語環境だと「名前を変更?」)→画面上部に表示されたテキストボックスに設定する名前を入力しEnter
で、お好きな名前に変更してください。

これで、VS Code + TomcatでWebアプリのデバッグが行えるようになります。