私のワークステーション上でローカルに分離された開発環境を編成するアプローチについて説明します。 このアプローチは、次の要因の影響を受けて開発されました。
- 言語が異なれば、必要な IDE とツールチェーンも異なります。
- プロジェクトが異なれば、異なるバージョンのツールチェーンとライブラリを使用する場合があります。
このアプローチは、ラップトップまたはワークステーション上でローカルに実行される LXD コンテナ内で開発し、グラフィック出力をホストにリダイレクトすることです。
構成例 Ubuntuの20.04.
オプションとその理由についての考察は、記事の最後に記載されています。
1.LXDのインストール
В Ubuntuの20.04 LXD は deb パッケージとしてインストールできなくなり、スナップ経由でのみインストールできます。
$ snap install lxd
インストール後、初期化を実行する必要があります。
$ lxd init
変更する唯一のパラメータは storage bakend
- 私が使う dir
最も単純なものとして。 写真やコピーを使用していないため、警告は
同様に、ディレクトリ バックエンドは最後の手段として検討してください。
すべての主要な LXD 機能をサポートしていますが、実行できないため非常に遅く非効率的です。
インスタント コピーまたはスナップショットを使用するため、毎回インスタンスのストレージ全体をコピーする必要があります。
2.LXDプロファイルの設定
default
次の変更が加えられます。
$ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0
— コンテナ内のアプリケーションがホスト X11 サーバーと対話できるようにするため。$ lxc profile set default environment.DISPLAY :0
- 環境変数がDISPLAY
コンテナに正しくインストールされました。$ lxc profile set default raw.idmap "both 1000 1000"
- 正しいために識別子のマッピング .
3. コンテナの作成と設定
イメージに基づいてコンテナを作成する images:ubuntu/20.04
:
$ lxc launch images:ubuntu/20.04 dev1
リポジトリからの画像の方が好きです images:
画像名に。 Ubuntu リポジトリのイメージに基づいてコンテナーを作成するには、次のように実行できます。 $ lxc launch ubuntu/20.04 dev1
.
コンテナのルートシェルへのアクセス:
$ lxc exec dev1 -- bash
Firefox と VS Code を (リポジトリから) インストールします
$ apt update
$ apt install curl gpg firefox
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list
$ apt update
$ apt install code
わかりやすくするためにコンテナも含めます。
poweroff
ボーナス! コンテナ内で実行されているアプリケーションがグラフィックス カードを使用できるように、GPU をコンテナに投入するのは非常に簡単です。 これを行うには、次のものが必要です。
- デバイスを追加
$ lxc config device add dev1 mygpu gpu
; - ビデオ カード ドライバーをコンテナーにインストールします。ホストにインストールされているものと同じものです。
4. コンテナの使用
コンテナーがまだ実行されていない場合は、コンテナーを起動する必要があります。
lxc start dev1
非 root ユーザーとして VS Code を実行する Ubuntuの:
lxc exec dev1 -- sudo --login --user ubuntu code
Firefox を起動します。
lxc exec dev1 -- sudo --login --user ubuntu firefox
アプリケーション ウィンドウはホスト上に表示されますが、ssh を使用したグラフィックの転送と同様に、コンテナ内で実行されます。
私は実行中のコンテナを手動でシャットダウンすることはあまり意味がないと考えているので、実行中のアプリケーションのウィンドウを閉じることに限定しています。
5。 結論
開発にはホスト OS を使用しないことを好みます。これは、開発ツールのインストール、ライブラリのデバッグ バージョン、特定の方法でのシステム コンポーネントの構成、その他の操作が必要になるためです。 これらすべてが、他の非開発ソフトウェア、さらには OS 全体で予期しない動作を引き起こす可能性があります。 たとえば、OpenSSL 構成を変更すると、OS が正しく起動しなくなる可能性があります。
開発環境を分離するためにさまざまなツールを試しました。
- 仮想マシン (KVM、VirtualBox など) が最も明白なオプションですが、Windows での開発には他にオプションがありません (ホストが Linux の場合) にもかかわらず、かなり多くのリソースを消費します。
- ローカル マシン上で実行されるクラウド開発ツール (コンテナまたは仮想マシン内の Cloud9、Eclipse Che など) - これらはこの動作モード用に開発されていないため、追加の構成とメンテナンスが必要です。目的の目的で使用するのが最善です。目的 - クラウド内。
- Docker コンテナーは、やはり別の目的で使用されますが、私の意見では、まだ個別のコンテナーにパッケージ化されていないソフトウェアを使用して迅速にプロトタイプを作成するのにはあまり便利ではありません。
選択したアプローチは、そのシンプルさと参入障壁の低さに感銘を受けました。 コンテナ自体では、プロジェクト固有のアプローチを使用できます。すべてを手動でインストールして構成するか、自動化 (Puppet、Ansible など) を使用し、デプロイすることもできます。 $ lxc launch images:ubuntu/16.04 dev16
.
分離の観点からは、コンテナ化には仮想化に比べて攻撃対象領域が大きいことを覚えておくことが重要です。ホストとコンテナは単一のコアを共有しており、この脆弱性によりマルウェアがコンテナから逃れられる可能性があります。 疑わしいソフトウェアを実験する場合は、より適切な分離メカニズムを使用することをお勧めします。
便利なリンク集
- ハブレに関する豊富な記事
LXD の基本機能 - Linux コンテナ システム LXDプロジェクトポータル LXD と LXC を混同しないことが重要です。これらは異なりますが、相互に関連しています。ブログ シモス・ゼニテリス — このブログには、LXD に関する役立つ応用情報がたくさんあります。開発者向けの Windows 10 仮想マシンの既製イメージ — Microsoft は定期的に新しいビルドを収集し、特別なライセンスを使用して配布します。
出所: habr.com