さくらのクラウドで AppRun を使うためにコンテナレジストリとイメージを準備する

さくらのクラウドで AppRun を使うためにコンテナレジストリとイメージを準備する

Clock Icon2025.03.23

いわさです。

最近さくらのクラウドの検証をすることがありまして、その中で AppRun という機能を使うためには事前にコンテナレジストリの作成とイメージの準備が必要になります。
今回 AppRun の評価の中でコンテナレジストリの作成やらを行いました。直感的で迷うことはないと思うのですがせっかく触ったのでその手順を残しておきます。

さくらのクラウドの AppRun はコンテナアプリケーションをホスティングすることが出来るマネージドサービスです。

https://manual.sakura.ad.jp/cloud/apprun/about.html

β 期間中は色々と制限があるのですが、無料で利用することが出来ます。[1]
AppRun をセットアップするためには事前にコンテナイメージを準備し、コンテナレジストリにプッシュしておく必要があります。

コンテナレジストリも現在β版として提供されているサービスで、期間中は無償で利用が可能です。

https://manual.sakura.ad.jp/cloud/appliance/container-registry/

コンテナレジストリの作成

ではコンテナレジストリを作成してみます。
事前にさくらのクラウドのアカウントは作成済みです。

ホーム画面のサービスから「グローバル」を選択します。

image.png

コンテナレジストリは [グローバル] -> [コンテナレジストリ] から管理が可能です。
まずは右上の追加ボタンから新規追加を行います。

789FF6F2-0803-4EB9-B091-D4D90CCC8C1E.png

以下が設定画面です。
必須なのはコンテナレジストリ名と公開設定です。

DC8FABDA-586F-4F3E-9102-57FB5EA2F0DC.png

基本的にこのコンテナレジストリ名(ここではhoge.sakuracr.jp)を使ってレジストリにアクセスします。
それとは別でカスタムドメインを設定することも出来ます。ここで設定した上で CNAME レコードの設定が必要です。今回は特に利用する必要がないのでレコード設定は割愛します。

公開設定はコンテナレジストリの公開範囲を設定するもので、認証なしユーザーに何を許可するか設定出来ます。
デフォルトは非公開になっており、認証したユーザーのみが利用可能なプライベートレジストリになります。

レジストリ用ユーザーの作成

ということで、レジストリ作成後に、認証用のユーザーも作成しましょう。
レジストリ詳細画面のユーザータブから独自でユーザーを作成・管理します。1000 件まで登録できるらしい。

F9CA7BAC-77A3-4773-89D3-CB8B19987A4F_4_5005_c.jpeg

ユーザー名とパスワード、許可する権限を選択します。

31FC930C-C44F-4258-B287-4CCF34771AA9.png

イメージを作成

適当なコンテナイメージを作成してコンテナレジストリにプッシュしたいと思います。
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
Dockerfile
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 コマンドでログインしてプッシュするだけなので難しいことはないと思います。

https://manual.sakura.ad.jp/cloud/appliance/container-registry/#id8

% 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 β」から遷移が可能です。

C0CFEEB8-2E64-4055-86F0-04A0522B179A.png

新しい AppRun を作成するのですが、コンテナ構成情報を設定する箇所で次にように指定が可能です。
コンテナイメージを指定しつつ、非公開レジストリの場合はどうやらここでもユーザーとパスワードの指定が必要なようです。なるほど。

88A511DD-4AD7-46C8-89DB-9C503ECD3603.png

保存後にアプリケーション起動を待ったのですが、ステータスが失敗になりました。

C48E9D2D-8DD8-4175-B2B9-EB588423738B.png

まずはコンテナレジストリの用意とイメージのプッシュまで出来たので良しとしますが、この問題はまた解決する必要があります。

さいごに

本日は さくらのクラウドの AppRun を使うためにコンテナレジストリとイメージを準備したのでその手順を紹介しました。

コンテナレジストリの準備自体は作成してユーザー用意して認証するだけなので非常に簡単でした。
β終了後の料金は少し気になります。

次回以降は AppRun のステータスが失敗になる問題を対処してみたいと思います。

脚注
  1. 技術概要 | さくらのクラウド マニュアル ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.