GCE: コンテナをデプロイする#

Published on 2020-07-07 00:00:00

本記事では、GCEにコンテナをデプロイする方法を紹介します。

GCEでDockerイメージをホストするには以下を実施します。

  1. Dockerイメージをアップロードする

  2. VMインスタンスを作成する

  3. 公開する

Dockerイメージをアップロードする#

Google Cloud Platform内でコンテナイメージを参照できるように、 Google Container RegistryにDockerイメージをアップロードします。

注釈

本節の説明は Container Registry のクイックスタート をかいつまんだ概要となっています。不明な点はリンク先を参照してください。

まず、Dockerfileからイメージを作成します。

$ docker build -t [image_name]:[tag_name] .

次に、見分けがつくように専用のタグをつけます。

$ docker tag [image_name]:[tag_name] us.gcr.io/[PROJECT-ID]/[image_name]:[tag_name]

※ us.gcr.ioはgoogle container registryのホスト名です。他にもasia.gcr.ioやeu.gcr.io等があります。

最後に、アップロードします。

$ docker push us.gcr.io/[PROJECT-ID]/[image_name]:[tag_name]

アップロードしたイメージはGoogle Cloud PlatformのPROJECT-IDに該当するプロジェクトのContainer Registryで確認することができます。

../../../_images/google_container_registry.png

image_name毎にディレクトリが作成されます。#

VMインスタンスを作成する#

コンテナイメージのアップロードができたので、次はそれを用いてVMインスタンスを作成します。 Google Compute Engineを開き、「インスタンスを作成」をクリックすると、

../../../_images/gce_create_vm_instance.png

以下のページが開きます。

../../../_images/gce_create_vm_instance_input1.png

各入力は以下のようにします。

  • 名前:識別のためのインスタンス名をつけます。

  • リージョン:データセンターの場所を選択します。always freeで利用するためus-central1としています。

  • ゾーン:適当に選びます。

  • マシンの構成:always freeで利用するためf1-microとしています。

../../../_images/gce_create_vm_instance_input2.png
  • コンテナ:「このVMインスタンスにコンテナイメージをデプロイします。」にチェック

  • コンテナイメージ:コンテナのタグを入力します。ex) us.gcr.io/[PROJECT-ID]/[image_name]:[tag_name]

  • コンテナの詳細オプション->環境変数:必要な環境変数を入力します。(PhoenixならSECRET_KEY_BASE等)

  • ブートディスク:コンテナをホストするOSですが、適切なイメージが選択されるので変更不要です。

../../../_images/gce_create_vm_instance_input3.png
  • ファイアウォール:Webサーバー(Phoenix等)をホストする場合はチェックを入れます。

入力が完了したら、作成をクリックします。

VMインスタンスにSSHする#

作成したVMインスタンスにはSSHできます。

VMインスタンスの詳細を開き、SSHボタンをクリックします。

../../../_images/gce_ssh_vm_instance.png

少しまつと、接続が完了し、以下の画面が開きます。

../../../_images/gce_ssh_view.png

コンテナの状態は、docker container list でコンテナIDを調べ、 docker attach で確認することができます。

always freeについて#

Google CloudにはAlways Freeと呼ばれる無料枠 が存在します。

各サービスごとに無料となる条件及び上限枠が決まっていますので、確認して利用するとよいです。

公開する#

インスタンス作成時には エフェメラル外部IPアドレス が与えられます。

このIPアドレスはインスタンスの再起動で解放/再取得されるため、公開するには 静的外部IPアドレス の予約が必要です。

VPCネットワーク->外部IPアドレスのページを開き、

../../../_images/gce_vpc_static_ip.png

種類をエフェメラルから静的に変更します。

後は、さくらのドメインやお名前ドットコム等のお使いのサービスでゾーン編集をし、 外部アドレスと名前を紐付ければ公開できます。

注釈

イメージ内でlet's encryptのcertbotを動作させたくない場合、Cloudflareを使う選択肢があります。

Container Optimized OS を モニタリングする#

metadataとして google-monitoring-enabled=true を付加すると起動時に systemctl start stackdriver-logging/stackdriver-monitoring が実行される。 これによって、モニタリング、ロギングができる。

ロギングできるのは、 google-monitoring-enabled=true の付加をすると自動的に google-logging-enabled=true も付加されるからだった。

ただし、 stackdriver-logging は f1-micro には負荷が大きいようで、モニタリングが行われない、SSH ができなくなるなどが起きた。 これに対処する場合は、 google-logging-enabled=true は削除すればよいが、GUI経由では(おそくらバグで)消すことができず、gcloudコマンド経由で行う必要がある。

また、COSの /etc/docker/daemon.json は cloud-init で書き変えることができるので、 log-driver をjounaldに変更する等ができる。