DSW インスタンスのメインコンテナで Docker コマンドを実行して、セカンダリコンテナ (サブコンテナとも呼ばれます) を起動および管理します。
グラフィカルユーザーインターフェイスでセカンダリコンテナを起動する方法については、「DockerBoardでのセカンダリコンテナの管理」をご参照ください。
制限事項
セカンダリコンテナは、Lingjun リソースグループまたは汎用リソースグループで作成された DSW インスタンスでのみサポートされます。
DSW インスタンスでは、セカンダリコンテナの Docker デーモン設定 (
/etc/docker/daemon.json) は変更できません。このため、data-rootやregistry-mirrorsなどの設定項目はカスタマイズできません。DSW インスタンスを再起動すると、クラウドディスク機能が有効になっているかどうかにかかわらず、構築したランタイムイメージを含むセカンダリコンテナ内のランタイムデータは失われます。データの損失を防ぐために、重要な環境とデータは定期的に保存してください。
Docker でセカンダリコンテナを起動する際、特権を付与したり、セキュリティリスクをもたらしたりするパラメーターは使用できません。以下の表は、一般的な制限付きパラメーターの一覧です。
パラメーター | 説明 |
| コンテナにホストのほぼすべての権限を付与します。 |
| ホストの IPC 名前空間を共有します。 |
| コンテナがセキュリティポリシーをバイパスまたは変更できるようにします。 |
| 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 — DSW インスタンスのすべての GPU デバイスをマウントするには、
--gpus=allを使用します。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.4 GBよくある質問
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 からイメージをプルしてください。手順については、「イメージのプル」をご参照ください。または、「海外モデルまたはコンテナイメージのクロスドメインプル」をご参照ください。
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 コマンドを再度実行してください。