課題
GCEには 指定のコンテナをVMに適用する機能が存在する。
See: VM と MIG へのコンテナのデプロイ
[機能概要]
要するに 1VMに 1コンテナを配置するだけの機能である。つまりGKE的な観点で言えばリソースを最大限に活用しているとは言い難い。しかしVM上に直接環境を作るのに比べれば コンテナの可搬性を活かせるので便利である。
[利用法]
対象のコンテナイメージを Artifact Registry にアップロードし、VM作成時にそれを指定すれば起動時にコンテナが勝手に立ち上がる。
しかし、コンテナにAPIサーバーを指定しても、VM上からの curl で応答しないときがある。
ポート公開に失敗している風な挙動であり、docker run -p 8080:8080 ${コンテナID}
で立ち上げ直せば無事疎通するのだが、VM起動時に自動的に立ち上がるコンテナには -p
オプションを渡せない。一体どう指定すれば良いのだろうか?
解決
EXPOSE
を明記した Dockerfile
でイメージを再登録すると、起動時に指定のポートが割り当たる。
EXPOSE 8080
と指定すると VM起動時のポート割り当てが -p 8080:8080
相当になる。
普段 docker run -p
オプションや docker-compose.yml
上のport属性で割り当てるので、省略しがちな EXPOSE
だが、GCE上で稼働させるときはきちんと指定しないとハマるらしい。
以上は コンテナ・VM間の挙動だが、 VM外へのポート公開も暗黙的に行われるらしいので、そういう挙動と認識しておくのは重要な気がする。See:コンテナポートの公開