「インストール - Podman」の版間の差分

ナビゲーションに移動 検索に移動
536行目: 536行目:
Podmanの動作を確認するため、テストイメージをダウンロードして実行する。<br>
Podmanの動作を確認するため、テストイメージをダウンロードして実行する。<br>
   podman run hello-world
   podman run hello-world
<br><br>
== Podmanコマンド ==
==== ログイン ====
podman loguin -u <ユーザ名> -v <登録するURL>
# 例: Docker Hubにログインする場合
podman login -u <Docker Hubのユーザ名> -v https://docker.io
podman login -u <Docker Hubのユーザ名> -v https://index.docker.io/v2/
<br>
認証情報は、/run/user/$UID/containers/auth.jsonファイルに保存される。<br>
<br>
Docker Hubにログインすることにより、Podmanコマンドで[https://hub.docker.com Docker Hub]からイメージを検索およびダウンロードすることができる。<br>
<br>
==== イメージの検索 ====
[https://quay.io/search Quay] (デフォルト) および他のWebサイト (登録している場合) からイメージを検索およびダウンロードする。<br>
podman search <イメージ名>
<br>
==== イメージのダウンロード ====
podman pull <イメージ名>
# 例: Ubuntuの公式イメージをダウンロード
podman pull ubuntu
# 例: Docker HubからApache2のイメージをダウンロード
podman pull docker.io/httpd:latest
<br>
==== ダウンロードしたイメージの一覧の表示 ====
podman images
<br>
==== イメージの削除 ====
podman image rm <イメージID>
<br>
Podmanイメージを全て削除する。<br>
podman image rm -f $(podman images -q)
<br>
==== コンテナの削除 ====
podman container rm <コンテナID>
<br>
Podmanコンテナを全て削除する。<br>
podman container rm -f $(podman container ps -a -q)
<br>
==== コンテナの作成 ====
* <code>-d</code> または <code>--detach</code>
*: コンテナをバックグラウンドで実行して、コンテナIDを表示する。
* <code>-i</code> または <code>--interactive</code>
*: アタッチされていない場合でも、STDINを開く。
* <code>-t</code> または <code>--tty</code>
*: コンテナに擬似TTYを割り当てる。
<br>
# コンテナを作成して、フォアグラウンドで起動
podman run --name <コンテナ名> <イメージ名>
# <code>-d</code>オプションを付加して、コンテナをバックグラウンドで起動
# <code>-t</code>オプションを付加して、コンテナに擬似ttyを割り当てる
podman run -dt --name <コンテナ名> <イメージ名>
# 例: イメージ名はopensuse、コンテナ名はsuse01として起動
podman run -dit --name suse01 opensuse /bin/bash
# 例: イメージ名はhttpd、コンテナ名はwwwとして起動
#    また、コンテナ内の80番ポートをホスト側の8080番にポートフォワーディングしている
podman run -dt -p 8080:80 --name www httpd
<br>
==== コンテナのプロセス確認 ====
# 動作中のコンテナのみ表示
podman ps
# 全てのコンテナを表示
podman ps -a  または podman ps --all
<br>
==== コンテナの起動 ====
podman start <コンテナ名>  または  podman start <コンテナID>
<br>
停止中のコンテナをインタラクティブに実行することもできる。<br>
* <code>-a</code>オプション
*: コンテナにアタッチすることを指定する。
*: これにより、コンテナの標準入力、標準出力、標準エラー出力がホストのターミナルに接続される。
* <code>-i</code>オプション
*: インタラクティブモードを有効にする。
*: これにより、コンテナの標準入力に対してコマンドを入力できる。
<br>
podman start -ai <コンテナ名>  または  podman start -ai <コンテナID>
<br>
==== コンテナの再起動 ====
podman restart <コンテナ名>  または  podman restart <コンテナID>
<br>
==== コンテナの停止 ====
コンテナが停止している時は、STATUSでExitedとなる。<br>
podman stop <コンテナ名>  または  podman stop <コンテナID>
<br>
==== コンテナのログ確認 ====
例えば、コンテナが起動せずに失敗する (exited) する場合、ログを確認する。<br>
podman logs <コンテナID>
<br>
==== コンテナに名前を付ける ====
podman commit <コンテナID> <任意のコンテナ名>
<br>
==== コマンドの実行 ====
起動中のコンテナにコマンドを実行する。<br>
コンテナ内で追加のタスクを実行したり、シェルを起動する場合等に使用する。<br>
<br>
execは複数の異なるコマンドを同時に実行できる。<br>
<br>
メインプロセスとは独立して動作して、execで起動したプロセスが終了してもコンテナは継続して実行される。<br>
これは、デバッグやメンテナンス作業に便利である。<br>
podman exec -it <コンテナ名> <コンテナ内で実行可能なコマンド>
# 例: コンテナ名 suse01, コマンド /bin/bash を実行する
podman exec -it suse01 /bin/bash
<br>
==== コンテナにアタッチ ====
起動中のコンテナにアタッチする。<br>
(実行中のコンテナのメインプロセスに接続する)<br>
<br>
attachは、1つのプロセスにのみ接続できる。<br>
<br>
コンテナの標準入力、標準出力、標準エラー出力にアクセスすることができる。<br>
<u>ただし、コンテナのメインプロセスが終了すると、コンテナも停止することに注意する。</u><br>
<br>
一般的に、既に実行中のコンテナの出力を監視、または、対話的に操作する場合等に使用する。<br>
podman attach <コンテナ名>
# 例: 標準入力を無効にしてアタッチする
# コンテナの出力のみを見る場合に有用である
podman attach --no-stdin my_container
# 例: デタッチするためのキーの組み合わせを指定する
# デフォルトは、[Ctrl] + [P]キー および [Ctrl] + [Q]キーである
podman attach --detach-keys="ctrl-d" my_container
# 例: 最後に起動したコンテナにアタッチする
podman attach --latest
<br>
==== コンテナとホスト間のファイルコピー ====
ホストからコンテナにファイルをコピーする。<br>
podman cp <ホストのファイルパス> <コンテナ名>:<コンテナ内の保存先のパス>
# または
podman cp <ホストのファイルパス> <コンテナID>:<コンテナ内の保存先のパス>
# 例:
podman cp sample.txt my_suse:/tmp  # コンテナを実行
podman exec -it my_suse /bin/bash  # cd /tmp && lsコマンドを実行してファイルを確認
<br>
コンテナからホストにファイルをコピーする。<br>
podman cp <コンテナ名>:<コンテナ内のファイルパス> <ホストの保存先のパス>
# または
podman cp <コンテナID>:<コンテナ内のファイルパス> <ホストの保存先のパス>
# 例:
podman cp my_suse:/tmp/sample.txt ~/Downloads
<br>
==== ボリュームのマウント ====
コンテナにボリュームをマウントする。<br>
<br>
<code>-v</code>オプションの代わりに<code>--mount</code>オプションを付加することが推奨されている。<br>
<code>--mount</code>オプションは、キーバリュー形式で各要素が指定できる。<br>
podman container run -it --mount type=<volume, bind, tmpfsのいずれかを指定>,src=<ボリューム名>,dst=<コンテナ内のパス> <コンテナ名/イメージ名:タグ名>
<br>
<code>--rm</code>オプションを付加することにより、匿名ボリュームの場合はコンテナ停止と同時にボリュームも破棄される。<br>
名前付きボリュームの場合は、<code>--rm</code>オプションを付加しても、ボリュームは破棄されない。<br>
<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ mountオプションについて
|-
! style="background-color:#66CCFF;" | mountオプションで指定できる種類
! style="background-color:#66CCFF;" | 説明
|-
| style="text-align: center;" | type || <code>volume</code>、<code>bind</code>、<code>tmpfs</code>を指定する。
|-
| style="text-align: center;" | src || <code>source</code>と記述することもできる。<br><br>匿名ボリュームの場合は、省略する。<br>名前付きボリュームの場合は、その名前を記述する。<br>バインドマウントの場合は、ホスト側のディレクトリを指定する。
|-
| style="text-align: center;" | dst || <code>destination</code>、<code>target</code>と記述することもできる。<br><br>コンテナ側のディレクトリを指定する。
|}
</center>
<br>
* 匿名ボリューム
*: ホスト側に/var/lib/podman/volumesディレクトリ内に領域が確保されて、指定したコンテナ内のディレクトリと共有される。
*: 識別のためにハッシュ値が振られており、同一のネットワークからそのハッシュ値でアクセスすることができる。
*: <code>podman container run --mount type=volume,dst=<コンテナ内のディレクトリパス  例: /tmp/sample> <コンテナ名/イメージ名:タグ名></code>
*: <br>
* 名前付きボリューム
*: 匿名ボリュームと同様、ホスト側には/var/lib/podman/volumesディレクトリ内に領域が確保されて、指定したコンテナ内のディレクトリと共有される。
*: ホスト名を指定するため、同一のネットワークからそのホスト名でアクセスすることができる。
*: <code>podman container run --mount type=volume,src=<ボリューム名>,dst=<ホスト名>:<コンテナ内のディレクトリパス  例: /tmp/sample> <コンテナ名/イメージ名:タグ名></code>
*: <br>
* バインドマウント
*: <u>ホスト側のカレントディレクトリ内</u>にある指定したディレクトリとコンテナ側の指定したディレクトリが共有される。
*: <code>podman container run --mount type=bind,src=<ホスト側のディレクトリパス  例: $PWD/host-sample>,dst=<コンテナ内のディレクトリパス  例: /tmp/container-sample> <コンテナ名/イメージ名:タグ名></code>
<br>
ホスト側がSELinuxを使用している場合は、ボリュームのマウントに<code>:Z</code>オプションを付加する必要がある。<br>
これは、Podmanにボリュームのコンテンツをコンテナ内のラベルと一致するようにラベルを変更するよう指示するものである。<br>
podman run -d --rm -v /<ホスト側のディレクトリのパス 1>/:/<コンテナ側のディレクトリのパス 1>:Z -v /<ホスト側のディレクトリのパス 2>/:/<コンテナ側のディレクトリのパス 2>:Z
<br>
==== ボリュームのアンマウント ====
podman volume umount <ボリューム名>
<br>
特定のコンテナにマウントされているボリュームをアンマウントする。<br>
podman volume umount <コンテナID>
<br>
==== ボリュームの削除 ====
podman volume rm <ボリューム名>
<br>
使用されていないボリュームを削除する。<br>
podman volume prune
<br>
ボリュームを全て削除する。<br>
podman volume rm $(podman volume ls -q)
<br>
==== セキュリティオプション ====
podman run --security-opt <オプション> -d <イメージ名>
<br>
AppArmorプロファイルの作成手順を、以下に示す。<br>
* カスタムAppArmorプロファイルの作成
*: AppArmorプロファイルは、任意のプログラムが必要とする全てのファイルアクセス許可を明示的に許可する必要がある。
* プロファイルの保存と読み込み
*: 作成したAppArmorプロファイルをホストPCに保存して、AppArmorに読み込ませる。
*: 一般的に、/etc/apparmor.dディレクトリにプロファイルを配置して、<code>apparmor_parser</code>コマンドでプロファイルを読み込むことで行う。
* Podmanコンテナの起動時にプロファイルを指定する
*: コンテナを起動する際に、<code>--security-opt</code>オプションを付加して、カスタムAppArmorプロファイルを指定する。
*: 例: my_php_fpm_profileという名前のプロファイルを適用する場合
*: <code>podman run --security-opt apparmor=<AppArmorプロファイル名> -d <イメージ名></code>
<br>
==== コンテナのバックアップ ====
コンテナをイメージ化してバックアップする。<br>
<br>
# コンテナを新しいメージとして作成する。
#: <code>podman commit <コンテナID> <任意のイメージ名></code>
# 作成したイメージをファイルとして保存する。
#: <code>podman save <上記で入力した任意のイメージ名> > <バックアップするファイル名>.tar</code>
<br>
==== バックアップしたコンテナの復元 ====
podman load -i <バックアップしたファイル名>.tar
<br>
正常に復元されているかどうかを確認する。<br>
podman images
<br>
==== Podmanに関するプロセスを全て終了する ====
<code>pkill</code>コマンドは、Linuxの基本コマンドであり、プロセスの名前や他の属性に基づいてプロセスを終了するために使用する。<br>
これにより、<u>podman</u>という名前のプロセス (Podmanが起動しているプロセス) を全て終了することができる。<br>
<br>
pkill podman
<br>
例えば、問題が発生した場合や特定の操作が必要な場合、全てのPodmanプロセスを終了させる手段として使用されることがある。<br>
ただし、注意が必要であり、実行中のコンテナが強制的に停止される可能性がある点に留意する必要がある。<br>
<br><br>
<br><br>


案内メニュー