0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PodmanのTomcatコンテナでサンプルアプリを動かす

Posted at

Podmanとは

PodmanはRedHatが開発したコンテナエンジンであり、RedHat8以降ではDockerに代わりPodmanが標準のコンテナエンジンとなっています。
今後、RedHatでコンテナを動かす場合は、Podmanを使用する必要があると考えます。
とはいえDockerとまったく異なるコンテナエンジンかというとそんなことはなく、コマンドの引数などはある程度Dockerと互換性があるようです。

構築環境

Podmanの構築・運用はroot権限不要のようなので今回はインストール以外の操作は一般ユーザを使用します。
また、SELinuxは有効化しています。

■構築環境
Microsoft Azure - Redhat 8.2(4.18.0-193.14.3.el8_2.x86_64)

Podmanのインストール

dnfのリポジトリはこんな感じです。
RHEL8のコンテンツは、BaseOSとAppStreamの2つのメインリポジトリにより配布されるようです。
(Azureのデフォルトのmicrosoft-azure-rhel8-eusは無効化しました。)

$ sudo dnf repolist --all
repo id                                               repo name                                                                                                 status
microsoft-azure-rhel8-eus                             Microsoft Azure RPMs for RHEL8 Extended Update Support                                                    disabled
rhel-8-for-x86_64-appstream-eus-rhui-debug-rpms       Red Hat Enterprise Linux 8 for x86_64 - AppStream - Extended Update Support from RHUI (Debug RPMs)        disabled
rhel-8-for-x86_64-appstream-eus-rhui-rpms             Red Hat Enterprise Linux 8 for x86_64 - AppStream - Extended Update Support from RHUI (RPMs)              enabled
rhel-8-for-x86_64-appstream-eus-rhui-source-rpms      Red Hat Enterprise Linux 8 for x86_64 - AppStream - Extended Update Support from RHUI (Source RPMs)       disabled
rhel-8-for-x86_64-baseos-eus-rhui-debug-rpms          Red Hat Enterprise Linux 8 for x86_64 - BaseOS - Extended Update Support from RHUI (Debug RPMs)           disabled
rhel-8-for-x86_64-baseos-eus-rhui-rpms                Red Hat Enterprise Linux 8 for x86_64 - BaseOS - Extended Update Support from RHUI (RPMs)                 enabled
rhel-8-for-x86_64-baseos-eus-rhui-source-rpms         Red Hat Enterprise Linux 8 for x86_64 - BaseOS - Extended Update Support from RHUI (Source RPMs)          disabled
$

Podmanのインストール実行。

$ sudo dnf install podman
$ sudo dnf list installed podman
Installed Packages
podman.x86_64                                      1.6.4-12.module+el8.2.0+6669+dde598ec                                      @rhel-8-for-x86_64-appstream-eus-rhui-rpms
$

Tomcatイメージの取得

続いてTomcatイメージを取得します。
リポジトリは/etc/containers/registries.confで指定されています。

$ cat /etc/containers/registries.conf
~中略~
# To ensure compatibility with docker we've included docker.io in the default search list. However Red Hat
# does not curate, patch or maintain container images from the docker.io registry.
[registries.search]
registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io']
~中略~
$

それではtomcatイメージを検索します。

$ podman search tomcat
docker.io    docker.io/library/tomcat                                                                          Apache Tomcat is an open source implementati...   2927    [OK]
~中略~
$

沢山表示されますが、今回はdocker.io/library/tomcatのイメージを取得したいと思います。

$ podman pull docker.io/library/tomcat

取得したイメージを確認します。

$ podman image ls
REPOSITORY                 TAG      IMAGE ID       CREATED      SIZE
docker.io/library/tomcat   latest   345867df0879   2 days ago   661 MB
$

Tomcatコンテナの起動

podman runでTomcatコンテナを起動します。
-dでデタッチモード(バックグラウンド実行)を指定、-p 8081:8080でホストの8081ポートをコンテナの8080ポートに紐づけます。

$ podman run -d -p 8081:8080 docker.io/library/tomcat:latest

起動したコンテナを確認します。

$ podman ps
CONTAINER ID  IMAGE                            COMMAND          CREATED         STATUS             PORTS                   NAMES
7a14c4a1d1b6  docker.io/library/tomcat:latest  catalina.sh run  38 seconds ago  Up 37 seconds ago  0.0.0.0:8081->8080/tcp  hardcore_merkle
$

