Dev > PaaS > CloudFoundry > PCF
Feb 7, 2019
Feb 12, 2019
N/A Views
MD
warning
この記事は2年以上前に更新されたものです。情報が古くなっている可能性があります。

例えばPostgreSQLを使う際、本番環境ではRDSを使うけど、開発環境ではRDSは使いたくない、けれどもMarketplaceになくてセットアップするのが面倒。という時に、Docker Imageを使ってPostgreSQLをCloud Foundryにデプロイできます。
通常のCloud FoundryアプリケーションではHTTPリクエストしか受け付けられませんが、
Container to Container Networkingを使うことでコンテナ間はTCP/UDPアクセス可能です。

つまり、Docker + Container to Container NetworkingでPostgreSQLをCloud Foundryにデプロイしてアプリケーションからアクセスすることが可能です。
ただし、永続ボリュームではないのでコンテナをリスタートするたびにデータは消滅しますので、ちょっとした開発用やデモ用途限定です。

PostgreSQLのデプロイ

次のmanifest.ymlを用意します。

applications:
- name: postgres
  health-check-type: process
  memory: 256m
  docker:
    image: postgres:9.6.10
  routes:
  - route: postgres.apps.internal
  env:
    POSTGRES_USER: vcap
    POSTGRES_PASSWORD: my-secret
    POSTGRES_DB: demo
    PGDATA: /tmp/data
    POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C

デプロイします。

Docker Imageのデプロイが有効で、かつCloud FoundryのService Discoveryが使えることが必須です。

cf push

これでPostgreSQLがデプロイできました。apps.internalドメインを使うのがポイントです。
外向けにはルーティングされません。

ちなみに、TCP Routingの機能を利用すれば外向けにルーティング可能です。

アプリのデプロイ

次のmanifest.ymlを用意します。Spring Bootで作ったアプリを前提としています。

applications:
- name: demo
  path: target/demo-0.0.1-SNAPSHOT.jar
  env:
    SPRING_DATASOURCE_URL: jdbc:postgresql://postgres.apps.internal:5432/demo
    SPRING_DATASOURCE_USERNAME: vcap
    SPRING_DATASOURCE_PASSWORD: my-secret

--no-startをつけてデプロイします。その後、demoからpostgresへのネットワークポリシーを定義し、5432ポートへのアクセスを許可します。
そしてstartします。

cf push --no-start
cf add-network-policy demo --destination-app postgres  --protocol tcp --port 5432
cf start demo
Found a mistake? Update the entry.
Share this article: