これのために 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
参考
- https://stackoverflow.com/questions/42510002/how-to-clear-the-logs-properly-for-a-docker-container
- https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file