ネットアシスト開発チームのyu-kinjoです。今回は、WordPress等の既存のイメージを利用するのではなく、自前でフルスクラッチで作成したWebアプリケーションをDockerイメージ化して、さくらのクラウドの「AppRun」で動かすことを目指します。実際に自前で開発したWebアプリをAppRunで動かすにはどうしたらよいか、イメージがつかめることを目指します。
この記事は第2回です。前回の記事はこちらです。

ここから先は作成するさくらのクラウド上のリソースごとに料金が発生します。リソースの料金は公式の最新の情報をご確認ください。
コンテナレジストリの設定とイメージのアップロード
では前回ビルドに成功したオリジナルWebアプリケーションDockerイメージ「sakura_app_run」をアップロードしていきます。まずは、さくらのクラウドのコントロールパネル上から「コンテナレジストリ」を作成し、イメージをアップロードする先の用意を行います。(※1)
「グローバル」→「コンテナレジストリ」

「作成」からコンテナレジストリを作成。

コンテナレジストリの作成では、以下のように設定しました。
| 名前 | ykinjo-app-images |
| コンテナレジストリ名 | ykinjo-app-images.sakuracr.jp |
| 独自ドメイン | 未指定 |
| 公開設定 | 非公開 |
| 説明 | AppRunテスト |
| タグ | 指定無し |
| アイコン | 指定無し |
次に、コンテナレジストリにイメージをアップロード・ダウンロードするための「ユーザ」を追加します。作成したコンテナレジストリの「ユーザ」タブを開き、「追加」からユーザを追加していきます。

ユーザは以下のように設定しました。
| ユーザ名 | 任意のユーザ名を設定 |
| パスワード | 任意のパスワードを設定 |
| ユーザ権限設定 | All |
コンテナレジストリ側の準備が済みましたので、イメージをアップロードしていきます。まずはお手元の環境上で、dockerコマンドから作成したコンテナレジストリにログインします。
>docker login ykinjo-app-images.sakuracr.jp
Username: <先程作成したユーザのユーザ名を入力>
Password: <先程作成したユーザのパスワードを入力>
Login Succeeded
ログインに成功したら、イメージに「タグ」を設定しておきます。タグの設定を行ったらアップロードが実行できます。
> docker tag sakura_app_run ykinjo-app-images.sakuracr.jp/sakura_app_run:latest
> docker push ykinjo-app-images.sakuracr.jp/sakura_app_run:latest
アップロードが完了すると、コンテナレジストリの「リポジトリ」タブからもアップロードしたイメージが見えるようになります。

※1: 2026年5月31日より、DockerHub等の既存コンテナレジストリからもAppRunがご利用いただけるようになったようです。AppRun共用型で外部のコンテナレジストリが利用可能になりました
データベースアプライアンスを起動
次に接続先となるDBをさくらのクラウドの「データベースアプライアンス」機能で作成していきます。データベースアプライアンスは「スイッチ」もしくは「ルータ+スイッチ」に接続する必要が有るため、先にそちらを作成していきます。
目的のゾーンが選択されている事を確認の上で「ネットワーク」→「スイッチ」→「追加」から、ルータ機能が有効なスイッチを作成します。
| 名前 | ykinjo-rt-sw-01 |
| 説明 | AppRunテスト用 |
| タグ | 指定無し |
| アイコン | 指定無し |
| ルータ | はい |
| プリフィックス | /28 (16IP) |
| 帯域幅 | 100Mbps共有 |
| IPv6アドレス | 無効 |
ルータ+スイッチが作成できたら、データベースアプライアンスを作成していきます。
「アプライアンス」→「データベース」

「追加」から作成を行います。

