シングル仮想マシンで CloudFoundry PaaS を動かすメモ 


Cloud Foundry のオールインワン・サーバーを PC上の仮想マシンで動かすことができる PCF Dev を動作させたメモです。 自分のMacで、Cloud Foundry が動作して、cf login でログインして、cf push でランタイムを起動できます。 また、cf m でマーケットプレイスのサービスのリストを表示できます。 なんというか、BluemixのCFランタイム環境が自分のPCで動作するワクワク環境です。

PCF Devの機能のリストは、参考資料(4)にあります。 Docker Support、Routing などもあり、Bluemix を利用する前に練習するには、ベストな環境かもしれません。

![スクリーンショット 2017-08-04 11.01.06.png](https://qiita-image-store.s3.amazonaws.com/0/42829/6320954e-9ef8-fecf-5943-1d37fa89debc.png "スクリーンショット 2017-08-04 11.01.06.png")


## 前提条件

* 仮想マシンへ 4GB RAMを割り当てられるメモリ搭載のPC
* VirtualBox ver5以上
* CF CLIをインストール 参考資料(1)


## セットアップ作業

PCF Dev をインストールします。 参考資料(2)のウェブページから、Windows,Mac,Linuxから選んでダウンロードします。 ダウンロードにあたり、Pivotal へのユーザー登録が必要になります。 そして、セットアップの手順は、参考資料(3)にあります。 この資料に沿って、起動していきます。

それから、PCF Dev のマニュアルの場所は、参考資料(4)です。


## CloudFoundry 仮想マシンの起動

次のコマンドで、CF CLIに、dev サブコマンドのプラグインが導入されます。

~~~
imac:cloudFoundry maho$ ./pcfdev-v0.26.0+PCF1.10.0-osx 
Plugin successfully installed. Current version: 0.26.0. For more info run: cf dev help
~~~

cfコマンドから、仮想マシンを起動します。この時、Pivotal に登録したユーザーIDとパスワードが必要です。 起動には、3.4GHzのCPUでも、10分以上必要です。

~~~
imac:cloudFoundry maho$ cf dev start
Please sign in with your Pivotal Network account.
Need an account? Join Pivotal Network: https://network.pivotal.io

Email> takara9@gmail.com

Password> **************
Downloading VM...

Progress: |====================>| 100% 
VM downloaded.
Allocating 4096 MB out of 16384 MB total system memory (5949 MB free).
Importing VM...
Starting VM...
Provisioning VM...
Waiting for services to start...

 _______  _______  _______    ______   _______  __   __
|       ||       ||       |  |      | |       ||  | |  |
|    _  ||       ||    ___|  |  _    ||    ___||  |_|  |
|   |_| ||       ||   |___   | | |   ||   |___ |       |
|    ___||      _||    ___|  | |_|   ||    ___||       |
|   |    |     |_ |   |      |       ||   |___  |     |
|___|    |_______||___|      |______| |_______|  |___|
is now running.
To begin using PCF Dev, please run:
   cf login -a https://api.local.pcfdev.io --skip-ssl-validation
Apps Manager URL: https://local.pcfdev.io
Admin user => Email: admin / Password: admin
Regular user => Email: user / Password: pass

~~~


## ポータル Apps Manager へのアクセス

この https://local.pcfdev.io/ アドレスにアクセスすると、ログイン画面が表示されます。 Emailに"user", Passwordに"pass"でログインできます。 

![スクリーンショット 2017-08-04 11.05.47.png](https://qiita-image-store.s3.amazonaws.com/0/42829/fd648b95-159e-244e-e712-8bdf865747d4.png "スクリーンショット 2017-08-04 11.05.47.png")

ログイン後の画面です。

![スクリーンショット 2017-08-04 11.09.02.png](https://qiita-image-store.s3.amazonaws.com/0/42829/42ecd428-46fe-f81e-0472-6c44a076c583.png "スクリーンショット 2017-08-04 11.09.02.png")




## CFログイン

~~~
imac:cloudFoundry maho$ cf login -a https://api.local.pcfdev.io --skip-ssl-validation
API エンドポイント: https://api.local.pcfdev.io

Email> user 

Password> 
認証中です...
OK

組織 pcfdev-org をターゲットにしました

スペース pcfdev-space をターゲットにしました


                      
API エンドポイント:   https://api.local.pcfdev.io (API バージョン: 2.75.0)
ユーザー:             user
組織:                 pcfdev-org
スペース:             pcfdev-space
~~~

## ビルドパックのリスト


~~~
imac:cloudFoundry maho$ cf buildpacks
ビルドパックを取得しています...

buildpack               位置   有効   ロック済み   ファイル名
java_buildpack          1      true   false        java-buildpack-offline-v3.13.zip
ruby_buildpack          2      true   false        ruby_buildpack-cached-v1.6.34.zip
nodejs_buildpack        3      true   false        nodejs_buildpack-cached-v1.5.29.zip
go_buildpack            4      true   false        go_buildpack-cached-v1.7.18.zip
python_buildpack        5      true   false        python_buildpack-cached-v1.5.15.zip
php_buildpack           6      true   false        php_buildpack-cached-v4.3.26.zip
staticfile_buildpack    7      true   false        staticfile_buildpack-cached-v1.3.17.zip
binary_buildpack        8      true   false        binary_buildpack-cached-v1.0.9.zip
dotnet-core_buildpack   9      true   false        dotnet-core_buildpack-cached-v1.0.11.zip
~~~


## 最小のアプリの起動

エディタで、phpの最小のアプリを書きます。

~~~
imac:php maho$ vi index.php
imac:php maho$ cat index.php
<?php

phpinfo();

?>

imac:php maho$ ls -la
total 8
drwxr-xr-x  3 maho  staff  102  8  4 00:52 .
drwxr-xr-x  5 maho  staff  170  8  4 00:51 ..
-rw-r--r--  1 maho  staff   23  8  4 00:52 index.php
~~~


上記ディレクトリから、CFサーバーへプッシュします。

~~~
imac:php maho$ cf push test
user としてアプリ test を組織 pcfdev-org / スペース pcfdev-space 内に作成しています...
OK

経路 test.local.pcfdev.io を作成しています...
OK

test.local.pcfdev.io を test にバインドしています...
OK

test をアップロードしています...
次のパスからアプリ・ファイルをアップロードしています: /Users/maho/Vagrant/cloudFoundry/php
161B、1 個のファイルをアップロードしています
Done uploading               
OK


user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ test を開始しています...
Downloading dotnet-core_buildpack...
Downloading python_buildpack...
Downloading ruby_buildpack...
Downloading binary_buildpack...
Downloading java_buildpack...
Downloaded binary_buildpack (49.1K)
Downloading php_buildpack...
Downloaded java_buildpack (244.5M)
Downloading go_buildpack...
Downloaded ruby_buildpack (280.2M)
Downloading nodejs_buildpack...
Downloaded python_buildpack (296.8M)
Downloading staticfile_buildpack...
Downloaded staticfile_buildpack
Downloaded php_buildpack (419M)
Downloaded dotnet-core_buildpack (437.4M)
Downloaded nodejs_buildpack (78M)
Downloaded go_buildpack (392M)
Creating container
Successfully created container
Downloading app package...
Downloaded app package (191B)
Staging...
-------> Buildpack version 4.3.26
Installing HTTPD
HTTPD 2.4.25
Downloaded [file:///tmp/buildpacks/1643ca986d44a6d525386b8fe28cabf5/dependencies/https___buildpacks.cloudfoundry.org_dependencies_httpd_httpd-2.4.25-linux-x64.tgz] to [/tmp]
Installing PHP
PHP 5.5.38
Downloaded [file:///tmp/buildpacks/1643ca986d44a6d525386b8fe28cabf5/dependencies/https___buildpacks.cloudfoundry.org_dependencies_php_php-5.5.38-linux-x64-1485208781.tgz] to [/tmp]
Finished: [2017-08-03 15:56:32.821847]
Exit status 0
Staging complete
Uploading droplet, build artifacts cache...
Uploading build artifacts cache...
Uploading droplet...
Uploaded build artifacts cache (196B)
Uploaded droplet (53.2M)
Uploading complete
Destroying container
Successfully destroyed container

1 個の中の 1 個のインスタンスが実行中です

アプリが開始されました


OK

アプリ test はコマンド `$HOME/.bp/bin/start` を使用して開始されました

user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ test の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 1/1
使用: 256M x 1 インスタンス
URL: test.local.pcfdev.io
最終アップロード日時: Thu Aug 3 15:52:45 UTC 2017
スタック: cflinuxfs2
ビルドパック: php 4.3.26

     状態   開始日時                 CPU    メモリー        ディスク        詳細
#0   実行   2017-08-04 12:56:59 AM   0.0%   256M の中の 0   512M の中の 0
~~~


## アプリの起動確認

アプリのリストを出して、アプリのURLを調べます。

~~~
imac:bluemix-test maho$ cf apps
user として組織 pcfdev-org / スペース pcfdev-space 内のアプリを取得しています...
OK

名前   要求された状態   インスタンス   メモリー   ディスク   URL
test   started          1/1            256M       512M       test.local.pcfdev.io
~~~

ブラウザからアクセスして確認します。

![スクリーンショット 2017-08-04 0.58.50.png](https://qiita-image-store.s3.amazonaws.com/0/42829/0f64ee33-052a-245a-6d0b-bab449107c33.png "スクリーンショット 2017-08-04 0.58.50.png")





## マーケットプレイスのサービスのリスト

~~~
imac:php maho$ cf m
user として組織 pcfdev-org / スペース pcfdev-space 内のマーケットプレイスからサービスを取得しています...
OK

サービス       プラン            説明
local-volume   free-local-disk   Local service docs: https://github.com/cloudfoundry-incubator/local-volume-release/
p-mysql        512mb, 1gb        MySQL databases on demand
p-rabbitmq     standard          RabbitMQ is a robust and scalable high-performance multi-protocol messaging broker.
p-redis        shared-vm         Redis service to provide a key-value store

ヒント:  特定のサービスの個々のプランの説明を表示するには、'cf marketplace -s SERVICE' を使用します。
~~~

### サービスの詳細、プランの表示

~~~
imac:bluemix-test maho$ cf m -s p-mysql
user としてサービス p-mysql のサービス・プラン情報を取得しています...
OK

サービス・プラン   説明                   無料または有料
512mb              PCF Dev MySQL Server   free
1gb                PCF Dev MySQL Server   free
~~~

### サービスの作成

~~~
imac:bluemix-test maho$ cf cs p-mysql 512mb mydb
user としてサービス・インスタンス mydb を組織 pcfdev-org / スペース pcfdev-space 内に作成しています...
OK
~~~

### サービスのリスト

~~~
imac:bluemix-test maho$ cf s
user として組織 pcfdev-org / スペース pcfdev-space 内のサービスを取得しています...
OK

名前   サービス   プラン   バインド済みアプリ   最後の操作
mydb   p-mysql    512mb                         create は成功しました
~~~


### アプリとサービスのバインド

~~~
imac:bluemix-test maho$ cf bs test mydb
user としてサービス mydb を組織 pcfdev-org / スペース pcfdev-space 内のアプリ test にバインドしています...
OK
ヒント: 確実に環境変数の変更が有効になるようにするには、'cf restage test' を使用します
imac:bluemix-test maho$ cf restage test
user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ test を再ステージングしています...
~~~


### アプリのVCAP環境変数の表示

~~~

imac:bluemix-test maho$ cf env test
user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ test の環境変数を取得しています...
OK

システム提供:
{
 "VCAP_SERVICES": {
  "p-mysql": [
   {
    "credentials": {
     "hostname": "mysql-broker.local.pcfdev.io",
     "jdbcUrl": "jdbc:mysql://mysql-broker.local.pcfdev.io:3306/cf_fdd7ae5c_cc78_4b64_947b_e642694cfca9?user=A6rWjAd2vbSr5vrL\u0026password=kS2aT13BKnoBNMXF",
     "name": "cf_fdd7ae5c_cc78_4b64_947b_e642694cfca9",
     "password": "kS2aT13BKnoBNMXF",
     "port": 3306,
     "uri": "mysql://A6rWjAd2vbSr5vrL:kS2aT13BKnoBNMXF@mysql-broker.local.pcfdev.io:3306/cf_fdd7ae5c_cc78_4b64_947b_e642694cfca9?reconnect=true",
     "username": "A6rWjAd2vbSr5vrL"
    },
    "label": "p-mysql",
    "name": "mydb",
    "plan": "512mb",
    "provider": null,
    "syslog_drain_url": null,
    "tags": [
     "mysql"
    ],
    "volume_mounts": []
   }
  ]
 }
}

{
 "VCAP_APPLICATION": {
~~~


## Docker コンテナを動かす

Bluemix では、Dockerのコンテナの事を IBM Container と主張している。 bx ic というコマンドを動作させるために、ローカル側にdockerのインストールが必要であっても IBM Container なのだ。 この謎が PCF Dev を動かすことで解けた。 bx ic から始まるプラグインで動作させる Dockerコンテナは、IBM独自実装ということらしい。（注意:未確認の意見です） 

以下のコマンドで、DockerHubからイメージを取得して、ウェブアプリケーションを動作させることができます。

~~~
imac:bluemix-test maho$ cf push my-app --docker-image cloudfoundry/test-app
user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ my-app を更新しています...
OK



user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ my-app を開始しています...
Creating container
Successfully created container
Staging...
Staging process started ...
Staging process finished
Exit status 0
Staging Complete
Destroying container
Successfully destroyed container

1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 0 個のインスタンスが実行中です, 1 個が開始中です
1 個の中の 1 個のインスタンスが実行中です

アプリが開始されました


OK

アプリ my-app はコマンド `/test-app ` を使用して開始されました

user として組織 pcfdev-org / スペース pcfdev-space 内のアプリ my-app の正常性と状況を表示しています...
OK

要求された状態: started
インスタンス: 1/1
使用: 256M x 1 インスタンス
URL: my-app.local.pcfdev.io
最終アップロード日時: Fri Aug 4 02:38:55 UTC 2017
スタック: cflinuxfs2
ビルドパック: unknown

     状態   開始日時                 CPU    メモリー        ディスク        詳細
#0   実行   2017-08-04 11:39:25 AM   0.0%   256M の中の 0   512M の中の 0
~~~

Buildpack: null になってるから、Dockerコンテナで動作しているみたいです。

![スクリーンショット 2017-08-04 11.54.00.png](https://qiita-image-store.s3.amazonaws.com/0/42829/95cdd982-74f0-9ed7-f6fa-9d99216689b5.png "スクリーンショット 2017-08-04 11.54.00.png")

以下が、Dockerのアプリのウェブ画面です。

![スクリーンショット 2017-08-04 11.55.18.png](https://qiita-image-store.s3.amazonaws.com/0/42829/25ae3d1b-afb7-f402-f9d5-6062b3e1e8bd.png "スクリーンショット 2017-08-04 11.55.18.png")




# 参考資料
(1) Cloud Foundry Documentation Installing the cf CLI https://docs.cloudfoundry.org/cf-cli/install-go-cli.html
(2) Pivotal Network PCF Dev https://network.pivotal.io/products/pcfdev#/releases/4905
(3) GitHub pivotal-cf/pcfdev https://github.com/pivotal-cf/pcfdev
(4) Pivotal Documentation PCF Dev Overview http://docs.pivotal.io/pcf-dev/index.html