RHEL環境の基本的な「仮想化」を実行したいと思います。これは、たとえばを指すハードコアパスを使用してバイナリをいくつか実行する必要があるという事実から生じています。 /etc/conf
ディレクトリ。同じディレクトリに配置された異なる競合する構成を実際に必要とするいくつかの異なるバイナリがあります。
したがって、/etc/conf
からconfを読み取るアプリケーションAを実行し、/mnt/etc/conf
からconfを読み取るアプリケーションBを実行したいのですが、実際には/etc/conf
から読み取っていると「信じています」。現在の/
ディレクトリの場所を/mnt
に「変更」するスクリプト。
この種の操作では、fakechrootで実行できると思いますが、もう利用できません。あれは正しいですか?この機能を提供するためのより良い方法はありますか?
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はデフォルトで、ホスト上のファイアウォールとルーティングテーブルも変更しようとすることに注意してください。