
さくらのクラウドで AppRun を使うためにコンテナレジストリとイメージを準備する
いわさです。
最近さくらのクラウドの検証をすることがありまして、その中で AppRun という機能を使うためには事前にコンテナレジストリの作成とイメージの準備が必要になります。
今回 AppRun の評価の中でコンテナレジストリの作成やらを行いました。直感的で迷うことはないと思うのですがせっかく触ったのでその手順を残しておきます。
さくらのクラウドの AppRun はコンテナアプリケーションをホスティングすることが出来るマネージドサービスです。
β 期間中は色々と制限があるのですが、無料で利用することが出来ます。[1]
AppRun をセットアップするためには事前にコンテナイメージを準備し、コンテナレジストリにプッシュしておく必要があります。
コンテナレジストリも現在β版として提供されているサービスで、期間中は無償で利用が可能です。
コンテナレジストリの作成
ではコンテナレジストリを作成してみます。
事前にさくらのクラウドのアカウントは作成済みです。
ホーム画面のサービスから「グローバル」を選択します。
コンテナレジストリは [グローバル] -> [コンテナレジストリ] から管理が可能です。
まずは右上の追加ボタンから新規追加を行います。
以下が設定画面です。
必須なのはコンテナレジストリ名と公開設定です。
基本的にこのコンテナレジストリ名(ここではhoge.sakuracr.jp
)を使ってレジストリにアクセスします。
それとは別でカスタムドメインを設定することも出来ます。ここで設定した上で CNAME レコードの設定が必要です。今回は特に利用する必要がないのでレコード設定は割愛します。
公開設定はコンテナレジストリの公開範囲を設定するもので、認証なしユーザーに何を許可するか設定出来ます。
デフォルトは非公開になっており、認証したユーザーのみが利用可能なプライベートレジストリになります。
レジストリ用ユーザーの作成
ということで、レジストリ作成後に、認証用のユーザーも作成しましょう。
レジストリ詳細画面のユーザータブから独自でユーザーを作成・管理します。1000 件まで登録できるらしい。
ユーザー名とパスワード、許可する権限を選択します。
イメージを作成
適当なコンテナイメージを作成してコンテナレジストリにプッシュしたいと思います。
dotnet
コマンドでアプリケーションを作成し、Dockerfile を用意します。
% dotnet new webapi -minimal --no-https -n MinimalApiServer
The template "ASP.NET Core Web API" was created successfully.
Processing post-creation actions...
Restoring /Users/iwasa.takahito/work/hoge0323sakura1/MinimalApiServer/MinimalApiServer.csproj:
Restore succeeded.
% cd MinimalApiServer
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /source
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app .
ENV ASPNETCORE_URLS=http://+:80
EXPOSE 80
ENTRYPOINT ["dotnet", "MinimalApiServer.dll"]
% docker build -t minimal-api-server .
[+] Building 34.8s (15/15) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
:
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:bee1b07043cdd87111fea98adae6f5fed97a7b90fba0f05a2add2b298365b30a 0.0s
=> => naming to docker.io/library/minimal-api-server 0.0s
イメージの作成が出来ました。ローカルで動かしてみます。
% docker run -p 8080:80 --rm minimal-api-server
warn: Microsoft.AspNetCore.Hosting.Diagnostics[15]
Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://+:80'.
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://[::]:80
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /app
:
% curl http://localhost:8080/weatherforecast |
jq
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 393 0 393 0 0 41337 0 --:--:-- --:--:-- --:--:-- 43666
[
{
"date": "2025-03-24",
"temperatureC": 36,
"summary": "Chilly",
"temperatureF": 96
},
{
"date": "2025-03-25",
"temperatureC": -7,
"summary": "Freezing",
"temperatureF": 20
},
{
"date": "2025-03-26",
"temperatureC": 41,
"summary": "Freezing",
"temperatureF": 105
},
{
"date": "2025-03-27",
"temperatureC": 46,
"summary": "Warm",
"temperatureF": 114
},
{
"date": "2025-03-28",
"temperatureC": 11,
"summary": "Scorching",
"temperatureF": 51
}
]
動きました。簡単な API サーバーという感じです。
コンテナレジストリへイメージをプッシュする
イメージプッシュの手順は以下にも記載されていますが、docker コマンドでログインしてプッシュするだけなので難しいことはないと思います。
% docker tag minimal-api-server:latest hogeiwasa.sakuracr.jp/hoge0323dotnet:latest
% docker login hogeiwasa.sakuracr.jp
Username: hogeuser
Password:
Login Succeeded
% docker push hogeiwasa.sakuracr.jp/hoge0323dotnet:latest
The push refers to repository [hogeiwasa.sakuracr.jp/hoge0323dotnet]
557bd6209b5e: Pushed
94db10a35392: Pushed
a444cc852584: Pushed
84859dd168c9: Pushed
0c1d3d81f813: Pushed
a98916262970: Pushed
efb3054c3763: Pushed
70a3ee4d4d38: Pushed
latest: digest: sha256:f5210f6c98268662f8ad5219202b6d3b24237b805c301eab32f46831cd71d317 size: 1997
プッシュできました。
AppRun で使ってみる
最後に、AppRun での指定方法も確認してみます。
AppRun を起動しましょう。本日時点ではホームのサービス一覧「AppRun β」から遷移が可能です。
新しい AppRun を作成するのですが、コンテナ構成情報を設定する箇所で次にように指定が可能です。
コンテナイメージを指定しつつ、非公開レジストリの場合はどうやらここでもユーザーとパスワードの指定が必要なようです。なるほど。
保存後にアプリケーション起動を待ったのですが、ステータスが失敗になりました。
まずはコンテナレジストリの用意とイメージのプッシュまで出来たので良しとしますが、この問題はまた解決する必要があります。
さいごに
本日は さくらのクラウドの AppRun を使うためにコンテナレジストリとイメージを準備したのでその手順を紹介しました。
コンテナレジストリの準備自体は作成してユーザー用意して認証するだけなので非常に簡単でした。
β終了後の料金は少し気になります。
次回以降は AppRun のステータスが失敗になる問題を対処してみたいと思います。