【IBM Cloud】Code Engineをいろいろいじってみた② - Dockerfileでのデプロイ

### はじめに
＊＊＊　Code Engine操作に関する前回記事の続きとなりますので、先にご確認いただけるとよりスムーズかと思います。
・[【IBM Cloud】Code Engineをいろいろいじってみた① - プロジェクト、アプリケーションの作成](https://qiita.com/Sungyun_Moon/items/217e1646724116ee6465)


IBM CloudのCode Engineを使っていろいろ試してみた内容をまとめました。Code Engineについての自分の勉強のために操作してみたため、同じくこれからCode Engineを活用される方向けとなる基礎内容の記事です。
今回の内容にはIBM Cloudの[アカウント](https://cloud.ibm.com/docs/account?topic=account-accounts)（無料利用可能）が前提となっています。
#### Code Engineの概要
IBM Cloud® Code Engine (略称「Code Engine」) は、ソース中心の最新のコンテナー化サーバーレス・アプリおよびジョブを作成できるようにすることを目的として、IBMによって開発されたプラットフォームです。コードを実行したい開発者のニーズに対応するように設計されており、アプリケーションのコードを分析し、コンテナイメージの作成とデプロイを自動的に行います。
現在、日本国内では東京リージョンと大阪リージョンともに対応しています。
![スクリーンショット 2022-09-13 15.28.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/f9e1ba18-d726-1c7d-beb2-c1ec4e13e5c9.png)

#### Code Engineの主な特徴
Code Engineの主な特徴としては、以下のようになります。
- インフラ管理・クラスタ管理が不要
    - アプリのソースコードを瞬時にデプロイ
    - ソースコードをもとに自動ビルド・デプロイ

- 複数のワークロードに対応
    - アプリケーション（HTTPベースのアプリ）
    - バッチジョブ
    - ファンクション（イベント駆動）
    - コンテナ

- 柔軟なスケール（ゼロ・スケール）
    - インフラ管理なしにアプリを柔軟にスケール可能
    - アプリが利用されていない場合はゼロ台にスケールダウンすることが可能

- 真の意味での従量課金
    - アプリ、ビルドで利用したリソース量に対する支払い
    - ゼロ・スケールに対応しているため、真の意味でアプリが利用されているときだけのお支払い

#### Code Engineのデプロイ方法について
Code Engineを使ってデプロイする方法は３つがあります。
① アプリコードを用いてビルド＋デプロイする
② Docker Fileを用いてビルド＋デプロイする
③ コンテナイメージを用いてデプロイする
今回は、②のコンテナイメージを使ってデプロイしてみました。

### デプロイの流れ
前回はCode Engineでコンテナ・イメージを使ってデプロイし、デプロイ結果や詳細機能などを確認しました。
今回はDockerfileを用いてビルド＋デプロイする流れを整理します。

前回作成したプロジェクトを開き、新しいアプリケーションを立ち上げます。右上の`作成`ボタンをクリックします。
（ちなみに前回コンテナ・イメージを使って作成したアプリケーション`「application-e1」`もありますね。）
![スクリーンショット 2022-10-05 15.42.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/2b4abee7-b688-92ac-af89-45b22d32b0ce.png)

アプリケーションの作成画面で必要情報を入力します。今後の見分けのために、今回のデプロイからは私も名前をしっかりつけるようにしました。
Dockerfileを用いたデプロイであるため、`test-using-dockerfile`と設定しています。
実行するコードの選択は今回はDockerfileを使うため、`ソース・コード`を選択します。（前回はコンテナー・イメージを選択しています。）
サンプルで用意されているGithubからのソースコードURLを入力します。

その後ビルドの詳細を設定するため、`ビルド詳細の指定`をクリックします。
![スクリーンショット 2022-10-05 15.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/c2d035a8-d263-27fd-0793-5bc1b7db0a57.png)

ビルドの詳細画面ではソース/戦略/出力についての設定画面が表示されます。
ソース欄ではデフォルトで設定。
![スクリーンショット 2022-10-05 15.47.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/0a5fd3f1-702c-ef63-fb1c-9090ecbd4cad.png)
戦略欄ではビルド用のリソースのみ`小`に変更。
![スクリーンショット 2022-10-05 15.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/e870a952-e866-cfc5-3ebf-dafb3b2e33dc.png)
出力画面では`名前空間`と`リポジトリー（イメージ名）`のみ変更。（名前空間にそのまま入力すると、自動に登録され、リポジトリーも設定されます。）
![スクリーンショット 2022-10-05 15.47.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/f7d600a7-57b2-ff2d-fabb-de6e7055f29e.png)
これで`ビルド詳細の指定`は完了です。

下段にスクロールするとエンドポイントの設定やランタイム設定がありますが、今回はインスタンスリソースのみ最も小さいスペックに変更しています。（0.125個のvCPU/0.25GB）
![スクリーンショット 2022-10-05 15.48.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/4d97edeb-3601-1251-ca37-2a67eef36ee3.png)
![スクリーンショット 2022-10-05 15.49.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/75c3b694-f8e2-c431-ac1d-8f1ff95d8c10.png)
また、選択オプションで環境変数とコマンドのオーバーライド設定欄がありますが、今回は何も設定していません。

これで全ての設定が完了しました。右下の`作成`ボタンをクリックします。
![スクリーンショット 2022-10-05 16.06.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/1fc28e69-48d3-6190-bef4-47334dffafc8.png)

画面が切り替わってデプロイ中の画面が自動に表示されます。まもなくデプロイが完了し準備ができたとの表示が見えます。
（例） `デプロイ中→対応可能`、`待機中→対応可能`、`実行中→成功`
![スクリーンショット 2022-10-05 16.07.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/5c31537e-e87c-1263-dc7e-d2817c4d2968.png)
![スクリーンショット 2022-10-05 16.09.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/cec9d92b-6d63-b45b-2f69-12d5bee91bc9.png)

デプロイが完了しましたらアプリケーションの画面を確認します。無事新しいアプリケーションがされていますね。
URLを開いて実際の画面を確認すると、Sampleが表示されることがわかります。
![スクリーンショット 2022-10-05 16.10.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/6ae62b76-a055-8163-0bbc-36dfad51cd5c.png)
![スクリーンショット 2022-10-05 16.11.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626032/c5ec24bf-50ec-a2c6-b1f4-b5fb3977c9dc.png)

### 最後に
今回はDockerfileを用いてコンテナ・イメージをビルドし、アプリケーションをデプロイする流れを整理しました。
最初からコンテナイメージを用いてデプロイする方法に比べると多少操作が発生しますが、それでも非常に簡単にデプロイできます。
次回は残りのデプロイ方法である「① アプリコードを用いてビルド＋デプロイする」方法についてまとめていきたいと思います。

### 参考
・IBM Cloud Docs - [Code Engine でのアプリの操作](https://cloud.ibm.com/docs/codeengine?topic=codeengine-application-workloads)