GCE上でDockerコンテナを動かす

こんにちは松原です。

Dockerイメージを使用して楽に構築を行いたいが、Docker ComposeやKubernetesを使用する程でもなく、単一のコンテナ運用を行いたいといったケースがあると思います。

GCPではGCE上で単一のコンテナ運用を簡単に行うことができます。

GCPにはコンテナ用に最適化されたOS「Container-Optimized OS」があります。
このOSはGKEの各ノードでも使用されるOSになります。

今回はMongoDBの公式イメージを使用してMongoDB環境を素早く構築していきます。

インスタンス作成

GCP Consoleからインスタンスの作成を行なっていきます。
「このVMインスタンスにコンテナイメージをデプロイします。」を選択することにより、コンテナ情報の入力画面が表示されます。
コンテナイメージ項目にdockerイメージ名、環境変数にrootユーザーの設定を入力します。

今回はDBデータを永続化させるために、外部ディスクに保存させます。
そのために外部ディスクの作成の設定を行います。
先ほどのコンテナ情報の入力画面のボリュームのマウントの項目で、コンテナに作成した外部ディスクをマウント設定します。
ファイアウォール設定のために、ネットワークタグを設定します。
これで「作成」ボタンを押してインスタンスを作成すれば終わりです。

ファイアウォール作成

外部からMongoDBへアクセスするために、先ほど設定したネットワークタグでデフォルトの27017ポートを開けます。

アクセス確認

あとはアクセスをするだけです。

$ mongosh "mongodb://xxx.xxx.xxx.xxx:27017" -u root -p example
Current Mongosh Log ID:	xxxxxxxxxxxx
Connecting to:		mongodb://xxx.xxx.xxx.xxx:27017/?directConnection=true
Using MongoDB:		5.0.2
Using Mongosh:		1.0.6
・・・

gcloudコマンドでの作成

gcloudコマンドで作成する場合はもっと素早く環境を作ることができます。

$ gcloud compute instances create-with-container mongo \
--machine-type=e2-medium \
--boot-disk-size=10GB \
--container-image=mongo \
--container-env=MONGO_INITDB_ROOT_USERNAME=root,MONGO_INITDB_ROOT_PASSWORD=example \
--container-mount-disk=name=mongo-disk,mount-path=/data/db,mode=rw \
--disk=name=mongo-disk,mode=rw,device-name=mongo-disk,auto-delete=false \
--tags=mongo

$ gcloud compute firewall-rules create mongo-fw \
--source-tags="mongo" \
--source-ranges="xxx.xxx.xxx.xxx/32" \
-allow=tcp:27017