web-dev-qa-db-ja.com

RHEL / CentOS7で偽のchrootを実行する方法

RHEL環境の基本的な「仮想化」を実行したいと思います。これは、たとえばを指すハードコアパスを使用してバイナリをいくつか実行する必要があるという事実から生じています。 /etc/confディレクトリ。同じディレクトリに配置された異なる競合する構成を実際に必要とするいくつかの異なるバイナリがあります。

したがって、/etc/confからconfを読み取るアプリケーションAを実行し、/mnt/etc/confからconfを読み取るアプリケーションBを実行したいのですが、実際には/etc/confから読み取っていると「信じています」。現在の/ディレクトリの場所を/mntに「変更」するスクリプト。

この種の操作では、fakechrootで実行できると思いますが、もう利用できません。あれは正しいですか?この機能を提供するためのより良い方法はありますか?

1
Niemand

Dockerコンテナを使用してみてください。これを行う最も簡単な方法(Dockerfile構文を学ぶ必要がないようにするため)は、dockerをインストールしてからdocker run -it centos:<version>(これらのユーティリティが記述されているRHELのバージョンはどこですか)を内部からインストールすることです。コンテナーは、すべてのバイナリーと実行可能ファイルを必要な方法でセットアップし、シェル/コンテナーを終了し、docker psを使用してコンテナーIDを見つけます。

例えば:

[root@website ~]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS                  PORTS                   NAMES
42f454cc1c71        centos:latest               "/bin/bash"              About an hour ago   Up About an hour                                sick_davinci

次に、docker commitを使用して画像を保存します。

docker commit 42f454cc1c71 baseImage

次に、firstUtil(またはそれが呼ばれるもの)を実行するには:

docker run -it --rm -v /srv/configs/firstUtil:/etc/conf baseImage /path/to/firstUtil

次に、secondUtilを実行するには:

docker run -it --rm -v /srv/configs/secondUtil:/etc/conf baseImage /path/to/secondUtil

などなど

上記の各docker runコマンドでは、設定したイメージに基づいてコンテナ内でコマンドが実行され、--rmにより、指定されたコマンドが終了するとコマンドが破棄されます。 --rmは、ユーティリティが/etc/conf内の何かを変更しない限り、ユーティリティの1回の実行が次の実行に影響を与えないようにするために役立ちます。これは、コマンドが実行されるたびに、コンテナ内で何かが初めて実行されるためです。

入力が簡単な場合は、これらのdocker runコマンドをスクリプトまたはシェルエイリアスに入れることができます。

Dockerはデフォルトで、ホスト上のファイアウォールとルーティングテーブルも変更しようとすることに注意してください。

1
Bratchley