Batch Computeでは、イメージに直接ソフトウェアをインストールできるだけでなく、Dockerイメージへのアプリケーションのデプロイもサポートしています。Dockerイメージを作成し、レジストリツールを使用してAlibaba Cloud OSSにアップロードできます。その後、このイメージでジョブのタスクを実行できます。
1. Dockerのサポート
AutoClusterモデルを例として、一般的なVMとDockerコンテナのサポートの違いを説明します。
一般的なVMを使用する場合:送信する各ジョブは複数のタスクを持つことができ、それぞれにイメージ(LinuxまたはWindows)が指定されています。
タスクを実行すると、システムは指定されたイメージに基づいて対応するVMを起動します。
タスクはこのVM上で実行されます。タスクが完了すると、システムはタスクの実行結果を指定された永続ストレージにアップロードし、VMを破棄してから、次のタスクを実行します。
Dockerを使用する場合:各タスクにDockerイメージを指定できます。
タスクを実行すると、システムはDockerをサポートするシステムイメージ(Ubuntuなど)を実行するVMを起動します。
次に、システムは指定したDockerイメージをダウンロードし、VMで起動します。タスクはDockerコンテナ内で実行されます。
タスクが完了すると、システムはタスクの実行結果を指定された永続ストレージにアップロードし、VMを破棄してから、次のタスクを実行します。
現在、1つのVMは1つのDockerイメージしか実行できません。
# VMを使用する場合:
---
|-- job
|-- task
|-- VM (WindowsおよびLinuxイメージをサポートする指定されたVM)
|-- program (プログラム)
# Dockerコンテナを使用する場合:
---
|-- job
|-- task
|-- VM (DockerをサポートするUbuntuオペレーティングシステム)
|-- Docker-Container (Dockerコンテナに指定されたイメージ)
|-- program (プログラム)
2. Dockerを使用する場合と使用しない場合のシナリオ
- | Dockerを使用しない | Dockerを使用する |
イメージの使用 | ECSイメージIDを指定する | Dockerコンテナ(公式WebサイトでリリースされたUbuntu)をサポートするECSイメージのIDを指定し、カスタムDockerイメージを指定する。 |
プログラム実行プラットフォーム | WindowsとLinux | Linux |
ローカルデバッグ | サポートされていない | サポートされている。ローカルで作成されたDockerイメージを使用する。 |
3. Dockerのインストール
3.1. Docker公式からのダウンロード
WindowsまたはMacオペレーティングシステムの場合は、https://www.docker.com/docker-toolboxからツールボックスをダウンロードします。
ツールボックスをインストールすると、デスクトップに2つのショートカットアイコンが表示されます。
Kitematic:DockerコンテナGUIの管理に使用します。Docker Quickstart Terminal:Dockerコマンドラインウィンドウをすばやく起動するために使用します。
Linuxオペレーティングシステムの場合は、https://www.docker.com/docker-ubuntuからUbuntu用のDockerをダウンロードします。
注: Docker 1.10以降のバージョンをインストールしてください。以前のDockerバージョンでは互換性の問題が発生する可能性があります。
3.2. ブースターの設定
ブースターは、中国で公式のDockerイメージをより迅速に取得するのに役立ちます:Alibaba Cloud Container Service開発プラットフォーム
4. Dockerイメージの作成
この例では、Pythonを含むUbuntuイメージを作成する方法を説明します。イメージ名はmyubuntuです。
次の構造でdockerUbuntuディレクトリを作成します。
dockerUbuntu
|-- Dockerfile
Dockerfileの内容は次のとおりです。
FROM ubuntu:14.04
# your_nameを自分の名前に、your_emailをメールアドレスに置き換えます。
MAINTAINER your_name <your_email>
# ソースを更新します。
RUN apt-get update
# キャッシュをクリアします。
RUN apt-get autoclean
# Pythonをインストールします。
RUN apt-get install -y python
# システム起動後に次のコマンドを実行します。
CMD ["/bin/bash"]
次のコマンドを実行してイメージをビルドします。
cd dockerUbuntu # dockerUbuntuディレクトリに移動します。
docker build -t myubuntu ./ # myubuntuという名前のイメージをビルドします。
注:Ubuntuでは、デフォルトではdockerコマンドはsudoユーザーのみが実行できます。MacまたはWindowsオペレーティングシステムでは、Docker Quickstart Terminalを使用してコマンドラインウィンドウを起動し、ウィンドウでdockerコマンドを実行します。
イメージをビルドした後、次のコマンドを実行してイメージを表示します。
docker images
出力情報は次のようになります:
Dockerfileを使用するだけでなく、より直感的な方法でDockerイメージを作成することもできます。
5. DockerイメージをOSSにアップロードする
Batch ComputeのDockerサービスを使用するには、作成したDockerイメージmyubuntuをOSSにアップロードします。システムはOSSからイメージをダウンロードして、タスクプログラムを実行します。
5.4. OSS Docker Registry 2のインストール
DockerをOSSの次のディレクトリに保存するとします。
oss://your-bucket/dockers/
Docker Registry 2の公式イメージを使用してプライベートイメージリポジトリを作成し、AccessKey ID、AccessKey Secret、リージョン、バケットなどのOSS情報を設定します。
インストール手順は次のとおりです。
現在のディレクトリにconfig.ymlファイルを作成します。
version: 0.1
log:
level: debug
storage:
oss:
accesskeyid: your_access_key_id
accesskeysecret: your_access_key_secret
region: oss-cn-shenzhen
bucket: your-bucket
rootdirectory: dockers
secure: false
internal: false
http:
addr: 0.0.0.0:5000
次の変数を置き換えます。
パラメータ | 説明 |
your_access_key_id | AccessKey ID |
your_access_key_secret | AccessKeyシークレット |
your-bucket | バケット |
oss-cn-shenzhen | バケットが属するリージョン |
OSS設定の詳細については、Docker公式ドキュメントを参照してください。
次のコマンドを実行して、OSS Docker Registry 2をインストールします。
docker pull registry:2
docker run -v `pwd`/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --name registry -d registry:2
注:
この例では、oss-cn-shenzhenは中国南部1(深圳)リージョンのOSSを表します。後で送信されたジョブは、このリージョンでのみ正常に動作します。
インストールが完了したら、次のコマンドを実行して結果を確認します。
docker ps # 実行中のコンテナを確認します。
インストールが成功すると、registry:2が表示されます。
5.2. 次のコマンドを実行して、イメージをOSSにアップロードします。
docker tag myubuntu localhost:5000/myubuntu
docker push localhost:5000/myubuntu
注:イメージ名のプレフィックスはlocalhost:5000/である必要があります。他のプレフィックスを使用すると、イメージをアップロードできません。プレフィックスのポート5000は、手順(1)の-p 5000:5000(コロン前の数字)で指定されます。作成したイメージの実際の名前はlocalhost:5000/myubuntuであり、myubuntuではありません。
イメージが正常にアップロードされたことを確認するには、OSSコンソールにログインし、次のディレクトリがあるかどうかを確認します:oss://your-bucket/dockers/docker/registry/v2/repositories/myubuntu/。
6. 注意
実行中のDockerコンテナでは、ユーザー名はrootで、パス環境変数のデフォルト値は/sbin:/usr/sbin:/bin:/usr/binであり、/usr/local/binではありません。
PWD環境変数を設定しない場合、その値は「/batchcompute/workdir」です。すべてのプログラムパッケージは/batchcompute/workdirに解凍されます。
Dockerレジストリは起動後停止しません。したがって、クラスタIDを指定してジョブを送信する場合は、同じクラスタに送信されるすべてのジョブでBATCH_COMPUTE_DOCKER_REGISTRY_OSS_PATHの値が同じであることを確認してください。
InputMappingとOutputMappingを同じディレクトリにアタッチすることはできません。
Batch Computeは-privileged=falseモードを使用してDockerコンテナを起動するため、Dockerコンテナ内で別のDockerコンテナを起動することはできません。