「Buildah」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎インストール: 情報を更新)
(関連記事を同期)
 
(同じ利用者による、間の2版が非表示)
5行目: 5行目:
 
{{Related|Cgroups}}
 
{{Related|Cgroups}}
 
{{Related|Docker}}
 
{{Related|Docker}}
  +
{{Related|Podman}}
 
{{Related|Linux Containers}}
 
{{Related|Linux Containers}}
 
{{Related articles end}}
 
{{Related articles end}}
30行目: 31行目:
   
 
== 設定 ==
 
== 設定 ==
=== 特権コンテナの生成のサポートを有効化 (任意) ===
+
=== 特権のないコンテナの構築サポートを有効にする ===
Buildah を使って''非特権''コンテナを生成したい場合、以下の設定が必要です。
 
   
  +
Buildah を使用して ''特権のない'' コンテナを構築したいユーザーは、''初めて podman を実行する前に'' 追加のセットアップ手順を完了する必要があります。
まず、カーネルに'''ユーザー名前空間'''のサポートが必要です ({{ic|CONFIG_USER_NS}} が有効になっているカーネル)。Arch Linux のカーネルは全て {{ic|CONFIG_USER_NS}} に対応しています。しかしながら、セキュリティ上の問題から、デフォルトの Arch カーネルではユーザー名前空間は ''root'' ユーザーでのみ有効になっています。
 
   
  +
{{Note|特権のないコンテナの実行専用のシステムを構築している場合は、ユーザーを追加する前に次の手順に従ってください。こうすることで、{{ic|/etc/subuid}} と {{ic|/etc/subgid}} を編集する必要がなくなります。''useradd'' が自動的に編集してくれるので、必要なのは、root として {{ic|touch /etc/subgid}} と {{ic|touch /etc/subuid}} を実行するだけで済みます。}}
通常ユーザーで非特権コンテナを実行するために ''sysctl'' 設定 {{ic|kernel.unprivileged_userns_clone}} を有効にしてください。{{ic|1=sysctl kernel.unprivileged_userns_clone=1}} を実行することで実行中のセッションで有効にしたり、{{man|5|sysctl.d}} で永続的に有効化できます。
 
   
そして、{{ic|/etc/subuid}} と {{ic|/etc/subgid}} を作成して、コンテナを実行るユーザーのコンテナ化する uid/gid の組み合わせのマッピングを作ります。root ユーザー ( systemd システムユニット) と {{ic|buildah}} ユーザーの例:
+
最後に、{{ic|/etc/subuid}} と {{ic|/etc/subgid}} の両方を作成して、コンテナを実行できユーザーのコンテナ化された UID/GID ペアへのマッピングを含めます。[https://github.com/containers/libpod/blob/master/docs/tutorials/rootless_tutorial.md#etcsubuid-and-etcsubgid-configuration] 以下の例は、root ユーザー (および systemd システムユニット) とユーザー {{ic|buildah}} の例です。:
   
 
{{hc|/etc/subuid|
 
{{hc|/etc/subuid|
root:100000:65536
 
 
buildah:100000:65536
 
buildah:100000:65536
 
}}
 
}}
   
 
{{hc|/etc/subgid|
 
{{hc|/etc/subgid|
root:100000:65536
 
 
buildah:100000:65536
 
buildah:100000:65536
  +
}}
  +
  +
上記の変更を適用する前に podman を実行した場合、特権のないユーザーとしてイメージをプルしようとするとエラーが発生します。これを修正するには、{{ic|podman system Migrate}} を実行します。
  +
  +
すべてがうまくいった場合、ログアウトして再度ログインした後、{{ic|buildah Images}} はエラーにならないはずです
  +
  +
{{Note|{{ic|/run/user/0}} へのアクセスでエラーが発生した場合は、''su'' を使用してテストに使用しているユーザーになっている可能性があります。''su'' 以降はそのユーザーとしてログインする必要があります。{{ic|--login}} フラグを指定しないと、{{ic|XDG_RUNTIME_DIR}} やその他の環境変数が正しい値に設定されません。}}
  +
  +
== トラブルシューティング ==
  +
  +
=== WARN[0000] "/" is not a shared mount, this could cause issues or missing mounts with rootless containers ===
  +
  +
ルートレスとして実行されている Buildah/Podman はバインドマウントが共有されることを予期しています。プライベートに設定されているかどうかを確認します。
  +
  +
{{hc|$ findmnt -o PROPAGATION /|
  +
PROPAGATION
  +
private
  +
}}
  +
  +
この場合、{{man|8|mount|Shared subtree operations}} を参照し、マウントを '''一時的に''' 次のものと共有するように設定します。
  +
  +
# mount --make-shared /
  +
  +
これを '''永続的''' に設定するには、[[fstab#使用法|/etc/fstab]] を編集し、目的のマウントに ''shared'' オプションを追加して再起動します。次のようなエントリが表示されます。
  +
  +
{{hc|/etc/fstab|2=
  +
# <device> <dir> <type> <options> <dump> <fsck>
  +
UUID=0a3407de-014b-458b-b5c1-848e92a327a3 / ext4 defaults,shared 0 1
 
}}
 
}}
   

2024年2月14日 (水) 04:15時点における最新版

関連記事

BuildahOpen Container Initiative (OCI) コンテナイメージの生成を補助するツールです。Buildah パッケージが提供するコマンドラインツールで以下のことができます:

  • スクラッチから、または既存イメージからコンテナを作成
  • 動作中のコンテナから、あるいは Dockerfile からイメージを作成
  • OCI イメージ形式や伝統的な docker イメージ形式でイメージを作成可能
  • 動作中のコンテナのルートファイルシステムをマウントして操作
  • 動作中のコンテナのルートファイルシステムをアンマウント
  • コンテナのルートファイルシステムの中身をファイルシステムレイヤーとして使用して新しいイメージを作成
  • 動作中のコンテナあるいはイメージを削除
  • ローカルコンテナの名前を変更

コンテナの生成で一番有名な対抗アプリケーションは docker です。Buildah はコンテナの実行には使えません。実行したい場合は podman があります。

インストール

buildah および podman パッケージを インストール して下さい、または開発バージョンの場合は buildah-gitAUR

非 root ユーザー として実行する場合は、パフォーマンスとストレージスペースの効率を向上させるために、fuse-overlayfs もインストールします。

ノート: 公式 buildah インストールガイド は、ここでは、podman をインストールする前に、fuse-overlayfs をインストールするようアドバイスされる podman セクションを指します。

設定

特権のないコンテナの構築サポートを有効にする

Buildah を使用して 特権のない コンテナを構築したいユーザーは、初めて podman を実行する前に 追加のセットアップ手順を完了する必要があります。

ノート: 特権のないコンテナの実行専用のシステムを構築している場合は、ユーザーを追加する前に次の手順に従ってください。こうすることで、/etc/subuid/etc/subgid を編集する必要がなくなります。useradd が自動的に編集してくれるので、必要なのは、root として touch /etc/subgidtouch /etc/subuid を実行するだけで済みます。

最後に、/etc/subuid/etc/subgid の両方を作成して、コンテナを実行できる各ユーザーのコンテナ化された UID/GID ペアへのマッピングを含めます。[1] 以下の例は、root ユーザー (および systemd システムユニット) とユーザー buildah の例です。:

/etc/subuid
buildah:100000:65536
/etc/subgid
buildah:100000:65536

上記の変更を適用する前に podman を実行した場合、特権のないユーザーとしてイメージをプルしようとするとエラーが発生します。これを修正するには、podman system Migrate を実行します。

すべてがうまくいった場合、ログアウトして再度ログインした後、buildah Images はエラーにならないはずです

ノート: /run/user/0 へのアクセスでエラーが発生した場合は、su を使用してテストに使用しているユーザーになっている可能性があります。su 以降はそのユーザーとしてログインする必要があります。--login フラグを指定しないと、XDG_RUNTIME_DIR やその他の環境変数が正しい値に設定されません。

トラブルシューティング

WARN[0000] "/" is not a shared mount, this could cause issues or missing mounts with rootless containers

ルートレスとして実行されている Buildah/Podman はバインドマウントが共有されることを予期しています。プライベートに設定されているかどうかを確認します。

$ findmnt -o PROPAGATION /
PROPAGATION
private

この場合、mount(8) § Shared subtree operations を参照し、マウントを 一時的に 次のものと共有するように設定します。

# mount --make-shared /

これを 永続的 に設定するには、/etc/fstab を編集し、目的のマウントに shared オプションを追加して再起動します。次のようなエントリが表示されます。

/etc/fstab
# <device>                                <dir> <type> <options> <dump> <fsck>
UUID=0a3407de-014b-458b-b5c1-848e92a327a3 /     ext4   defaults,shared   0      1

参照