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の記事を書きたいです。
ここまでお読み頂きありがとうございました。