Tomcat コンテナへの Java Web アプリケーションのデプロイ(Docker を使用)

概要

本記事では、公式 Docker Hub から取得した Tomcat イメージを基盤とし、カスタム Web アプリケーションをコンテナ内にデプロイする実践的手順を解説します。Dockerfile を用いたイメージの再構築、ポートマッピング、およびコンテナ内ファイル操作を含む一連のワークフローを示します。

1. Tomcat イメージの取得

まず、ローカル環境に Tomcat の公式イメージをダウンロードします。国内ユーザー向けにレジストリミラーを設定することで、取得速度を向上させます。

# Docker デーモン設定ファイルを編集
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com"]
}
EOF

# 設定を再読み込み・Docker サービスを再起動
sudo systemctl daemon-reload
sudo systemctl restart docker
# Tomcat 8.5 系の安定版イメージをプル
docker pull tomcat:8.5.94

# 確認:取得済みイメージの一覧表示
docker images | grep tomcat

2. Web アプリケーションのデプロイ方法

2.1 Dockerfile によるカスタムイメージ構築

アプリケーションを永続的に含む独自イメージを作成します。ここでは myapp という名前の展開済み WAR ディレクトリ(またはルートフォルダ)を webapps に配置します。

# ワークディレクトリの作成と移動
mkdir -p ~/docker-tomcat && cd ~/docker-tomcat

# Dockerfile の作成
cat > Dockerfile <<'EOF'
FROM tomcat:8.5.94
COPY myapp /usr/local/tomcat/webapps/myapp
EXPOSE 8080
EOF

# myapp フォルダは事前に準備済み(例:Spring Boot の static + templates + WEB-INF 構成)
# イメージのビルド(タグ名: app-server:v1)
docker build --rm -t app-server:v1 .
# 結果確認
docker images | grep app-server
# 出力例: app-server   v1    a1b2c3d4e5f6    2 minutes ago   578MB

2.2 バックグラウンド起動(デタッチドモード)

アプリケーションを常駐サービスとして起動し、ホストの 8081 ポート経由でアクセス可能にします。

# コンテナの起動(-d: デタッチド、--name: 名前付き)
docker run -d --name webapp-prod -p 8081:8080 -m 512m app-server:v1

# 動作中のコンテナ確認
docker ps --filter "name=webapp-prod" --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"

2.3 対話型シェル起動(デバッグ用途)

コンテナ内部の設定やログ確認のために、インタラクティブな Bash セッションを開始できます。

# コンテナに接続してシェルを起動
docker exec -it webapp-prod /bin/bash

# 例:Tomcat 設定の確認
ls /usr/local/tomcat/conf/
cat /usr/local/tomcat/conf/server.xml | grep -A2 "Connector port"

# 終了時は exit コマンド
exit

3. 実行中コンテナへのファイル追加

コンテナが稼働中に設定ファイルや静的リソースを追加したい場合、docker cp を利用します。事前に vi/vim がインストールされていないイメージでも安全に操作可能です。

# ホスト側の config.xml をコンテナの conf/Catalina/localhost/ にコピー
docker cp ./config.xml webapp-prod:/usr/local/tomcat/conf/Catalina/localhost/

# 確認(コンテナ内で実行)
docker exec webapp-prod ls -l /usr/local/tomcat/conf/Catalina/localhost/config.xml

タグ: Docker Tomcat java-web Dockerfile container-deployment

6月1日 16:02 投稿