ジョブの準備

アプリケーションの準備・動作確認

  • Cloud9 の画面下部にあるターミナルにコマンドを入力していきます。
  • ここではサンプルアプリケーションとして N-Queens 問題を解くプログラムをコンパイル・インストールして動作確認します。
curl -O http://www.arch.cs.titech.ac.jp/~kise/nq/package/qn24b-version1.0.tgz
tar -zxvf qn24b-version1.0.tgz
gcc -O2 version1.0/base/queens.c -o queens
  • コンパイルが完了したら実行して動作確認します。
./queens 16
# 出力例
# qn24b base version 1.0.1 2004-09-02
# =============================================
# qn24b base version 1.0.1 2004-09-02
# problem size n        : 16
# total   solutions     : 14772512
# correct solutions     : 14772512
# million solutions/sec : 2.747
# elapsed time (sec)    : 5.378
# =============================================

run_queens

アプリケーションのコンテナ化

  • Batch上で実行できるよう、先ほどのプログラムをコンテナ化します。
  • コンテナ化するために Dockerfile というファイルを作成します。

画面下部のターミナルでは、vi などのエディタを使用することもできます。ターミナルの操作に慣れている方はそちらでもお試しできます。

  • 左上に表示されているCloud9の環境名 cloud9-env01 を右クリックします。
  • メニューの中から「New File」をクリックします。

new_file_01

  • ファイル名として Dockerfile と入力し、エンターキーで確定します。

new_file_02

  • このファイルをダブルクリックしてファイルを開き、以下の内容を貼り付けます。
FROM amazonlinux:latest

COPY ./queens /usr/local/bin/queens

# program execute
CMD /usr/local/bin/queens 16
  • ファイルを保存するには、左上の「File」をクリックして、出てきたメニューの中から「Save」をクリックします。

save_dockerfile

  • Dockerfile の作成ができたらコンテナイメージを作成します。
  • 画面下部のターミナルに戻ってコマンドを入力していきます。
docker build -t queens .
  • コンテナイメージが作成できたら、Cloud9 環境上で動作確認します。
  • 先ほどの実行結果と同じような結果が表示されることを確認します。
docker images --filter reference=queens  # コンテナイメージの存在を確認
docker run queens  # コンテナの起動

作成したコンテナイメージをレジストリへ登録

  • コンテナイメージが作成できたので、このイメージをコンテナレジストリである Amazon Elastic Container Registry (ECR) へ登録します。
  • まずは登録するための ECR リポジトリを作成します。
aws ecr create-repository --repository-name queens
# 出力例
# {
#     "repository": {
#         "repositoryUri": "xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens", 
#         "imageScanningConfiguration": {
#             "scanOnPush": false
#         }, 
#         "registryId": "xxxx", 
#         "imageTagMutability": "MUTABLE", 
#         "repositoryArn": "arn:aws:ecr:ap-northeast-1:xxxx:repository/queens", 
#         "repositoryName": "queens", 
#         "createdAt": 1581057736.0
#     }
# }
  • 出力の repositoryUri の値 (xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens) はあとで使用します。
  • コピーしたイメージに対してタグ付けします。xxxxの部分を置き換えてから実行します。
docker tag queens xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens
  • aws ecr get-login-password コマンドを使用して、レジストリ用の Docker login 認証コマンド文字列を取得します。こちらもxxxxの部分を置き換えてから実行します。
aws ecr get-login-password | docker login --username AWS --password-stdin xxxx.dkr.ecr.ap-northeast-1.amazonaws.com
# 出力例
# WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
# Configure a credential helper to remove this warning. See
# https://docs.docker.com/engine/reference/commandline/login/#credentials-store
#
# Login Succeeded

aws ecr get-login-password コマンドによって12時間有効な認証トークンが発行され、それを標準入力経由で docker login コマンドに渡してログインしています。

  • ECR リポジトリへイメージをプッシュします。xxxxの部分を置き換えてから実行します。
docker push xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens
# 出力例
# The push refers to repository [xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens]
# 42fa032701d4: Pushed 
# d347cbb1a81e: Pushed 
# latest: digest: sha256:ebc273ee2173fb76c976c3317fa5887c223424b5fa6527aa02cdcb19f4786cf2 size: 737
  • プッシュしたイメージを使って動作確認をします。xxxxの部分を置き換えてから実行します。
docker rmi xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens  # ローカルのキャッシュを削除します
docker run xxxx.dkr.ecr.ap-northeast-1.amazonaws.com/queens