CONTAINER IDは以降の操作で使用するため控えておきます。
ちなみにこの状態でnetstat -anを確認すると、以下のようになります。

$ netstat -an | grep 808
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN
$

ホスト側では8081ポートでLISTENしているのが確認できます。

サンプルアプリのデプロイ

warはコンテナのwebapp以下にデプロイすればOKです。
サンプルアプリはtomcatの公式から取得したいと思います。

まず、コンテナにbashで入ります。
対象コンテナは先ほど確認したCONTAINER IDで指定します。

$ podman exec -it 7a14c4a1d1b6 /bin/bash
root@7a14c4a1d1b6:/usr/local/tomcat#

Tomcatインストールディレクトリ以下を確認します。

root@7a14c4a1d1b6:/usr/local/tomcat# ls -l
total 128
-rw-r--r--. 1 root root 18982 Dec  3 11:48 BUILDING.txt
-rw-r--r--. 1 root root  5409 Dec  3 11:48 CONTRIBUTING.md
-rw-r--r--. 1 root root 57092 Dec  3 11:48 LICENSE
-rw-r--r--. 1 root root  2333 Dec  3 11:48 NOTICE
-rw-r--r--. 1 root root  3257 Dec  3 11:48 README.md
-rw-r--r--. 1 root root  6898 Dec  3 11:48 RELEASE-NOTES
-rw-r--r--. 1 root root 16507 Dec  3 11:48 RUNNING.txt
drwxr-xr-x. 2 root root  4096 Jan 21 05:19 bin
drwxr-xr-x. 3 root root    22 Jan 24 04:38 conf
drwxr-xr-x. 2 root root  4096 Jan 21 05:18 lib
drwxrwxrwx. 2 root root   177 Jan 24 04:38 logs
drwxr-xr-x. 2 root root   134 Jan 21 05:18 native-jni-lib
drwxrwxrwx. 2 root root    30 Jan 21 05:18 temp
drwxr-xr-x. 2 root root     6 Jan 21 05:18 webapps
drwxr-xr-x. 7 root root    81 Dec  3 11:45 webapps.dist
drwxrwxrwx. 2 root root     6 Dec  3 11:43 work
root@7a14c4a1d1b6:/usr/local/tomcat#

webapp以下にcdします。

root@7a14c4a1d1b6:/usr/local/tomcat# cd webapps
root@7a14c4a1d1b6:/usr/local/tomcat/webapps# ls -l
total 0
root@7a14c4a1d1b6:/usr/local/tomcat/webapps#

wgetでサンプルアプリを取得します。

root@7a14c4a1d1b6:/usr/local/tomcat/webapps# wget http://tomcat.apache.org/tomcat-8.5-doc/appdev/sample/sample.war

サンプルアプリの取得&展開の確認をします。

root@7a14c4a1d1b6:/usr/local/tomcat/webapps# ls -l
total 8
drwxr-x---. 5 root root   86 Jan 24 04:47 sample
-rw-r--r--. 1 root root 4606 May  1  2018 sample.war
root@7a14c4a1d1b6:/usr/local/tomcat/webapps#

warが展開されたので、アクセス可能な状態となりました。
一旦コンテナから抜けます。

root@7a14c4a1d1b6:/usr/local/tomcat/webapps# exit

サンプルプログラムのアクセス

サーバ上からcurlでアクセスし、サンプルプログラムを動作させます。

$ curl -XGET http://localhost:8081/sample/
<html>
<head>
<title>Sample "Hello, World" Application</title>
</head>
<body bgcolor=white>

<table border="0">
<tr>
<td>
<img src="images/tomcat.gif">
</td>
<td>
<h1>Sample "Hello, World" Application</h1>
<p>This is the home page for a sample application used to illustrate the
source directory organization of a web application utilizing the principles
outlined in the Application Developer's Guide.
</td>
</tr>
</table>

<p>To prove that they work, you can execute either of the following links:
<ul>
<li>To a <a href="hello.jsp">JSP page</a>.
<li>To a <a href="hello">servlet</a>.
</ul>

</body>
</html>
$

無事、サンプルプログラムのJSPを取得できました。

コンテナの終了

コンテナの停止はCONTAINER IDを指定してpodman stop。

$ podman stop 7a14c4a1d1b6
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?