DSW では、インスタンスのメインコンテナ内で Docker コマンドを使用して、セカンダリコンテナ (サブコンテナ) を起動および管理できます。
グラフィカルユーザーインターフェースでセカンダリコンテナを起動するには、「Manage Sub-containers with DockerBoard」をご参照ください。
制限事項
セカンダリコンテナ機能は、Lingjun リソースグループ、またはバージョン 1.0 の汎用リソースグループから作成した DSW インスタンスでのみ利用できます。
DSW インスタンスのセカンダリコンテナでは、Docker デーモン設定 (
/etc/docker/daemon.json) を現在変更できません。これは、data-rootやregistry-mirrorsなどの設定オプションをカスタマイズできないことを意味します。インスタンスを再起動すると、クラウドディスク機能が有効であっても、ビルド済みイメージを含むセカンダリコンテナ内のすべての実行時データが削除されます。データ損失を防ぐため、重要な環境とデータは定期的に保存することを推奨します。
セカンダリコンテナの起動時に、昇格された特権を付与する、またはセキュリティリスクとなるパラメータは使用できません。次の表に、一般的な制限対象パラメータの一部を示します:
パラメータ
説明
--privileged
コンテナにホストマシンのほぼすべての権限を付与します。
--ipc=host
ホストの IPC 名前空間をコンテナと共有します。
--security-opt
コンテナのセキュリティポリシーを回避または変更できるようにします。
--cap-add
Linux カーネルケーパビリティをコンテナに追加し、権限の範囲を拡張します。
説明docker runまたはdocker createを使用してセカンダリコンテナを作成する際に、次のエラーメッセージError response from daemon: authorization denied by plugin authZ: Permission deniedが表示された場合、制限されたパラメーターが使用されたことを示します。
DSW インスタンスの作成と設定
DSW インスタンスを作成する際は、次の主要パラメータを設定します。
[Resource Type]: Resource Quota を選択します。
[Resource Quota]: 作成した Lingjun リソースクォータを選択します。 詳細については、「新しいリソースグループを作成し、Lingjun コンピューティングリソースを購入する」をご参照ください。
[Enable Multi-Container Isolation (DinD)]:このスイッチをオンにします。
OK をクリックしてインスタンスを作成します。 次のステップについては、「セカンダリコンテナの使用」をご参照ください。
セカンダリコンテナの操作
セカンダリコンテナの起動
次のコマンドを実行して、セカンダリコンテナを起動して入ります:
docker run -it dsw-registry.cn-hangzhou.cr.aliyuncs.com/pai/pytorch:1.8PAI-gpu-py36-cu101-ubuntu18.04 /bin/bashデバイスのマウント:
GPU のマウント:
--gpus=allを使用すると、DSW インスタンスのすべての GPU デバイスをマウントできます。PPU のマウント: GPU のマウントとは異なり、
--deviceパラメーターを使用して PPU デバイスをセカンダリコンテナに手動でマウントする必要があります。コマンドは次のとおりです。docker run -it --network=host \ --device=/dev/alixpu_ppu0 \ --device=/dev/alixpu \ --device=/dev/alixpu_ctl \ your-ppu-enabled-image説明PPU を使用するには、セカンダリコンテナのイメージに必要な PPU コンポーネントが事前にインストールされている必要があります。
データのマウント:
Docker Bind Mount を使用して、セカンダリコンテナにデータをマウントしてアクセスできます。 データは、まず Dataset Mounting または Storage Path Mounting を使用して DSW インスタンスにマウントされます (ボリュームマウントと tmpfs マウントは現在サポートされていません)。 たとえば、この DSW インスタンスでは、データが /mnt/data0 パスと /mnt/data1 パスにマウントされています。 -v パラメーターまたは --mount パラメーターを使用して、/mnt/data0 パスと /mnt/data1 パスをセカンダリコンテナにバインドマウントできます:
# この例では、<path_in_dsw> は /mnt/data0、/mnt/data1、またはそれらのサブパスにすることができます。
# それ以外のパスは、現時点ではセカンダリコンテナにマウントできません。
# -v パラメータを使用
docker run -v <path_in_dsw>:<path_in_secondary_container>[:options] {image}
# --mount パラメータを使用
docker run --mount type=bind,source=<path_in_dsw>,target=<path_in_secondary_container>[,readonly] {image}セカンダリコンテナへのアクセス
docker exec コマンドを使用すると、実行中のコンテナで新しいコマンドプロセスを開始できます。
たとえば、インタラクティブモード (-i) で bash シェルを起動し、疑似ターミナル (-t) を割り当てるには、次のコマンドを使用できます。
docker exec -it your-container /bin/bash現在、--privileged のような、セキュリティリスクのあるパラメーターを使用してコンテナに入ることはできません。
docker attach コマンドを使用して、実行中のコンテナ内のメインプロセスのターミナルにアタッチすることもできます。 コンテナの標準入力を開いた状態 (-i) と疑似 TTY を割り当てた状態 (-t) でコンテナを起動すると、コンテナの標準入出力 (stdin/stdout/stderr) を表示して対話することができます。 具体的な手順は次のとおりです。
docker attach {container_id}コンテナを停止せずにデタッチするには、既定のエスケープシーケンスを使用します:Ctrl+p、続けて Ctrl+q。
イメージのビルド
DSW インスタンスでは、Dockerfile を使用してイメージをビルドできます。次のコマンドを実行します:
docker build -t test-build .ネットワーク制限により、Docker Hub からイメージを直接プルできません。FROM 命令のベースイメージとして Alibaba Cloud Container Registry (ACR) のイメージを使用することを推奨します。
ビルドが完了したら、次のコマンドを実行して新しく作成したイメージを確認します:
root@dsw-330808-8445dd65f4-mhnrt:/mnt/workspace/test# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
test-build latest fad7fdb5e81a About a minute ago 15.4GBイメージのプル
たとえば、ACR からパブリックイメージをプルするには、次のコマンドを実行します:
docker pull dsw-registry.cn-hangzhou.cr.aliyuncs.com/pai/pytorch:1.8PAI-gpu-py36-cu101-ubuntu18.04プライベートリポジトリからイメージをプルするには、最初に docker login コマンドでログインします:
docker login --username={username} registry.cn-hangzhou.aliyuncs.comよくある質問
Q:DSW インスタンスで ps -aux コマンドを実行しても、セカンダリコンテナのプロセスが表示されないのはなぜですか?
DSW ではメインコンテナとセカンダリコンテナで pid 名前空間を共有しないため、セカンダリコンテナ内で実行中のプロセスはメインコンテナからは表示されません。
Q:Docker Hub からのイメージのプルが失敗するのはなぜですか?
ネットワーク制限により、Docker Hub からイメージを直接プルすると失敗します。次のようなエラーが表示されます:
root@dsw-381955:/mnt/workspace# docker run --network=host -it ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded.
See 'docker run --help'.代わりに、Alibaba Cloud Container Registry (ACR) の Artifact Center からイメージをプルしてください。別の方法として、「Cross-domain pull of overseas models or container images」もご参照ください。
Q:"Error response from daemon: authorization denied by plugin authZ: Permission denied" というエラーが表示された場合はどうすればよいですか?
このエラーは、サポートされていない Docker コマンドまたはパラメータを使用した場合に発生します。サポートが必要な場合は、テクニカルサポートにチケットを送信してください。
Q:"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?" というエラーが表示された場合はどうすればよいですか?
DSW インスタンスに /var/docker/proxy/docker-proxy.sock ファイルが存在するかどうかを確認してください。存在する場合は、次のコマンドを実行してから再試行してください:
export DOCKER_HOST=unix:///var/docker/proxy/docker-proxy.sock環境変数を設定した後、Docker コマンドを再度実行してください。