以下のように設定を行いました。冗長化や定期バックアップなどが可能ですが、今回は一旦無効にしています。
| 冗長化 | 無効 |
| レプリケーション | 無効 |
| クローン元データベース | 指定無し |
| データベースエンジン | PostgreSQL |
| データベースバージョン | 14 |
| ディスクサイズ | 10GB |
| 暗号化 | 無効 |
| デフォルトユーザ名 | 任意のDBユーザー名を設定 |
| パスワード | 任意のDBパスワードを設定 |
| 接続先スイッチ | 5432 |
| IPv4アドレス #1 | 任意のIPアドレスを設定 |
| ネットマスク | 28 |
| ゲートウェイ | デフォルト値を利用 |
| 送信元ネットワーク | 未指定 |
| 定期バックアップ | バックアップしない |
| 自動更新 | 無効 |
| モニタリングスイート | 無効 |
| 名前 | ykinjo_app_run_db |
| 説明 | AppRunテスト |
| タグ | 指定無し |
| アイコン | 指定無し |
作成が完了したらDBへの接続確認を行ってみます。手元の環境にインストール済みのPostgreSQLのCLIクライアントである psql コマンドで接続してみます。
>psql -h <DBのIPアドレスを入力> -U ykinjo_app_run_db_01
ユーザー ykinjo_app_run_db_01 のパスワード:
psql (18.3、サーバー 14.22)
SSL接続(プロトコル: TLSv1.3、暗号化方式: TLS_AES_256_GCM_SHA384、圧縮: オフ、ALPN: なし)
"help"でヘルプを表示します。
ykinjo_app_run_db_01=>
接続が出来ました。ここで先に示したSQLを参考にしながら、DB、テーブル、レコードを作成しておきます。操作方法はPostgreSQLの操作方法をご参照ください。一通り作成できたらDBから切断します。
AppRunの起動
Dockerイメージのアップロードに続いて、DBの作成も完了しましたので、いよいよAppRunを起動します。AppRunはさくらのクラウド管理画面のトップからアクセスします。
さくらのクラウドホーム「トップ」→「AppRun共用型」

「アプリケーションを作成」

以下のように設定していきます。公開ポートはイメージ側の設定と合わせて80とします。
| アプリケーション名 | ykinjo_app_run_01 |
| オートスケーリング | 1~1 |
| スケールの目安 | 同時リクエスト数100 |
| リクエストタイムアウト | 60秒 |
| コンテナイメージ | ykinjo-app-images.sakuracr.jp/sakura_app_run:latest |
| ポート | 80 |
| コンテナレジストリアクセス設定 | レジストリのユーザ名とパスワードを入力 |
| リソース構成 | 0.5vCPU / 1GiBメモリ |
| ヘルスチェック | 指定無し |
| 構成名 | sakura_app_run:latest |
| パケットフィルタ利用設定 | 適宜接続元になる自分自身のIPを設定 |
| ログ利用設定 | 利用しない(※コンテナの起動に失敗する場合は「利用する」に設定する事でログが確認できます) |
| メトリクス利用設定 | 利用しない |
さらに「変数」タブで必要な環境変数を設定します。DBの接続情報を環境変数として渡します。
| DB_HOST | データベースアプライアンスのIP |
| DB_NAME | sakura_app_db |
| DB_USER | DBユーザー名を設定 |
| DB_PASS | DBパスワードを設定 |
これでコンテナが起動できます。起動出来たら公開URLが発行されるので、そのURLをWebブラウザで開く事で動作が確認できます。

目的のフルスクラッチ作成したWebアプリケーションが動作している事が確認出来ました。DBにも正常にアクセスできており、記事一覧と記事詳細が表示できます。


第1回~第2回まとめ
自前フルスクラッチで作成したWebアプリをDockerイメージ化、AppRunで実行、さらにDB部分をデータベースアプライアンスで作成し連携するところまで無事動かすことが出来ました。大まかなイメージとしてこういう形でWebアプリの公開が可能です。
ただし、これだけではWebアプリは完結しません。例えば、複数コンテナ構成で動かす際に、永続的な形でアップロードした画像ファイルを保存し表示したい場合は……?などなど、コンテナならではの課題がまだ有ります。更に次回探求していけたらと思います。


