Tomcat を題材にして、Docker コンテナとのやり取りを試してみる。つぎのページを参考にした。
CentOS 7 のイメージを取ってきてコンテナを起動
Docker Hub から CentOS7 のイメージを取ってくる。
takatoh@apostrophe $ sudo docker pull centos:7
後で使うので /var/log/tomcat-container ディレクトリを作っておく。
takatoh@apostrophe $ sudo mkdir /var/log/tomcat-container
コンテナを起動。-v
オプションは、ホストとコンテナのディレクトリ共有のオプション(後述)。
takatoh@apostrophe $ sudo docker run -it -d -p 18080:8080 -v /var/log/tomcat-container:/share/logs --name tomcat centos:7
これで CentOS のコンテナが起動した。っていうか、Ubuntu 上で CentOS のコンテナを動かせるんだね。
Tomcatをダウンロードしてコンテナ内にコピー
公式サイトから Apache Tomcat をダウンロード。
takatoh@apostrophe $ wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
ダウンロードしたファイルをコンテナ内にコピー。
takatoh@apostrophe $ sudo docker cp apache-tomcat-9.0.34.tar.gz tomcat:/opt/
コンテナ内に入ってJavaとTomcatをインストール
起動中のコンテナの中に入るには、docker exec
コマンド。シェルに bash を指定している。
takatoh@apostrophe $ sudo docker exec -it tomcat bash
コンテナ内にて、まずは Java をインストール。
[root@f656baaeb4b8 /]# yum install -y java
つづいて Tomcat のインストール。というか、これはアーカイブファイルを展開するだけ。で、Tomcat を起動する。
[root@f656baaeb4b8 /]# cd /opt
[root@f656baaeb4b8 opt]# ls
apache-tomcat-9.0.34.tar.gz
[root@f656baaeb4b8 opt]# tar zxf apache-tomcat-9.0.34.tar.gz
[root@f656baaeb4b8 opt]# cd apache-tomcat-9.0.34
[root@f656baaeb4b8 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 をいったん停めて、設定ファイルを書き換えて、再起動。
[root@2a1533db2a0e apache-tomcat-9.0.34]# ./bin/shutdown.sh
[root@2a1533db2a0e apache-tomcat-9.0.34]# sed -i -e "s/\${catalina.base}\/logs/\/share\/logs/g" ./conf/logging.properties
[root@2a1533db2a0e apache-tomcat-9.0.34]# ./bin/startup.sh
これで、/share/logs ディレクトリにログファイルが出力されるようになった。
[root@2a1533db2a0e 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 にも同じログファイルがあるのがわかる。
takatoh@apostrophe $ 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
これらはコンテナを停止しても見ることができる。
takatoh@apostrophe $ sudo docker stop tomcat
takatoh@apostrophe $ 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
takatoh@apostrophe $ 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
とりあえずここまで。