はじめに
IBM Cloud Code Engine(以下 Code Engine) は、IBM Cloud が提供するフルマネージドのサーバーレスプラットフォームである。このプラットフォームは、コンテナ、コード、バッチジョブを実行するために設計されており、インフラストラクチャの管理やスケーリングを自動化する。ユーザーは、コードを直接アップロードまたは、Docker コンテナをデプロイにより、アプリケーションやジョブを実行できる。
類似のサービスとして、他のクラウドベンダーでは AWS Fargate や GCP Cloud Run などが挙げられる。
今回は、この Code Engine と、Docker Hub を利用して、アプリをデプロイする方法についてサクッと紹介したい。
なぜ Docker Hub も使うの?
Code Engine は他所から持ってきた 'アプリの素' からコンテナのインスタンスを作成し実行するようになっている。
アプリの素は、「ソースコード」もしくは「コンテナイメージ」だ。
今回はコンテナイメージを Code Engine に pull してきてアプリコンテナを作成 → 実行するべく、イメージの元の保存先として Docker Hub を選んだというわけだ。
前提
- 作業環境: MacBook Pro Apple M1 Max/Sonoma 14
-
docker
コマンド:Docker version 25.0.4-rd, build c4cd0a9
- Rancher Desktop(Rancher Desktop by SUSE Version 1.13.1 (1.13.1)) でインストール
- アプリをコンテナ化するための Dockerfile 等はすでに用意されているものとする
- Code Engine のプロジェクト作成などの手順は割愛
- その他手順的なのも抜けている可能性あり
やったこと
1. ローカルおよび Docker Hub での作業
プッシュするイメージを作成する。
# '--platform ..' のオプションは、M1 Mac でコンテナイメージ作成する場合に必要とのこと
docker build -t <image_name> . --platform linux/amd64
その後 Docker Hub にログインし
docker login -u <username> -p <password>
ローカルで作成したイメージを push するイメージと紐付ける。
docker tag ローカルイメージ名:タグ名 DockerHubのアカウント名/リモートリポジトリ名:タグ名
最後に、紐づけたイメージを Docker Hub に push する。
docker push アカウント名/リモートリポジトリ名:タグ名
2. Code Engine
Code Engine > プロジェクト > アプリケーションの作成

ここで、各項目は以下のように入力し、すべて終わったら 完了 をクリックする。
-
レジストリー・サーバー:
https://index.docker.io/v1/
-
レジストリー・シークレット: 後述
-
名前空間: この作業で指定した
Docker Hub のアカウント名
Docker Hub(https://hub.docker.com/) にログインし、Repositories タブ画面でnamespace/リポジトリー(イメージ名)
となっているのが確認できる。(※画像でグレーアウトしている箇所)
-
リポジトリー(イメージ名):この作業で指定した
リモートリポジトリ名
-
タグ: Docker Hub に push したイメージに付与したタグ
レジストリー・シークレットに関して
上の画像で、「レジストリー・シークレット」はプルダウンメニューになっており、展開して レジストリー・シークレットの作成を選択する。

以下の設定を施す:
- ターゲット・レジストリー:
Dockerhub
- ユーザー名: Docker Hub のユーザー名(ログイン名/docker login で使用するやつ)
- アクセス・トークン: ない場合新規に作成する必要あり
- このページに行く: https://app.docker.com/settings/personal-access-tokens
-
Generate new token クリック
- 生成したトークン(ランダムな文字列)をコピーして上の「アクセス・トークン」のところに貼り付ける
全て設定を終えたら、作成 をクリックする。
ポートの設定
アプリがどのポートでリッスンしているかを設定する。
デフォルトでは 8080 となっているが、アプリがたとえば 3000
でリッスンしている場合は、それを入力する。
終わりに
以上のセッティングを問題なく完了すると、アプリがデプロイされて URL が発行され、無事にアクセスできるようになる。(Public エンドポイントの場合)
CI/CD などを考慮するともう少し複雑になるが、「とにかくアプリをインターネット上で動かす!話はそれからだ」な状態において、サーバーレスは有効な手段の一つとなり得るのだろうと思う。