ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

CGP(GCE)でコンテナを実行する

TL;DR

  • Google Compute Engine で上で任意・単一の docker コンテナを実行して ssh ログインしたい
  • 何でもいいからとりあえずクラウド上でコンテナ動かしてみたいな程度のモチベ
  • ちょっと設定書くだけで済むからめっちゃ楽ちんだよ

1次情報

こちら --> https://cloud.google.com/compute/docs/containers/deploying-containers?hl=ja 要約すると

  • Compute Engine へ docker コンテナをデプロイすることが可能
  • 「デプロイする」が何のことを指すのかは明記されてない
  • インスタンス1コンテナしか想定してないよ

試しに

python コンテナデプロイ付きのインスタンスを作成する

  • Google Cloud Platform にログイン
  • ホーム左枠の「コンピューティング --> Compute Engine --> VM インスタンス」から「インスタンスの作成」を選択
  • 「名前」は適当に埋める
  • 「マシンタイプ」は「f1-micro」に変更
    • こうすると Always Free 枠に収まる
    • テスト目的なので $300 の無料枠は使いたくない
  • 「この VM インスタンスにコンテナ イメージをデプロイします。」にチェック入れる
  • 「コンテナ イメージ」は「python
    • Docker Hub 公式イメージの場合諸々省略してイメージ名だけでも通る
    • フルネームの場合 registry.hub.docker.com/library/<dockerimagename> って書く
  • 「コンテナの詳細オプション」をクリック
  • 「STDIN のバッファの割り当て」と「疑似 TTY の割り当て」にチェックを入れる
    • python コンテナのエントリーポイントは python コマンドになっている
    • チェックを入れないと、標準入力から EOL が入力されるので python インタプリタが即落ちしてコンテナも即落ちする
    • インスタンス起動後にコンテナがずっと restarting になってる場合はこれが原因
  • 「作成」をクリック

コンテナにログインする(on Web)

  • ホーム左枠の「コンピューティング --> Compute Engine --> VM インスタンス」で作成したインスタンスの一覧が表示されてるはず
  • 目的のインスタンスの行の「接続」列の「SSH」をクリック
  • 暫く待つとターミナルが立ち上がる
  • ログイン直後に「エラー起きてるからログ見ろ(意訳)」みたいなメッセージが出てない事を確認
  • docker pspython イメージのコンテナの「STATUS」が「Up」になっていることを確認
  • docker exec -it <CONTAINER_NAME> bashbash ログインしてみる
    • <CONTAINER_NAME>docker ps で表示されたものを入れれば OK

コンテナにログインする(on gcloud)

ローカル PC に Google Cloud SDK を入れてる場合はローカルの端末からログイン可能。

  • 「Compute Engine」の「VM インスタンス」で作成したインスタンスの一覧が表示されてるはず
  • 目的のインスタンスの行の「接続」列の「SSH」の右の「▼」をクリック
  • 「gcloud コマンドを表示」をクリック
  • 「CLOUD SHELL で実行する」をクリック
  • コマンドが表示されるのでそれをローカル PC のコンソールにコピペして実行

ついでに

  • 末尾に --container <CONTAINER_NAME> を追加することでコンテナに直接ログイン可能らしい
  • でも実際やると何故かエラーで落ちる

注意点

  • インスタンス起動中はずっと料金が発生する
  • 無料枠の場合はその枠を消費する
  • 使い終わったらマメに落とさないと大変な事になる

感想など

  • インスタンス起動と同時に任意のコンテナを立ち上げる方法は分かった
  • コンテナの起動設定はなぜか docker コマンドのオプションとの対応関係をボカしててわかりにくい
  • stdin とか tty の設定しないと永久リブートになるやつでハマった
    • docker の事よく分かってなかったってのはある
    • 多分 web サーバーとかの起動しっぱなし系のイメージだとうまく行っていた
  • コンテナの終了をトリガーにしてインスタンスも落としたいんだけど、それをやりたい場合は自分でいろいろ組まないといけないらしい
  • 次はファイルシステムのマップでもやってみるか

参考