DSW インスタンスのメインコンテナで Docker コマンドを実行して、セカンダリコンテナ (サブコンテナとも呼ばれます) を起動および管理します。
グラフィカルユーザーインターフェースを使用してサブコンテナを起動するには、「DockerBoard でサブコンテナを管理する」をご参照ください。
制限事項
Lingjun リソースグループまたはバージョン 1.0 の汎用リソースグループから作成された DSW インスタンスのみが、セカンダリコンテナをサポートします。
DSW インスタンス内のセカンダリコンテナの Docker デーモン設定 (
/etc/docker/daemon.json) は変更できません。そのため、data-rootやregistry-mirrorsなどの設定項目をカスタマイズすることはできません。DSW インスタンスを再起動すると、クラウドディスク機能が有効になっているかどうかに関わらず、セカンダリコンテナ内のランタイムデータ (ビルドしたランタイムイメージを含む) は失われます。データの損失を防ぐため、重要な環境とデータは定期的に保存してください。
Docker を使用してセカンダリコンテナを起動する際、昇格された権限を付与するパラメータや、セキュリティリスクをもたらすパラメータは使用できません。次の表に、一般的に制限されるパラメータを示します:
| パラメータ | 説明 |
--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 インスタンスを作成する際に、以下の主要なパラメータを設定します。その他のパラメータは必要に応じて設定してください:
リソースタイプ:所属リソースグループ を選択します。
所属リソースグループ:作成した Lingjun リソースクォータを選択します。詳細については、「新しいリソースグループの作成と Lingjun コンピューティングリソースの購入」をご参照ください。
インスタンス内での Docker の有効化:このスイッチをオンにします。
OK をクリックしてインスタンスを作成します。次のステップについては、「セカンダリコンテナの操作」をご参照ください。
セカンダリコンテナの操作
DSW インスタンスの作成後、そのメインコンテナで Docker コマンドを実行して、セカンダリコンテナを起動および管理します。
セカンダリコンテナの起動
次のコマンドを実行して、セカンダリコンテナを起動し、コンテナ内に入ります:
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 とは異なり、PPU デバイスは
--deviceパラメータを使用してセカンダリコンテナに手動でマウントする必要があります:
docker run -it --network=host \
--device=/dev/alixpu_ppu0 \
--device=/dev/alixpu \
--device=/dev/alixpu_ctl \
your-ppu-enabled-imageセカンダリコンテナのランタイムイメージには、PPU に必要なコンポーネントがプリインストールされている必要があります。そうでない場合、PPU は使用できません。
セカンダリコンテナへのデータのマウント
Docker のバインドマウントを使用して、セカンダリコンテナ内のデータにアクセスします。データセットのマウント または ストレージパスのマウント を使用して DSW インスタンスにデータをマウントし、次にセカンダリコンテナにマウントします。ボリュームマウントと tmpfs マウントはサポートされていません。
たとえば、DSW インスタンスにデータが /mnt/data0 と /mnt/data1 にマウントされている場合、-v パラメータまたは --mount パラメータを使用して、データをセカンダリコンテナにバインドマウントします:
# この例では、<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) 対話モードで、擬似ターミナルが割り当てられた (-t) bash シェルを起動するには、次のコマンドを実行します:
docker exec -it your-container /bin/bash現時点では、--privileged のようなセキュリティリスクをもたらすパラメータを使用してコンテナ内に入ることはできません。
また、docker attach コマンドを使用して、実行中のコンテナのメインプロセスのターミナルにアタッチすることもできます。標準入力が開いており (-i)、擬似ターミナルが割り当てられている (-t) 状態でコンテナを起動した場合、コンテナの標準入出力 (stdin/stdout/stderr) を表示し、対話することができます:
docker attach {container_id}コンテナを停止せずにアタッチモードを終了するためのデフォルトのキーボードショートカットは、Ctrl + p の後に Ctrl + q を押します。コンテナのターミナルからデタッチされますが、コンテナは実行を続けます。
イメージのプル
ネットワークの制限により、Docker Hub から直接イメージをプルすることはできません。代わりに Alibaba Cloud Container Registry (ACR) からイメージをプルしてください。Docker Hub からのイメージのプルが失敗する場合、エラーの詳細については、「FAQ」をご参照ください。
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イメージのビルド
DSW インスタンスでは、Dockerfile を使用してランタイムイメージをビルドできます:
docker build -t test-build .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よくある質問
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) のアーティファクトセンターからイメージをプルしてください。手順については、「イメージのプル」をご参照ください。または、「海外のモデルまたはコンテナイメージのクロスドメインでのプル」をご参照ください。
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 コマンドを再度実行してください。