概要
本記事では、公式 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