podmanで遊び始めたので、
備忘録も兼ねて基本的なコマンドを書いておきます。
実行環境のOSはRed Hat Enterprise Linux 8.0です。
サクッと書いていきます。
なお詳細な内容はRed Hat社の公式マニュアルをご参照ください。
podman触るなら公式マニュアル読むのが最良の選択だと思います。
まだ機械翻訳なので「イメージ」のことを「画像」と翻訳したりとちょっとおもしろいですが、全体的にちゃんと読めるようになっていました。
###コンテナ関連モジュールのインストール
RHEL8からは、podmanを始めとしたコンテナ関連ツールを一括でインストールできます。
# yum module install -y container-tools
yum module
コマンドはRHEL8より新しく導入されたAppStreamリポジトリに登録されているモジュールに対して操作できるように、新規追加されたコマンドです。このモジュールをインストールすることにより、podman、buildah、skopeo、runcなどのコンテナ管理に必要なツールを一括でインストールできます。モジュールの詳細は以下のコマンドで確認できます。
# yum module info container-tools:rhel8
これで操作までの準備は完了です。
###レジストリからイメージを取得する
podman pull
コマンドで指定レジストリからイメージをローカルに持ってきます。なお取得先レジストリはデフォルトでdocker.io、registry.redhat.io、quay.ioの三つから選べます。このうちregistry.redhat.ioはあらかじめログインしなければレジストリにアクセスできませんので、ご注意ください。
# podman login registry.redhat.io
Authenticating with existing credentials...
Existing credentials are invalid, please enter valid username and password
Username: <Red Hat PortalサイトのログインID>
Password:
Login Succeeded!
# podman pull registry.redhat.io/ubi8/ubi-init
registry.redhat.io/ubi8/ubi-initはsystemdを利用できるRed Hat社の標準コンテナです。バージョンはRHEL8です。他にも軽量なregistry.redhat.io/ubi8/ubi-minimalなど多数の標準コンテナが用意されており、これをもとにコンテナ開発を行い、ガイドラインの枠内で自由にイメージを共有・配布することができるようになっています。詳細は上記マニュアルのUBIイメージの項をご参照ください。
取得したらローカルで利用できるイメージ一覧をpodman images
で表示します。
# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.redhat.io/ubi8/ubi-init latest 8c376a94293d 2 months ago 231 MB
###ローカルイメージの基本情報を確認
podman inspect
コマンドでローカルに存在するイメージの基本的な情報を確認することができます。
# podman inspect registry.redhat.io/ubi8/ubi-init
###イメージをマウントする
さらに詳細に調査したい場合は、podman mount
コマンドでイメージをマウントしてコンテナ内のファイルシステムの内容を確認することができます。
# podman run -d --name RHEL8 registry.redhat.io/ubi8/ubi-init
a27180493792cbd44c3a9570479a793a54dc6978402cf57d2e9c979caf0f07e9
# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a27180493792 registry.redhat.io/ubi8/ubi-init:latest /sbin/init 4 seconds ago Up 4 seconds ago RHEL8
# podman mount a27180493792
/var/lib/containers/storage/overlay/de43908a8238604d28cf50f2dbd704378bf8506d6d613b6f740898078dc14c67/merged
# ls /var/lib/containers/storage/overlay/de43908a8238604d28cf50f2dbd704378bf8506d6d613b6f740898078dc14c67/merged
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# cat /var/lib/containers/storage/overlay/de43908a8238604d28cf50f2dbd704378bf8506d6d613b6f740898078dc14c67/merged/etc/systemd/system/default.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
さらにrpm
コマンドでマウントポイントをルートディレクトリとして指定して実行すると、コンテナ内でインストールされているパッケージの内容を確認できます。
# rpm -qa --root=/var/lib/containers/storage/overlay/de43908a8238604d28cf50f2dbd704378bf8506d6d613b6f740898078dc14c67/merged/ | head -3
tzdata-2019a-1.el8.noarch
redhat-release-8.0-0.44.el8.x86_64
filesystem-3.8-2.el8.x86_64
# rpm -qa --root=/var/lib/containers/storage/overlay/de43908a8238604d28cf50f2dbd704378bf8506d6d613b6f740898078dc14c67/merged/ | wc -l
181
###リモートでコンテナの情報を確認する
podman pull
でイメージをローカルへ取得する前に、コンテナイメージを調べるにはskopeo inspect
コマンドです。
# skopeo inspect docker://registry.redhat.io/ubi8/ubi-init
なんでもかんでもぽいぽいプルしちゃうとローカルがイメージだらけになっちゃうので、情報を見たいだけならばskopeo inspect
を利用したほうがよいと思います。
RHEL8でDockerを使用したい場合
最後となりますが、podmanはdockerとほぼ同じ構成で各コマンドを実行できるように設計されています。さらにpodman-docker
パッケージをインストールしてからdocker
と入力するとpodman
コマンドを打ったことになるようにエイリアス設定されます。
# yum -y install podman-docker
# docker images
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.redhat.io/ubi8/ubi-init latest 8c376a94293d 2 months ago 231 MB
なおRHEL8では、dockerは標準でインストールされていないので、必要であればインストールして利用することになります。(当然ですが)docker自体のサポートはしていないのでご注意ください。
試してませんが、podman-dockerとdockerの両方をインストールしたらどうなるんですかね(;^ω^)
###感想
では、長くなりすぎるのもどうかと思うので今回はこれくらいで。次回はイメージへのタグのつけ方やコンテナイメージの保存と別のサーバなどへ配布する方法をまとめてみます。もし本記事でなにかあればご指摘やアドバイスもらえると嬉しいです。なにせまだpodmanの情報は少ないので、情報交換できるとありがたいです。
この連載記事はsystemdでredmineコンテナをサービス管理できるようになるとこまでは書きたいと思ってます。気が向いたら赴くままに書き連ねていきます。