DSW のサブコンテナは、Docker in Docker (DinD) 技術を利用して、単一の DSW インスタンス内に複数のサブコンテナを作成・管理し、環境分離とリソース管理を実現します。コンソールは、サブコンテナの作成、開始、停止、削除、および SSH 経由でのリモートアクセスを行うためのグラフィカルインターフェースを提供します。
ユースケース
-
同じ DSW インスタンス内で異なる開発環境を分離し、異なるイメージ間でトレーニング結果を比較・検証します。
-
GPU リソースが不足している場合、異なるイメージでサブコンテナを作成して実行環境を切り替えることで、インスタンスの再構築や再キューイングの必要がなくなります。
-
サブコンテナにより、複数のユーザーが単一の DSW インスタンスを共有しながら、ユーザー間の環境とリソースの分離を保つことができます。
前提条件
-
サブコンテナ機能は、Lingjun リソースグループまたはバージョン 1.0 の汎用リソースグループから作成された DSW インスタンスでのみサポートされています。
-
インスタンス管理者 (インスタンスの作成者またはオーナー) は、DSW インスタンスを作成および管理する権限が必要です。
-
DSW インスタンスは、作成時に インスタンス内での Docker の有効化 機能が有効化されている必要があります。
-
SSH 経由でサブコンテナにアクセスする必要がある場合、DSW インスタンスで SSH 機能も有効化されている必要があります。
ロールと権限
サブコンテナ管理には、次の 2 つのロールがあります:
-
インスタンス管理者 (オーナー):DSW インスタンスの作成者です。このロールは、DinD の有効化、アクセス制限の設定、サブコンテナの最大数の設定、データディレクトリ分離ルールの定義など、インスタンスレベルの設定を管理します。
-
サブコンテナ開発者:対応するワークスペースロール (アルゴリズム開発など) または RAM 権限を持つユーザーです。このロールは、サブコンテナリストの表示、サブコンテナの作成、および SSH 経でログインができます。開発者は自身が作成したサブコンテナのみを開始、停止、または削除できますが、すべてのサブコンテナに関する情報を表示できます。
権限管理には、2 つの方法があります:
-
ワークスペースロールベースの制御:インスタンス管理者は、アルゴリズム開発などの特定のロールがメインコンテナにアクセスするのを制限できます。制限されたロールを持つユーザーは、サブコンテナでの開発作業しか行えません。この方法はシンプルで、ほとんどのシナリオに適しています。
-
RAM ポリシーベースの制御:RAM ポリシーを設定することで、特定のインスタンスの特定のサブコンテナまで、より詳細な権限管理を実現できます。この方法は、厳しいセキュリティ要件を持つエンタープライズ顧客に適しています。
管理者向けの操作
マルチコンテナ分離の有効化
-
PAI コンソールにログインし、DSW ページに移動して、インスタンスの作成 をクリックします。
-
インスタンス設定で、インスタンス内での Docker の有効化 スイッチを有効にします。
-
このオプションを有効にすると、次の設定が表示されます:
-
[選択したロールによるインスタンスの操作を禁止します。]:ドロップダウンリストから、制限するワークスペースロールを選択します。制限されたロールを持つユーザーは、DSW メインコンテナを直接開いたり操作したりすることはできず、SSH 経由でサブコンテナにログインして開発作業を行うことしかできません。
たとえば、アルゴリズム開発 を選択した場合、このロールを持つユーザーはメインコンテナにはアクセスできません。ただし、インスタンス詳細ページの 子コンテナ管理 タブで、引き続き自身のサブコンテナを作成して使用できます。
ロールを選択しない場合、承認されたすべてのユーザーが通常どおりメインコンテナにアクセスでき、これは従来の動作と同じです。
-
[子コンテナ数の上限]:インスタンスに作成できるサブコンテナの最大数を設定します。1 から 16 までの整数を入力できます。デフォルト値は 10 です。
-
[データカタログの隔離構成]:メインコンテナ内のデータディレクトリ分離設定ファイルのパスを指定します。デフォルトのパスは
/etc/docker/dockerboard/mount_access.jsonです。このファイルは、ユーザーがサブコンテナを作成する際にマウントできるデータディレクトリを制御します。構成テンプレートのダウンロード をクリックして、テンプレートファイルをダウンロードできます。設定手順については、「データディレクトリ分離の設定」をご参照ください。
-
-
残りのインスタンス設定を完了し、[Create Instance] をクリックします。
データディレクトリ分離の設定
データディレクトリ分離は、開発者がサブコンテナを作成する際にマウントできるディレクトリを制御し、承認された範囲外のストレージデータへのアクセスを防ぎます。
手順
-
インスタンスの作成または編集ページで、構成テンプレートのダウンロード の下にある データカタログの隔離構成 リンクをクリックして、JSON テンプレートファイルを取得します。
-
テンプレートの形式に従い、各 Alibaba Cloud サブアカウントの UID を、ユーザーがアクセス可能な DSW メインコンテナ内のディレクトリにマッピングします。
-
編集した
mount_access.jsonファイルを、DSW メインコンテナ内の設定パスで指定された場所に配置します。デフォルトの場所は/etc/docker/dockerboard/mount_access.jsonです。
設定ファイル形式
設定ファイルは JSON 形式で、Alibaba Cloud サブアカウントの UID をキーとして使用します。各ユーザーに対して、Allow (許可されるマウントディレクトリ) と Deny (拒否されるマウントディレクトリ) を設定できます。以下に例を示します:
{
"123124432xxx": {
"Allow": [
"/mnt/workspace",
"/mnt/data1"
],
"Deny": [
"/mnt/data2"
]
},
"224321234xxx": {
"Allow": [
"*"
]
}
}
次の表に、フィールドの説明を示します。
|
フィールド |
説明 |
|
キー (例: |
Alibaba Cloud サブアカウントの UID。 |
|
Allow |
ユーザーがマウントを許可されているメインコンテナのディレクトリのリスト。 |
|
Deny |
ユーザーがマウントを禁止されているメインコンテナのディレクトリのリスト。Deny は Allow よりも優先されます。ディレクトリが両方のリストに存在する場合、ユーザーはそのディレクトリをマウントできません。このフィールドは省略できます。 |
設定適用ルール
-
設定ファイルが存在し有効な場合、システムはサブコンテナ作成時に、ユーザーが選択したディレクトリをマウントする権限があるかどうかをチェックします。
-
設定ファイルにユーザーのレコードが見つからない場合、ユーザーはサブコンテナ作成時にどのデータディレクトリもマウントできません。ページには「お使いのアカウントには利用可能な DSW パスがありません。パスをマウントする必要がある場合は、インスタンス管理者に連絡して設定を追加してもらってください。」というメッセージが表示されます。
-
設定ファイルのパスが空の場合や、ファイルが存在しない場合、システムはディレクトリ分離チェックを実行せず、すべてのユーザーがメインコンテナから任意のディレクトリをマウントできます。
開発者向けの操作
管理ページへのアクセス
-
PAI コンソールにログインし、DSW ページに移動します。
-
インスタンスリストで、DinD が有効になっている対象インスタンスの名前をクリックして、インスタンス詳細ページに移動します。
-
インスタンス詳細ページで、子コンテナ管理 タブをクリックします。
実行中 タブは、DSW メインコンテナが [Running] の場合にのみ表示されます。
サブコンテナの作成
[Sub-container Management] ページで、子コンテナの作成 をクリックし、作成フォームで次のパラメーターを入力します。
基本情報
|
パラメーター |
必須 |
説明 |
例 |
|
コンテナ名 |
はい |
サブコンテナに、認識しやすい名前を指定します。 |
|
|
ホスト名 |
いいえ |
サブコンテナにカスタムホスト名を指定します。 |
|
|
再起動ポリシー |
いいえ |
コンテナが終了した際に適用する自動再起動ポリシーを設定します。 |
自動的に再起動しない |
環境情報
|
パラメーター |
必須 |
説明 |
例 |
|
イメージ設定 |
はい |
サブコンテナのイメージを選択します。次の 2 つの方法に対応しています:
|
|
|
SSH 公開鍵 |
はい |
ローカルクライアントの SSH 公開鍵を入力します。このキーを使用して、SSH 経由でサブコンテナにログインします。 |
SSH キーペアを生成していない場合は、ローカルターミナルで |
|
メインコンテナのマウント |
いいえ |
永続システムディスクを持つインスタンスの場合、サブコンテナはメインコンテナから任意のパスをマウントできます。永続システムディスクを持たないインスタンスの場合、サブコンテナはメインコンテナによってすでにマウントされているストレージパスとデータセットのみをマウントできます。 |
|
|
データセットのマウント |
いいえ |
メインコンテナによってすでにマウントされているデータセットのみをマウントできます。 |
|
|
環境変数 |
いいえ |
キーと値の形式でサブコンテナのカスタム環境変数を設定します。 |
|
|
起動コマンド |
いいえ |
コンテナの起動時に実行するカスタムコマンドを指定します。 |
|
|
エントリーポイント |
いいえ |
コンテナのカスタムエントリーポイントを指定します。 |
|
リソース情報
|
パラメーター |
必須 |
説明 |
例 |
|
GPUデバイスのマウント |
いいえ |
DSW インスタンスに GPU リソースが搭載されている場合、サブコンテナを作成する際にマウントする GPU デバイスを選択できます。システムは、利用可能なすべての GPU カードとそのデバイス番号をリスト表示します。複数のデバイスを選択できます。 選択した GPU デバイスはサブコンテナにマウントされ、使用可能になります。 |
|
|
CPU 制限 |
いいえ |
サブコンテナの最大 CPU 使用率を設定します。空白のままにすると制限は設定されず、サブコンテナはインスタンス内の他のアイドルリソースを消費することがあります。 |
8 コア |
|
メモリ制限 |
いいえ |
サブコンテナの最大メモリ使用量を設定します。空白のままにすると制限は設定されず、サブコンテナはインスタンス内の他のアイドルリソースを消費することがあります。 |
48 GiB |
設定が完了したら、確認 をクリックしてサブコンテナを作成します。[Sub-container Management] ページで 子コンテナ作成タスクの進捗 をクリックすると、作成の進行状況を表示できます。
サブコンテナの管理
サブコンテナリストの [操作] 列には、次の操作があります:
自身が作成したサブコンテナのみを管理できます。
-
開始:停止状態のサブコンテナを開始します。
-
停止:実行中のサブコンテナを停止します。コンテナ内のプロセスは終了しますが、コンテナの設定とマウントされたストレージデータは保持されます。
-
再起動:実行中のサブコンテナを再起動します。これは、停止してから開始するのと同様の操作です。
-
ログ:トラブルシューティングのためにサブコンテナの実行ログを表示します。
-
SSH接続情報:接続ユーザー名やコマンドなど、サブコン基本的な接続の詳細を表示します。
-
削除:サブコンテナを削除します。ストレージマウントを通じて永続化されていないデータは完全に失われます。操作にはご注意ください。
サブコンテナリスト
[Sub-container Management] ページに移動すると、現在のインスタンス上のすべてのサブコンテナのリストが表示され、次の情報が表示されます:
このリストには、子コンテナ管理 ページで作成されたサブコンテナのみが表示されます。Docker コマンドを実行して手動で作成したサブコンテナは含まれません。
|
フィールド |
説明 |
|
コンテナ名 |
サブコンテナの名前。 |
|
ユーザー名 |
サブコンテナを作成したユーザーのユーザー名。 |
|
ステータス |
現在のステータス。Creating (イメージのプル中)、Created、Running、Paused、Restarting、Stopped、Starting、Stopping、Updating などがあります。 |
|
ビデオメモリ (GiB) |
GPU デバイス番号とビデオメモリの使用状況。 |
|
CPUリソース |
CPU 使用率とコア数。 |
|
メモリ (GiB) |
メモリ使用量。 |
|
コンテナイメージ |
サブコンテナが使用するイメージ。 |
|
作成時刻 |
サブコンテナが作成された時刻。 |
DSW インスタンスに対する読み取り権限を持つすべてのユーザーは、すべてのサブコンテナのリストを表示できますが、管理 (開始、停止、または削除) できるのは自身が作成したサブコンテナのみです。
作成タスクリスト
サブコンテナの作成には、特に大きなイメージをプルする場合に時間がかかることがあります。システムは、作成タスクを追跡する機能を提供します。
[Sub-container Management] ページの右上隅にある 子コンテナ作成タスクの進捗 をクリックすると、すべてのコンテナ作成タスクのステータスとログを表示できます。「Creating」状態のタスクは手動で停止できます。タスクレコードは 3 日後に自動的に削除されます。
SSH経由での接続
サブコンテナが作成され、実行されると、SSH 経由でリモート接続できます。
手順
-
サブコンテナリストで対象のサブコンテナを探し、[操作] 列の [SSH Connection Information] をクリックします。ダイアログが開き、接続ユーザー名と完全な接続コマンドが表示されます。
-
ローカルターミナルで接続コマンドを実行して、サブコンテナにログインします。コマンドの形式は次のとおりです:
ssh <connection_username>@<instance_public_address> -p 22 -i <local_private_key_path>
次の表に、パラメーターの説明を示します。
|
パラメーター |
説明 |
|
接続ユーザー名 |
ユーザー名は自動的に生成され、特定のサブコンテナに紐付けられます。[SSH Connection Information] ダイアログに表示されます。 |
|
インスタンスのパブリックアドレス |
DSW メインコンテナのパブリック IP アドレス。 |
|
ローカル秘密鍵のパス |
サブコンテナの作成時に指定した SSH 公開鍵に対応するローカル秘密鍵ファイルのパス (例:~/.ssh/id_rsa)。 |
SSH ログインが成功すると、サブコンテナのコマンドライン環境に直接接続されます。すべてのサブコンテナは DSW メインコンテナのポート 22 を共有しますが、アクセスは一意の SSH キーと専用のユーザー名によって分離されています。
制限事項と考慮事項
-
メインコンテナのステータスへの依存:すべてのサブコンテナ管理機能は、DSW メインコンテナの実行状態に依存します。メインコンテナが停止したりエラーが発生したりすると、[Sub-container Management] ページは利用できなくなり、サブコンテナにアクセスできなくなります。
-
ストレージマウントの範囲:サブコンテナは、メインコンテナ内のディレクトリのみをマウントできます。外部ストレージを直接マウントすることはできません。
-
サブコンテナの制限:インスタンスあたりのサブコンテナの数は、管理者によって設定された最大数 (最大 16) に制限されます。
-
機能の範囲:サブコンテナは、JupyterLab、Terminal、WebIDE などの組み込みアプリケーションなど、DSW メインコンテナが提供する全ての開発機能を提供するわけではありません。サブコンテナへは SSH 経由でアクセスします。
-
データ永続化:サブコンテナが削除されると、マウントされたディレクトリに保存されていないデータは完全に失われます。重要なデータはマウントされたディレクトリに保存してください。
-
インスタンス削除の影響:DSW インスタンスが削除されると、そのすべてのサブコンテナも削除されます。インスタンスを削除する前に、データをバックアップしてください。
よくある質問
Q:「Sub-container Management」タブが表示されないのはなぜですか?
A:以下をご確認ください:
-
DSW インスタンスが インスタンス内での Docker の有効化 機能を有効にして作成されていること。
-
DSW メインコンテナが現在 [Running] 状態であること。[Sub-container Management] タブは、メインコンテナが実行中でない場合は表示されません。
Q:データディレクトリをマウントできないのはなぜですか?
A:インスタンス管理者がデータディレクトリ分離ポリシーを設定しており、お使いの Alibaba Cloud アカウントに設定ファイル内で利用可能なディレクトリが割り当てられていない可能性があります。インスタンス管理者に連絡して、mount_access.json ファイルにアカウントの設定を追加してもらってください。
Q:SSH接続に失敗するのはなぜですか?
A:以下の項目を順番にご確認ください:
-
サブコンテナが [Running] 状態であることを確認してください。
-
使用しているローカル秘密鍵が、サブコンテナの作成時に指定した公開鍵と一致することを確認してください。
-
DSW インスタンスで SSH 機能が有効化されていることを確認してください。
-
お使いのネットワークが、インスタンスのパブリック IP アドレスのポート 22 へのアクセスを許可していることを確認してください。
Q:サブコンテナの作成が遅いのはなぜですか?
A:作成時間は主にイメージのプル速度に依存します。大きなイメージを初めてプルする場合、時間がかかることがあります。作成タスクリストで進行状況とログを確認できます。同じイメージを使用する後続のコンテナは、イメージがローカルにキャッシュされるため、はるかに高速に作成できます。
Q:他のユーザーのサブコンテナを管理できますか?
A:デフォルトでは、自身が作成したサブコンテナのみを管理できますが、すべてのサブコンテナの基本情報を表示することはできます。他のユーザーが作成したサブコンテナを管理するには、管理者が RAM ポリシーを通じて必要な権限を付与する必要があります。