DockerコンテナでTomcatを動かしてみる

Tomcat を題材にして、Docker コンテナとのやり取りを試してみる。つぎのページを参考にした。

CentOS 7 のイメージを取ってきてコンテナを起動

Docker Hub から CentOS7 のイメージを取ってくる。

[email protected] $ sudo docker pull centos:7

後で使うので /var/log/tomcat-container ディレクトリを作っておく。

[email protected] $ sudo mkdir /var/log/tomcat-container

コンテナを起動。-v オプションは、ホストとコンテナのディレクトリ共有のオプション(後述)。

[email protected] $ sudo docker run -it -d -p 18080:8080 -v /var/log/tomcat-container:/share/logs --name tomcat centos:7

これで CentOS のコンテナが起動した。っていうか、Ubuntu 上で CentoOS のコンテナを動かせるんだね。

Tomcatをダウンロードしてコンテナ内にコピー

公式サイトから Apache Tomcat をダウンロード。

[email protected] $ wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz

ダウンロードしたファイルをコンテナ内にコピー。

[email protected] $ sudo docker cp apache-tomcat-9.0.34.tar.gz tomcat:/opt/

コンテナ内に入ってJavaとTomcatをインストール

起動中のコンテナの中に入るには、docker exec コマンド。シェルに bash を指定している。

[email protected] $ sudo docker exec -it tomcat bash

コンテナ内にて、まずは Java をインストール。

[[email protected] /]# yum install -y java

つづいて Tomcat のインストール。というか、これはアーカイブファイルを展開するだけ。で、Tomcat を起動する。

[[email protected] /]# cd /opt
[[email protected] opt]# ls
apache-tomcat-9.0.34.tar.gz
[[email protected] opt]# tar zxf apache-tomcat-9.0.34.tar.gz
[[email protected] opt]# cd apache-tomcat-9.0.34
[[email protected] apache-tomcat-9.0.34]# ./bin/startup.sh

これで OK。ホスト側のブラウザで http://localhost:18080/ にアクセスすると、ちゃんと Tomcat が動いているのが確認できた。

ホストとコンテナのディレクトリ共有

さて、Tomcat のログはコンテナの中にある。コンテナを停止したらログを見るためにはもう一度コンテナを起動する必要がある。さらに、コンテナを削除してしまったら、もうログを見る術はない。

ここで、ホストとコンテナのディレクトリ共有が生きてくる。docker run コマンドで指定した -v オプションだ。コンテナを起動するときに -v /var/log/tomcat-container:/share/logs と指定した。これでホストの /var/log/tomcat-container とコンテナの /share/logs が共有される。

いま、Tomcat のログファイルは、インストールしたディレクトリの下の logs ディレクトリに書きだされている(これが Tomcat のデフォルト)。そこでログファイルの出力先を /share/logs に変更する。

Tomcat をいったん停めて、設定ファイルを書き換えて、再起動。

[[email protected] apache-tomcat-9.0.34]# ./bin/shutdown.sh
[[email protected] apache-tomcat-9.0.34]# sed -i -e "s/\${catalina.base}\/logs/\/share\/logs/g" ./conf/logging.properties
[[email protected] apache-tomcat-9.0.34]# ./bin/startup.sh

これで、/share/logs ディレクトリにログファイルが出力されるようになった。

[[email protected] apache-tomcat-9.0.34]# ls -la /share/logs
total 20
drwxr-xr-x 2 root root 4096 May 6 05:04 .
drwxr-xr-x 3 root root 4096 May 6 04:59 ..
-rw-r----- 1 root root 5883 May 6 05:04 catalina.2020-05-06.log
-rw-r----- 1 root root    0 May 6 05:04 host-manager.2020-05-06.log
-rw-r----- 1 root root  408 May 6 05:04 localhost.2020-05-06.log
-rw-r----- 1 root root    0 May 6 05:04 manager.2020-05-06.log

ディレクトリ共有しているホストの /var/log/tomcat-container にも同じログファイルがあるのがわかる。

[email protected] $ ls -la /var/log/tomcat-container
合計 20
drwxr-xr-x  2 root root   4096 5月 6 14:04 .
drwxrwxr-x 14 root syslog 4096 5月 6 13:19 ..
-rw-r-----  1 root root   5883 5月 6 14:04 catalina.2020-05-06.log
-rw-r-----  1 root root      0 5月 6 14:04 host-manager.2020-05-06.log
-rw-r-----  1 root root    408 5月 6 14:04 localhost.2020-05-06.log
-rw-r-----  1 root root      0 5月 6 14:04 manager.2020-05-06.log

これらはコンテナを停止しても見ることができる。

[email protected] $ sudo docker stop tomcat
[email protected] $ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
2a1533db2a0e        centos:7            "/bin/bash"         12 minutes ago      Exited (137) 9 seconds ago                       tomcat
[email protected] $ ls -la /var/log/tomcat-container
合計 20
drwxr-xr-x  2 root root   4096 5月 6 14:04 .
drwxrwxr-x 14 root syslog 4096 5月 6 13:19 ..
-rw-r-----  1 root root   5883 5月 6 14:04 catalina.2020-05-06.log
-rw-r-----  1 root root      0 5月 6 14:04 host-manager.2020-05-06.log
-rw-r-----  1 root root    408 5月 6 14:04 localhost.2020-05-06.log
-rw-r-----  1 root root      0 5月 6 14:04 manager.2020-05-06.log

とりあえずここまで。

カテゴリー: misc パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください