Arukasハンズオン資料 - 基本操作編

# はじめに

この記事は、

Arukasハンズオン受講者の方を対象とした、**基本操作の説明**です！

目標：**練習用アプリで基本操作を学習すること！**
難易度：**初級、中級**
所要時間：**30分**

**この記事に書かれている内容を一通り実行することで、**

* **コントロールパネルの一般的な機能**
* **アプリの操作（作成、起動、編集、停止、削除）**
* **インスタンス数の変更（スケールイン/スケールアウト）**

**を学習することができます！**

## Arukasアカウントをまだ登録されていない人は・・・

**Arukasアカウントの登録からはじめてください！**
=> **参考資料：[Arukasハンズオン資料 - 事前準備編](http://qiita.com/uzyexe/items/da74385ae7e6439bf55a)**

## 基本操作なんて知ってるよ！という人は・・・

**その他のハンズオンに進んでOKです！**

=> **[Arukasハンズオン資料 - おまけ編](http://qiita.com/uzyexe/items/e0c34959ed22b81e535a)**
=> **[Arukasハンズオン資料 - サービス連携編](http://qiita.com/uzyexe/items/d621aef8e5023936824a)**

## 用語説明

* **API**： *Application Program Interface*。APIを利用すると、プログラムから各種機能を呼び出せる。
* **Dockerfile**： Dockerイメージ化したいアプリケーション環境の構成を定義するファイル。
* **Dockerイメージ：** Dockerfileに定義された構成でイメージファイル化されたアプリケーション環境。
* **スケールアウト：** システムの数を増やすことで、システム群全体のパフォーマンスを向上させること。
* **スケールイン：** システムの数を減らすことで、システム群全体のパフォーマンスを低減すること。
* **コントロールパネル：** Webブラウザからアクセスできる管理画面。WebUI。コンパネとも呼ぶ。
* **デプロイ：** システムを利用可能な状態にすること。システムの配置、展開。

## 注意事項

* **ブラウザの言語設定が英語になっている方**
 * **コンパネの各項目が英語表記になります！**
 * **うまく読み替えるか、日本語設定に変更してハンズオンを進めてください！**

# コントロールパネル

最初にコントロールパネルの機能を確認していきましょう！

**コントロールパネルを使うことで、アプリを管理することができます！**

まずはコントロールパネルの機能を覚えないと何もできません！

## サイドバー

* **APIキーボタン：**APIキーの管理ページに移動します。
* **ログアウトボタン：** コントロールパネルからログアウトします。

![arukas_ucp_tooltip.png](https://qiita-image-store.s3.amazonaws.com/0/123644/a5e7e01a-5bf9-4478-91df-d1da8d7ee368.png)


## メニューバー

* **アプリ一覧：** 作成したアプリの一覧。
* **アプリ作成ボタン：** アプリ作成画面に移動します。

![arukas_ucp_menu.png](https://qiita-image-store.s3.amazonaws.com/0/123644/37ca82d1-dafe-2e3d-056f-830c0dbee28a.png)

## メインパネル

* **検索バー：** 検索したい自分のアプリ名を入力することで、アプリの一覧の中から検索できます。
* **アプリ一覧：** 作成したアプリの一覧。
* **アプリ操作ボタン：** アプリを編集、起動、停止、削除することができます。
* **アプリ作成ボタン：** アプリ作成画面に移動します。
* **ヘルプボタン：** ヘルプの検索、サポートへのお問い合わせフォームが表示されます。

![arukas_ucp_main.png](https://qiita-image-store.s3.amazonaws.com/0/123644/996d703b-7218-5cc1-13fb-e0d911ebc75a.png)

# ハンズオン開始！

コントロールパネルの機能は覚えましたか？

**ここからがハンズオン本番**です！

気合を入れていきましょう！

## １．アプリの作成

**まずは簡単なアプリを作成してみましょう！**

**アプリ作成ボタンをクリック！**

![arukas_ucp_create_button_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/bd439a1b-ceb4-0cfa-bd46-e83b291ab174.png)

**次の項目を間違えずに入力してください！**

![arukas_ucp_create_myapp.png](https://qiita-image-store.s3.amazonaws.com/0/123644/8a6dcdfb-8dc6-fc8f-88f3-f43815199db5.png)

> **APP Name**（アプリの名前）**：** `myapp`
> **Image**（Dockerイメージ名）**：** `dockercloud/hello-world`
> **Endpoint**（エンドポイント）**：** お好みで名前を英数字で入力してください。
> **Port**（アプリのポート番号）**：** `80` `tcp`

ハンズオン中は、焦らずコピー＆ペースト（コピペ）で入力していきましょう。

![arukas_ucp_create2_button_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/e8a9b374-fbeb-2233-ceac-d06c6405fc20.png)

**最後に『アプリケーションを作成』ボタンをクリックすると・・・**

![arukas_ucp_created_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/06119a86-fc6d-303d-5ad2-2beb459103ba.png)

**`myapp` アプリとして `dockercloud/hello-world` が登録されました！**

以上で、アプリの作成は完了です！

## ２．アプリの起動

アプリは作成できましたか？

**作成したアプリを起動してみましょう！**

![start_button.png](https://qiita-image-store.s3.amazonaws.com/0/123644/96e28f91-11fd-f66b-5ebb-0268c243a589.png) **起動ボタンをクリック！**

![arukas_ucp_start_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/0d810d87-644c-5ae4-ac97-858c87773f41.png)

**確認ダイアログが表示されます。OKボタンをクリック！**

![arukas_ucp_start_tooltip.png](https://qiita-image-store.s3.amazonaws.com/0/123644/677f3f7e-a876-0b33-7337-ce52cc6f96e9.png)

**アプリのデプロイが開始されます！**

![arukas_ucp_deploying_myapp2.png](https://qiita-image-store.s3.amazonaws.com/0/123644/fbc4b03d-8d3e-c03e-1389-9884a4d442a3.png)

**ほとんどのアプリは、1分程度でデプロイが完了してアプリが起動します。**

ちなみに、`dockercloud/hello-world` は、Docker公式の練習用Hello worldイメージです。
=> [Docker Hub - dockercloud/hello-world](https://hub.docker.com/r/dockercloud/hello-world/) ([**Dockerfile**](https://github.com/docker/dockercloud-hello-world))

![arukas_ucp_runing_myapp2.png](https://qiita-image-store.s3.amazonaws.com/0/123644/6f4b8faa-d285-fde1-4c91-89080be3c79e.png)

**アプリが起動されました！**

まだデプロイ中のままだったら、アプリに入力したパラメータに入力ミスがないか確認してみてください。

15分経過してもアプリが起動しないときには、『起動失敗』のステータスになります。そのような場合も、アプリに入力したパラメータに入力ミスがないか確認してから、起動ボタンをクリックしてアプリの起動をもう一度試してください。

**以上で、アプリの起動は完了です！**

**パラーメータの指定ミスなどがなければ、一般的なクラウドサービスと比較すると、起動時間がとても早いことを確認できました！**

**入力内容確認に進みましょう！**

## ３．入力内容確認

**`myapp`アプリ に入力した内容を確認しましょう！**

**アプリの名前をクリックして、アプリ詳細画面に移動！**

![arukas_ucp_app_property.png](https://qiita-image-store.s3.amazonaws.com/0/123644/ca501eab-0ed8-1eea-060d-cdedaaf29235.png)

**`myapp` に入力した内容を確認してください！**

![arukas_ucp_created_myapp.png](https://qiita-image-store.s3.amazonaws.com/0/123644/039a3f02-7399-d082-a1fe-c0f978121eb3.png)

> **APP Name**（アプリの名前）**：** `myapp`
> **Image**（Dockerイメージ名）**：** `dockercloud/hello-world`
> **Endpoint**（エンドポイント）**：** 入力した名前。
> **Port**（アプリのポート番号）**：** `80/tcp`

**入力内容にミスがなければOKです！**

※ もし、入力ミスを見つけたら、右上にある![edit_button.png](https://qiita-image-store.s3.amazonaws.com/0/123644/6056c281-a8df-d279-7335-ef46a721a905.png) 編集ボタンをクリックして修正ください。

**以上で、入力内容確認は完了です！**

## ４．動作確認

**`myapp`アプリ に Web アクセスできることを確認しましょう！**

**アプリの Endpoint（エンドポイント）に表示されている URL をクリック！** 

![arukas_ucp_endpoint_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/e6dc9559-c9ad-01b1-8917-6503c0281bd1.png)

**クジラ と Hello world! は表示されましたか？**

![docker-hello-world.png](https://qiita-image-store.s3.amazonaws.com/0/123644/9af93220-2aec-b5c1-edfd-667eaba81318.png)

**クジラ と Hello world! がちゃんと表示されていれば、エンドポイントを経由して `myapp` アプリの80番(HTTP)ポートに正しくアクセスできている状態です！**

図にするとこんな感じです。

![7bd30343-6230-b0b8-e1fa-c0be0b4d9591.png](https://qiita-image-store.s3.amazonaws.com/0/123644/1af3e7b3-a013-cb34-9394-97d0726a2bbd.png)

もし、`503 Error` が表示されたら、10秒くらい時間を置いてからブラウザを F5 キーで更新（リロード）してみてください。（アプリが起動してから、エンドポイントが起動するまでに最大 30 秒かかることがあるためです。）

**以上で、アプリの動作確認は完了です！**

## ５．インスタンス数の変更

Arukas では、簡単にインスタンス数を変更することができます。

**今度はインスタンス数を 3 に変更してみましょう！**

![arukas_ucp_edit_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/95aa6081-6769-fca4-17c8-661889f7bd01.png)

![edit_button.png](https://qiita-image-store.s3.amazonaws.com/0/123644/7efcdd6a-7a83-c81a-2bb8-8b278a442585.png) **アプリ編集ボタンをクリック！**

![arukas_ucp_instance_edit_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/317e13ce-1dcb-9299-5dd5-230d0212152a.png)

**Instances を 3 に変更して、最後に保存ボタンをクリック！**

**すぐにインスタンス数が 3 台に変化します！**

![arukas_ucp_instance_3_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/a544d56c-1087-6ff9-37f8-f2ae61632da5.png)

※ 10秒くらい待っても 3 台に変化しないときには、F5キーでブラウザを更新（リロード）してみてください！

**アプリのインスタンス数が 3 台に増えたので、パフォーマンスも 3 台分にアップグレードされました！**

## ６．負荷分散の確認

**アプリが3台に増えたということは、Webアクセスも3台それぞれに負荷分散される・・・ということです！**

![arukas_ucp_instance_3_endpoint_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/7e1d02a4-e675-d683-8a4d-68eba0b816f3.png)


**では、アプリの Endpoint URL をクリック！**

![docker-hello-world.png](https://qiita-image-store.s3.amazonaws.com/0/123644/f5096f96-855f-a543-88a2-41eb4050bd54.png)

**クジラ と Hello world! が表示されましたね？**

**では、ここで『F5キー連打』でブラウザ更新（リロード）を繰り返してください。**

**連　打** です。 いっぱい **連　打** してください。 **連　打** です。 

![8ViqwAHx1v.gif](https://qiita-image-store.s3.amazonaws.com/0/123644/daa2dc52-7d59-0c40-f24c-80b13439e467.gif)

**ブラウザを更新したときに ホスト名 (My hostname is ...の部分) は変化してますか？**

**変化していたら、3台のインスタンスにWebアクセスが負荷分散されている状態です！**

図にするとこんな感じです。

![4d19d52e-e5d7-389f-59a1-6412dca3484d.png](https://qiita-image-store.s3.amazonaws.com/0/123644/926b2494-6b78-c136-58c4-99c94b2da874.png)

Arukasでは、インスタンス数を増減することで、アプリの上流にあるロードバランサーが自動設定され、エンドポイント経由でのアクセスはそれぞれのアプリに負荷分散されます。

ちなみに、Arukasのロードバランサー側の分散ポリシーはラウンドロビン（RR）ではなく、最小接続（*Least Connection*）です。新しいアクセスは、アクセス数が最も少ないインスタンスに向かいます。

なお、ロードバランサーの接続タイムアウト値は 60 秒として設定されているため、応答に時間がかかるようなコンバート処理（動画変換など）には向いていません。

**以上で、インスタンス数の変更は完了です！**

**背後にあるインフラを意識せずに、インスタンス数の設定を変更するだけで可用性の高い負荷分散構成ができあがりました！**

## ７．アプリの停止

**起動中のアプリを停止してみましょう！**

![arukas_ucp_stop_myapp.png](https://qiita-image-store.s3.amazonaws.com/0/123644/7bae687b-b742-6c7b-9216-ec179d21e9d9.png)

![stop_button.png](https://qiita-image-store.s3.amazonaws.com/0/123644/1cf59581-1cc0-e874-2c22-704ded004cc8.png) **停止ボタンをクリック！**

![arukas_ucp_stop_tooltip.png](https://qiita-image-store.s3.amazonaws.com/0/123644/71016f27-08fd-1fc9-e6c3-95cf8bfa58c1.png)

**確認ダイアログが表示されます！**

**・・・**

![arukas_ucp_stop_tooltip2x.png](https://qiita-image-store.s3.amazonaws.com/0/123644/a718e3d0-314f-0286-d31c-952bb0c85cf2.png)

**アプリを停止すると、アプリに保管されているデータは初期化されます！**

これは Docker の特徴です。データの永続化を必要とされる場合には、データを外部ストレージなどに保管する必要があります。保管先としては、S3互換オンラインストレージのほか、PaaS や BaaS のような外部クラウドサービスなどが挙げられます。

**OK を押して、アプリを停止しましょう！**



**アプリが停止しました！**

![arukas_ucp_stoped_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/e1e3701e-bf12-e201-1a5e-b8087d06a675.png)

**以上で、アプリの停止は完了です！**

## ８．アプリの削除

**アプリを削除しましょう！**

![delete_button.png](https://qiita-image-store.s3.amazonaws.com/0/123644/ca5456b7-2fe4-5c53-cd71-ef00d595879e.png) **削除ボタンをクリック！**

![arukas_ucp_delete_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/8ffdf67d-be99-4b7c-48ed-831537836cd3.png)

**確認ダイアログが表示されます。OKボタンをクリック！**

![arukas_ucp_delete_tooltip2.png](https://qiita-image-store.s3.amazonaws.com/0/123644/1626e955-7dcb-e97e-3550-964f3300124d.png)

**アプリを削除できました！**

![arukas_ucp_deleted_app.png](https://qiita-image-store.s3.amazonaws.com/0/123644/d3dd177d-562b-28f3-9e3e-92f960d8e8b7.png)

**以上で、基本操作編のハンズオンは完了です！**

# まとめ

* **Docker Hub にある Docker イメージをすぐに起動できる。**
* **入力ミスがあると起動に失敗する。**
* **負荷分散の仕組みが簡単に実現できる。**

# おさらい

**このハンズオンでは、これらの基本操作を学習することができました！**

* **コントロールパネルの一般的な機能**
* **アプリの操作（作成、起動、編集、停止、削除）**
* **インスタンス数の変更（スケールイン/スケールアウト）**

ちなみに、これらのことは Arukas に限らず、ほかのDockerコンテナホスティングでも同じようなことが実現できます。

**時間に余裕がある人は、次のハンズオンに進みましょう！**

# 続く

* **[前のハンズオンに戻る（Arukasハンズオン資料 - 事前準備編）](http://qiita.com/uzyexe/items/da74385ae7e6439bf55a)**
* **[次のハンズオンに進む（Arukasハンズオン資料 - おまけ編）](http://qiita.com/uzyexe/items/e0c34959ed22b81e535a)**