技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

Docker on Google Compute Engine【GCP】

GCPを使って外部IPを立てる選択肢

外部IPを立てるにはいくつか選択肢があります。


GKEを使う場合、Kubernetesを使うので外部IPが動的になります。

GCEを使う場合、IPを固定にすることが可能です。クライアント先のサーバーにアクセスするなど、固定IPが求められるケースではGCEを使うことになるかもしれません。固定IPを実現するために、Cloud NATという選択肢もあります。

GCEで固定IPを実現する方法は2つあります。

  • Dockerのコンテナを使用する
  • Linux OSを使用する

ここではDockerによる方法のうち、つまづきやすいポイントを紹介します。

方法はGCP公式、もしくは検索すればわかりやすい記事がたくさんあるのでそちらを参照ください。


Docker on GCEのつまりポイント

  • ポートの開放
    • Dockerで80ポート以外を利用しているとき(コードなどで指定していて「:3001」などでアクセスする必要がある場合)、VMインスタンスのファイアーウォールに応じて、VPCネットワーク > ファイアーウォールルール > 「default_allow~」のポートを編集する
    • 編集例「tcp:80,3001」
  • VMインスタンスを再起動すると、外部IPが変わる
    • これは「エフェメラル」を選択している場合
    • 固定にするにはIPを予約する必要がある。公式を参照
  • Volume をマウントする
    • 「ホスト」のパスはGCEのインスタンス上のパス
    • 「ホスト」に対してファイルなどをアップロードする際、gcloudコマンドの他、GCPコンソールから実行できる
    • 「マウント」のパスは、root(/)を指定できない。これはDockerのルール。Dockerfile上でRUN mkdir ~でdirを作ってそれを使うか、tmpなどコンテナ既存のdirを使う


また、SSH接続を使って外部IPにアクセスする際、秘密鍵VMインスタンスで扱うことがあるかと思います。

公開鍵方式でSSH ハンドシェイクのエラーになるときは、接続先の誤りや秘密鍵に問題があります。catコマンドで確認して一見問題ないように思えても、秘密鍵を置き換えてみると成功したケースがあったので、秘密鍵の置き換えも視野に入れておいた方がいいかもしれません。