Distrobox
Distrobox は、ホストとの緊密な統合を提供しながら、ホストと異なる Linux のコンテナ化されたバージョンをインストールし、あるディストリビューションで設計されたバイナリを別のディストリビューションで実行することを可能にするコンテナのラッピングレイヤーです。
Distrobox 自体はコンテナマネージャーではなく、Podman または Docker に依存してコンテナを作成します。
Distrobox のドキュメントから:
- ターミナル内の任意の Linux ディストリビューションを使用してください。ソフトウェアのバックワードおよびフォワード互換性を有効にし、好きなディストリビューションを自由に使用することができます。Distrobox は、選択した Linux ディストリビューションを使用して、podman または docker を使用してコンテナを作成します。作成されたコンテナは、ホストと緊密に統合され、ユーザーの HOME ディレクトリ、外部ストレージ、外部 USB デバイス、グラフィカルアプリ (X11/Wayland)、およびオーディオの共有が可能になります。
目次
セキュリティへの影響
Distrobox の主な目的は、ホストからコンテナをサンドボックス化することに焦点を当てていない(プロジェクトの緊密な統合の性質上、これは不可能)ため、Distrobox 内で実行されるコンテナは、ホームフォルダーおよび他のいくつかの場所にフルアクセスします。
サンドボックス化された運用モードは現在計画段階にあり、進行状況はこちらでトラッキングできます。
デフォルトで Docker はコンテナを root として実行し、rootful コンテナはホストのファイルシステムに無制限のアクセスを持つため、Docker よりも Podman を使用することを推奨します。Rootless Docker は現在動作していないが、作業中です。
インストール
ルートアクセス権を持つ場合
まず、Podman または Docker のいずれかの ページに従い、Hello World コンテナをインストールして実行できることを確認してください。
パッケージをインストールするには、distrobox または distrobox-gitAUR のいずれかを選択してください。
ルートアクセス権がない場合/イミュータブルなファイルシステムの場合
以下の両方を実行して、CURL を使用して、ホームフォルダに Distrobox と Podman をインストールします。
Distrobox
$ curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local
Podman
$ curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/extras/install-podman | sh -s -- --prefix ~/.local
以下の場所を $PATH
に追加します。ユーザーごとの環境変数を設定します:
$HOME/.local/bin $HOME/.local/podman/bin
コンテナ内でグラフィカルアプリケーションの実行に問題がある場合は、xorg-xhost をインストールし、以下を ~/.bashrc
、~/.profile
、または ~/.xinitrc
に追加する必要があります:
xhost +si:localuser:$USER
アンインストール
Distrobox は、ルートレスインストールのためのアンインストールスクリプトを提供しています。実行するには、以下を実行します。
$ curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/uninstall | sh -s -- --prefix ~/.local
使用方法
新しいコンテナを作成するには、以下を実行します。
$ distrobox create -n name
インストールされたコンテナをリスト表示するには、以下を実行します。
$ distrobox list
インストールされたコンテナとやり取りするには、以下を実行します。
$ distrobox enter name
または、コンテナに直接コマンドを送信することもできます。
$ distrobox enter name -- command-to-execute
実行中のコンテナを停止するには、以下を実行します。
$ distrobox stop name
コンテナを削除するには、以下を実行します。
$ distrobox rm name
特定のディストリビューションをコンテナにインストールするには、以下を実行します(この例では Ubuntu です)。
$ distrobox create --image ubuntu:22.04
インストールは以下のように完全にカスタマイズできます(この例では、ルートアクセスを持つ Gentoo を実行する test という名前のコンテナです)。
$ distrobox create -i docker.io/gentoo/stage3:latest -n test --root
コンテナがホストにルートアクセスを持つ必要がある場合、sudo distrobox
よりも --root
フラグを使用することをお勧めします。
非共有モード
Distrobox では、ユーザーがファイルシステム上の特定の場所を unshare
できるようになりました。デフォルトモードでは、devsysfs
、ipc
、netns
、process
、$HOME
の共有が作成されます。および Application access
新しいコンテナを作成するときに、以下にリストされているコマンドを使用して、それらの一部を unshare
することを選択できるようになりました。
シェア | コマンド | 用途 |
---|---|---|
devsysfs | --unshare-devsysfs |
ホストデバイスとホストの sysfs ディレクトリを共有しない |
ipc | --unshare-ipc |
ipc 名前空間をホストと共有しない |
netns | --unshare-netns |
ネットワーク名前空間をホストと共有しない |
process | --unshare-process |
プロセス名前空間をホストと共有しない |
All | --unshare-all |
すべての unshare フラグをアクティブにします
|
$HOME
と Application access
の共有を解除することはできません。これらは必須であり、これらがなければ Distrobox は動作できません。
設定
Distrobox は、設定ファイルを使用するか、環境変数を使用することで、2つの方法で設定することができます。
設定ファイル
Distrobox は、以下の場所で設定ファイルを確認します。重要度が最も低いものから最も高いものへ:
- /usr/share/distrobox/distrobox.conf
- /usr/etc/distrobox/distrobox.conf
- /etc/distrobox/distrobox.conf
- ${HOME}/.config/distrobox/distrobox.conf
- ${HOME}/.distroboxrc
設定ファイルの例は以下の通りです:
container_always_pull="1" container_generate_entry=0 container_manager="docker" container_image_default="registry.opensuse.org/opensuse/toolbox:latest" container_name_default="test-name-1" container_user_custom_home="$HOME/.local/share/container-home-test" container_init_hook="~/.local/distrobox/a_custom_default_init_hook.sh" container_pre_init_hook="~/a_custom_default_pre_init_hook.sh" non_interactive="1" skip_workdir="0"
環境変数
以下の変数が利用可能で、ユーザーごとの環境変数を使用して設定する必要があります:
DBX_CONTAINER_ALWAYS_PULL DBX_CONTAINER_CUSTOM_HOME DBX_CONTAINER_IMAGE DBX_CONTAINER_MANAGER DBX_CONTAINER_NAME DBX_CONTAINER_ENTRY DBX_NON_INTERACTIVE DBX_SKIP_WORKDIR