podmanで遊び始めたので、
備忘録も兼ねて基本的なコマンドを書いておきます。
実行環境のOSはRed Hat Enterprise Linux 8.0です。
前回の投稿記事は以下から読めます。
podmanの覚書01(インストール/イメージ取得/情報取得まで)
podmanの覚書02(イメージのタグ付け/保存/配布/削除まで)
ではサクッと書いていきます。
Redmine公式イメージを取得
まずお目当てのイメージをローカルへプルするためにpodman searchでレジストリ情報を検索します。
# podman search redmine
INDEX       NAME                                     DESCRIPTION                                       STARS   OFFICIAL   AUTOMATED
docker.io   docker.io/library/redmine                Redmine is a flexible project management web...   756     [OK]
公式イメージはOFFICIAL列が[OK]になっています。ここではdocker.io/library/redmineをpodman pullでローカルへプルします。ちなみにdocker.ioへの接続であれば、registry.redhat.ioのように事前のログインは不要です。
# podman pull docker.io/library/redmine
Trying to pull docker.io/library/redmine...Getting image source signatures
~中略~
Storing signatures
3f1c9319f54c4939691eebe00db49d62580dd91b770b02ef1003bd7d2251e1e5
# podman images
REPOSITORY                         TAG      IMAGE ID       CREATED        SIZE
docker.io/library/redmine          latest   3f1c9319f54c   3 days ago     603 MB
Redmineコンテナを起動する
設定情報を確認するため、取得したイメージに対してpodman inspectを実行します。
#  podman inspect docker.io/library/redmine
~中略~
        "Config": {
            "ExposedPorts": {
                "3000/tcp": {}
~中略~
ここにポートフォワーディング先のポート番号や、環境変数、エントリーポイント、プロセスを実行する際のコマンドオプションなどが記載されているので、この情報をもとにしてコンテナを起動します。今回は以下の通りです。
# podman run -d --name redmine_server01 -p 3000:3000 docker.io/library/redmine
0065ee94abdf0e9c94e06b0348101beb8b4e64077c832deba08fd2c3346a5d69
# podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS             PORTS                   NAMES
0065ee94abdf  docker.io/library/redmine:latest  /docker-entrypoin...  54 seconds ago  Up 53 seconds ago  0.0.0.0:3000->3000/tcp  redmine_server01
コンテナが起動しているのを確認したら、3000ポートを指定してWEBブラウザで接続してみます。
http://<podmanサーバのIPアドレス>:3000/
Redmineサーバのトップページが表示されていると思います。
正常に表示されていることを確認したら一度コンテナを停止します。
# podman stop 0065ee94abdf
0065ee94abdf0e9c94e06b0348101beb8b4e64077c832deba08fd2c3346a5d69
# podman ps
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
# podman ps -a
CONTAINER ID  IMAGE                               COMMAND               CREATED        STATUS                     PORTS                   NAMES
0065ee94abdf  docker.io/library/redmine:latest    /docker-entrypoin...  5 minutes ago  Exited (1) 20 seconds ago  0.0.0.0:3000->3000/tcp  redmine_server01
Redmineコンテナの起動/停止をsystemdで管理する
ここまで来たら、あとはRedmineコンテナの起動/停止をサービス化します。
# vi /etc/systemd/system/redmine_container.service
# cat /etc/systemd/system/redmine_container.service
[Unit]
Description=Redmine Podman container
Wants=syslog.service
[Service]
Restart=always
ExecStart=/usr/bin/podman start -a redmine_server01
ExecStop=/usr/bin/podman stop -t 10 redmine_server01
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl restart redmine_container.service
# systemctl status redmine_container.service
● redmine_container.service - Redmine Podman container
   Loaded: loaded (/etc/systemd/system/redmine_container.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-07-08 02:51:55 JST; 6s ago
 Main PID: 15510 (podman)
    Tasks: 10 (limit: 11528)
   Memory: 24.5M
   CGroup: /system.slice/redmine_container.service
           mq15510 /usr/bin/podman start -a redmine_server01
~中略~
# podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS             PORTS                   NAMES
0065ee94abdf  docker.io/library/redmine:latest  /docker-entrypoin...  11 minutes ago  Up 53 seconds ago  0.0.0.0:3000->3000/tcp  redmine_server01
これでsystemctlコマンドを打つだけで、podmanで作成・管理したコンテナを起動/停止することができるようになりました。
# systemctl stop redmine_container.service
# systemctl status redmine_container.service
● redmine_container.service - Redmine Podman container
   Loaded: loaded (/etc/systemd/system/redmine_container.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Mon 2019-07-08 02:54:05 JST; 1s ago
  Process: 15686 ExecStop=/usr/bin/podman stop -t 10 redmine_server01 (code=exited, status=0/SUCCESS)
  Process: 15510 ExecStart=/usr/bin/podman start -a redmine_server01 (code=killed, signal=TERM)
 Main PID: 15510 (code=killed, signal=TERM)
~中略~
# podman ps
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES
# systemctl start redmine_container.service
# systemctl status redmine_container.service
● redmine_container.service - Redmine Podman container
   Loaded: loaded (/etc/systemd/system/redmine_container.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-07-08 02:56:13 JST; 2s ago
  Process: 15686 ExecStop=/usr/bin/podman stop -t 10 redmine_server01 (code=exited, status=0/SUCCESS)
 Main PID: 15862 (podman)
    Tasks: 9 (limit: 11528)
   Memory: 24.6M
   CGroup: /system.slice/redmine_container.service
           mq15862 /usr/bin/podman start -a redmine_server01
~中略~
# podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS            PORTS                   NAMES
0065ee94abdf  docker.io/library/redmine:latest  /docker-entrypoin...  15 minutes ago  Up 5 seconds ago  0.0.0.0:3000->3000/tcp  redmine_server01
前回の記事の保存手順と合わせると、プロジェクト管理を始めたRedmineコンテナをtarで圧縮して別サーバへ転送し、tarファイルをコンテナ起動して別環境で利用するということも可能になります。
最後に本記事の元ネタを貼っておきます。大変参考になりました。
とりあえず、一旦この記事の連載は終わりにします。次はマルチノードで起動するツールをコンテナで起動させてみるか、もしくはbuildahの記事を書きたいです。
ここまでお読み頂きありがとうございました。
