GCE で docker を使ってみた

これのために POstgreSQL 10系をどうしても使いたかったのが発端。

Cloud SQL 使えば?

ちら見したら 9.6 だったので却下。
ちなみに AWS も10系ではなかった。
サポートなくてもいいから使わせて…

GKE 気になる…

よろしい、ならば GKE 使いこなすわ!と意気込んで設定していたら一番安いマシンタイプの f1-micro だと何故かノード数が最低3必要なので g1-small よりチョットダケ安いくらいだった。

個人サービスにしては金銭的に厳しさがあるので却下。

おとなしく GCE に docker 乗せる

直接 VM 上に PostgreSQL 入れても良さそうだったけど、パッケージのメンテとかが面倒だったのでこれも却下。

そんなときには Container-Optimized OS を使うと良いらしい。

コンテナをすぐに起動: Container-Optimized OS インスタンスには Docker ランタイムと cloud-init があらかじめインストールされています。>Container-Optimized OS インスタンスを使用すると、VM を作成すると同時に Docker コンテナを起動することができます。ホスト上での設定は必要ありません。
攻撃される範囲が減少: Container-Optimized OS はフットプリントが小さいので、インスタンスを攻撃される潜在的な範囲が減少します。
デフォルトで遮断: Container-Optimized OS インスタンスには、遮断されたファイアウォールやその他のセキュリティ設定がデフォルトで行われています。
自動アップデート: Container-Optimized OS インスタンスは、毎週のアップデートをバックグラウンドで自動的にダウンロードするように設定されています。

https://cloud.google.com/container-optimized-os/docs/concepts/features-and-benefits

面倒だったのでブラウザからインスタンス作成

  • Container-Optimized OS を選択
  • 外からつなげるように外部IPアドレスを作成
  • プロジェクト全体の SSH 認証鍵をブロック
    別途専用の認証鍵を作成してセットしておく
    ssh-keygen -t ed25519 -N "" -C "" -f ~/.ssh/key

作成した VM に SSH 接続

git と docker コマンドは使えるが docker-compose コマンドは使えなかった

docker-compose を使えるようにする
https://cloud.google.com/community/tutorials/docker-compose-on-container-optimized-os

docker-compose のイメージを取得する

docker run docker/compose:1.13.0 version

エイリアスを設定する

echo alias docker-compose="'"'docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v "$PWD:/rootfs/$PWD" \
    -w="/rootfs/$PWD" \
    docker/compose:1.13.0'"'" >> ~/.bashrc

設定を読み込む

source ~/.bashrc

バージョンを確認

docker-compose -v

PostgreSQL を起動

docker-compose.yml に設定を書く。

version: '3'
services:
  gameprofile_db:
    image: postgres:10.3
    ports:
      - 5432:5432
    volumes:
      - database_data:/var/lib/postgresql/data
    environment:
      TZ: Asia/Tokyo
      POSTGRES_USER: xxxxx
      POSTGRES_PASSWORD: xxxxx
      POSTGRES_DB: xxxxx
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
volumes:
  database_data:
    driver: local
docker-compose up -d

外からつなげるか確認

つながらない。うん。

GCP > VPC ネットワーク > ファイアウォール ルール から 5432 ポートを開放するルールを作成し、インスタンスに適用する。

再度確認。つながった!

ついでに念の為IPアドレス制限もしておくと良い。

余談

書いておいてなんだけど、結局使うのをやめましたw

参考