Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

Docker・AppRun ハンズオン手順

Last updated at Posted at 2025-06-17

概要

さくらのクラウド「AppRun」(β)に、アプリケーションをデプロイします。 デプロイする前に、事前に Docker イメージの作成と、イメージをコンテナレジストリにアップロードする必要があります。

そのため、ハンズオンの流れとしては、まずさくらのクラウド上に仮想サーバを作成します。それから、Docker Engine のセットアップを行い、イメージの構築とコンテナレジストリにアップロードをします。これら準備が整った後、AppRun 上にアプリケーションをデプロイします。

環境準備

手順

さくらのクラウド上に今回作業するサーバを作成します。

  • OS: Ubuntu Server 24.04.1 LTS
  • CPU core: 2
  • Memory: 2GB
  • Storage: SSD 20GB

コントロールパネルの URL をウェブブラウザで開きます:

  1. さくらのクラウドコントロールパネルにログインします。

  2. ホーム画面の場合は「さくらのクラウド」をクリックします。

  3. 「接続情報」の「使用するゾーン」列を確認し、自分の画面上のゾーンを切り替えます。それから、左メニューの「サーバ」が選択された状態で、画面右上の「追加」をクリックします。

  4. 「Ubuntu Server 24.04.1 LTS 64bit」をクリックし、画面を下にスクロールします。image.png

  5. サーバプランを「2仮想コア / 2GB」をクリックします。

  6. 「サーバの設定」にある「管理ユーザのパスワード」を入力します。※あとでサーバにログインするときに必要です。忘れずメモを残すか、コントロールパネルのログイン用パスワードを入力してください。

  7. ホスト名を「docker」と入力します。

  8. 画面一番下の「作成」をクリックします。

  9. 操作確認画面でも「作成」をクリックします。

  10. サーバの準備が整うまで待ちます。

  11. 作成完了後、左メニューの「サーバ」をクリックし、サーバが起動中の状態を確認します。

ハンズオン手順

A. Docker 実行環境の準備

A-1. 《さくらのクラウド》サーバにログイン(SSH 接続)する

SSH 専用クライアントで接続、またはターミナルやコマンドプロンプト上で以下のコマンドを実行します。
例えば IPアドレスが 133.242.220.49 の場合は、次のように入力します。

$ ssh ubuntu@133.242.220.49

はじめてサーバに接続する時、SSH 鍵のフィンガープリントの確認を求められます。
YES と入力してエンターを押します。

The authenticity of host '133.242.220.49 (133.242.220.49)' can't be established.
ED25519 key fingerprint is SHA256:nKdtQcbK24n2Mfd/xuwHXKG372musKeSPEwo78lc/UE.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

その次に、ubuntuユーザのパスワードを入力します。

Warning: Permanently added '133.242.220.49' (ED25519) to the list of known hosts.
ubuntu@docker's password:

正常に接続すると、つぎのような表示になります。

(省略)
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@docker:~$

A-2. Docker Engine のインストール

以下の各行を実行します。

これは https://get.docker.com/ の応答そのものが、 Docker をセットアップするためのスクリプトです。 curl-o オプションを付け、 get-docker.sh として出力し、これをコマンドとして実行します。

curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh ./install-docker.sh
sudo usermod -aG  docker ubuntu

これでインストールは終わりました。
一度ログアウトし、再度SSHログインします。

exit

SSHで再接続後、以下のコマンドを実行してエラーが出なければ問題ありません。

docker version

docker version はバージョン版を表示するコマンドで、正常にセットアップが終わっていればクライアントとサーバ両方のバージョン番号が出ます。

B. hello-world コンテナの実行

B-1. hello-world コンテナの実行

Docker コンテナを実行するには docker run <イメージ名>docker container run <イメージ> コマンドを使います。ここで指定したイメージを使い、イメージに含むファイルと情報を使い、それをコンテナ状態でプログラムを実行します。

1. 次のコマンドを実行し、 hello-world コンテナを実行します。

docker run hello-world

2. 実行した内容を確認後、サーバのローカルにあるイメージ一覧を表示します。

docker images

3. その後、もう一度 hello-world コンテナを実行します。先ほどとの実行結果の違いが分かりますか?

docker run hello-world

B-2. hello-world イメージを詳しく調べる

1. イメージ一覧を表示します。

docker images

2. イメージの作成履歴を調べます。

docker history hello-world

3. イメージの内容詳細を調べます。

docker inspect hello-world | more

C. サンプルアプリケーションの作成

C-1. 作業用ディレクトリを作成し、移動します。

mkdir apprun-demo && cd apprun-demo

C-2. 関連するファイルを作成します。

app.py アプリケーション本体

cat << EOF > app.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from AppRun!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)
EOF

requirements.txt 依存関係指定のファイル

cat << EOF > requirements.txt
flask
EOF

Dockerfile

cat << EOF > Dockerfile
FROM python:3.13-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
EOF

C-3. アプリケーションを実行する Docker イメージを構築します。

docker build コマンドで myapp イメージを構築します。

docker build -t myapp .

実行後、 docker images コマンドを実行し、 myapp:latest イメージが作成されているのを確認します。

$ docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
myapp         latest    1871bf0fbc3c   3 minutes ago   134MB
hello-world   latest    74cc54e27dc4   4 months ago    10.1kB

C-4. myapp イメージを実行します。

ただしくアプリケーションが作られているかどうか確認するため、 docker run -d -p 8000:8000 --name myapp myapp コマンドを実行し、アプリケーションを実行します。

docker run -d -p 8000:8000 --name myapp myapp

実行後、 docker ps コマンドを実行すると、アプリケーションが実行しているように見えます。

$ docker ps
CONTAINER ID   IMAGE     COMMAND           CREATED         STATUS         PORTS                                         NAMES
babd8bee234a   myapp     "python app.py"   3 seconds ago   Up 2 seconds   0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp   myapp

それから、ウェブブラウザで http://<サーバのIP>:8000 を指定し、デモ画面が開くのを確認します。

正常に動作する場合「Hello from AppRUn!」という文字が見えます。

これで Docker イメージの準備は整いました。

D. コンテナレジストリの準備と Docker イメージのアップロード

D-1. コンテナレジストリのリポジトリ作成

AppRun でアプリケーションを動かすためには、コンテナレジストリに Docker イメージを格納しておく必要があります。

そのためには、まずウェブブラウザでコンテナレジストリの URL を表示します。

表示後は、画面右上の「+追加」をクリックします(詳細マニュアルはこちら )。

「名前」と「コンテナレジストリ名」を入力し、「作成」をクリックします。「名前」はコントロールパネル上に表示される名前で、「コンテナレジストリ名」は後でイメージの送信や AppRun でのイメージ取得先として指定します。
image.png

操作確認画面では「作成」をクリックします。

image.png

ステータスが「成功」になれば「閉じる」をクリックします。

その後、画面左メニューの「コンテナレジストリ」をクリックすると、レジストリが作成されているのが分かります。

image.png

D-2. コンテナレジストリの認証(ユーザ追加)設定

レジストリ名をクリックし、「ユーザ」のタブをクリックします。それから、右下に「追加」ボタンがありますので、クリックします。

image.png

それから「ユーザ名」と「パスワード」を入力し、「作成」をクリックします。

image.png

画面上にユーザが作成されているのを確認します。

image.png

D-3. コンテナレジストリにログイン

再び SSH で接続中のサーバに戻り、 docker login [コンテナレジストリのホスト名] コマンドで、先ほどの認証情報を使ってログインします。

$ docker login [コンテナレジストリのホスト名]
Username: [ユーザ名]
Password: [パスワード]
Login Succeeded

たとえば sample00 という名前で作った場合、コンテナレジストリのホスト名は sample00.sakuracr.jp です。次のように「Login Succeeded」と出たら成功です。

実行例:

$ docker login sample00.sakuracr.jp
Username: demo
Password:

WARNING! Your credentials are stored unencrypted in '/home/ubuntu/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/

Login Succeeded

D-4. イメージの送信準備と送信

先ほど作成した Docker イメージを送信するには、 docker tag コマンドを使い、送信先のコンテナレジストリ名をイメージ名に含める必要があります。

  • 現在のイメージ名とタグ「myapp:latest」
  • 追加するイメージ名とタグ「コンテナレジストリのホスト名/myapp:latest」

以下はDockerイメージ myapp:latestsample00.sakuracr.jp/myapp:latest タグを付ける例です。例のように 自分のコンテナレジストリ名 で置き換えてコマンドを実行します。

docker tag myapp:latest sample00.sakuracr.jp/myapp:latest

コマンド実行後、 docker images コマンドを実行すると、コンテナレジストリ名が付与されたイメージが見えます。

$ docker images
REPOSITORY                   TAG       IMAGE ID       CREATED          SIZE
myapp                        latest    1871bf0fbc3c   33 minutes ago   134MB
sample00.sakuracr.jp/myapp   latest    1871bf0fbc3c   33 minutes ago   134MB

これで準備が整いましたので、 docker push 作成した新しいイメージ名とタグ コマンドを実行し、コンテナレジストリにアップロードします。

実行例:

$ docker push sample00.sakuracr.jp/myapp:latest
The push refers to repository [sample00.sakuracr.jp/myapp]
a588f7bce934: Pushed
8fac52c8cc1e: Pushed
95577337e4d3: Pushed
d4eb1fe7417b: Pushed
755063e06eb9: Pushed
8d4a4dec3291: Pushed
7fb72a7d1a8e: Pushed
latest: digest: sha256:609f1d5b2d68e08b38f08a056dcf6263952d76f2176dea20f02197ec471f9df8 size: 1783

ここでアップロードしたイメージ名 例:sample00.sakuracr.jp/myapp:latest は、この後の AppRun のアプリケーション実行時に使いますので、エディタ等に控えておきます。

E. AppRun でアプリケーションの実行

E-1. AppRunのアプリケーション作成と実行

AppRun のコントロールパネルを開きます。

開いたら「アプリケーション作成」ボタンがあるので、クリックします。

それから、以下の項目を指定します。

  • アプリケーション名: myapp
  • ポート設定: 8000
  • コンテナイメージ: 例:sample00.sakuracr.jp/myapp:latest ※先ほど自分でレジストリにアップロードしたイメージ名
  • コンテナレジストリアクセス設定:ユーザ名、パスワード ※コンテナレジストリ作成時に準備したユーザ情報

これらを指定したあと、画面右下の「作成する」ボタンをクリックします。

ステータスが「正常」になれば、アプリケーションの作成完了です。

image.png

「公開URL」をクリックすると、画面上に「Hello from AppRun!」が表示されます。

E-2. トラブルシューティング

うまくいかない場合は・・・・

実行後の「アプリケーション構成を変更してデプロイ」ボタンを押すと、再度設定内容を確認できます。レジストリ名があっているかどうかや、ポート番号指定、認証情報(ユーザ名、パスワード)が正しいかどうか確認します。

レジストリの指定が上手くいかない場合 registry-example2.sakuracr.jp/my-app:latest をご利用ください。ユーザ名、パスワードの指定が不要なサンプルリポジトリです。

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?