【GCP入門編・第8回】 Container Registry での Docker イメージの使用方法!
- Cloud
- GCP入門編
- docker
この記事では、 Container Registry に自分で作成したコンテナイメージを登録し、 Google Container Engine にデプロイする方法を解説します。
目次
この記事の目的
- hello-world アプリケーションの Dockerfile を作成する
- Docker イメージをContainer Registry に登録する
- hello-world アプリケーションをGKEで動かす
Container Registry とは
Container Registry は、 Google が GCP のサービスの一部として提供するプライベートな Docker registry です。Docker Hub のように、イメージのアップロードやダウンロードを行うことができ、かつプロジェクトの外からはアクセスすることができないため、自前で Docker イメージを作成してデプロイする、といった作業をする際に必要となるサービスです。
Container Registry は、”コンテナイメージを登録する”、”Google Container Engine で使用する”といった基本的な機能に加え、 Jenkins や CircleCI, drone.io といった人気のある CI サービスとの統合もサポートしています。このため、 CI サーバーでビルドが通ったら自動的にコンテナイメージをデプロイする、という継続的デリバリーにも使用することが可能です。
Container Registry に自分の Docker イメージを登録する
今回は、自分で作った Docker イメージを Container Engine 上で使用する方法を解説します。まず、こちらの【GCP入門編・第5回】Google App Engine (GAE) でのアプリケーション起動方法!で作成した、 hello-world アプリケーションが動作するコンテナイメージを作成します。次に、ローカルの環境で動作を確認したのちに、 Container Registry にアップロードします。最後に、 Google Container Engine 上でクラスターを立ち上げ、アップロードしたイメージをデプロイします。
それでは、カスタムの Docker イメージを作成していきましょう。まず【GCP入門編・第5回】Google App Engine (GAE) でのアプリケーション起動方法!を参考に、ローカルの環境に hello-world アプリケーションを作成します。作成が終了した時点で、 hello-world アプリケーションのフォルダは以下のようになっているかと思います。
このディレクトリに、 Dockerfile を設置し、 docker コマンドでイメージを作成していきます。お使いの環境に Docker Engine がインストールされていない場合は、こちらを参考に Docker をインストールしましょう。
Docker Engine のインストールが完了したら、 hello-world アプリケーションのディレクトリに Dockerfile を設置します。お好きなエディタを使って、以下の内容の Dockerfile を作成します。
FROM library/ubuntu:trusty
LABEL description="Hello World Application"
RUN apt-get update && \
apt-get -y install python gunicorn python-flask
RUN mkdir /srv/hello-world
COPY . /srv/hello-world
WORKDIR /srv/hello-world
EXPOSE 8000
ENTRYPOINT ["/usr/bin/gunicorn", "-b", ":8000", "main:app"]
Dockerfile という名前で保存したら、ターミナル画面に戻り、イメージのビルドを行います。以下のコマンドでイメージのビルドが開始されます。
$ docker build -t hello-world-container .
“Successfully build ...” というメッセージが表示されたら、イメージの作成は完了です。ローカル環境で試しに動かしてみましょう。
$ docker run -p 8000:8000 hello-world-container
コンテナが起動し、8000番ポートで gunicorn が動きましたでしょうか。ブラウザで、 http://127.0.0.1:8000/ にアクセスしてみましょう。
上記の画面のように、メッセージが表示されていれば、イメージの作成は完了です。次にこちらのイメージを Container Registry に登録していきましょう。
コンテナイメージの Container Registry への登録は、 gcloud コマンドを利用します。
まず、 Container Registry のタグについて説明します。 Container Registry のタグは以下の構成となっています。
gcr.io/プロジェクトID/コンテナイメージの名前
今回使うイメージは hello-world-container ですので、タグは以下の通りです。
gcr.io/プロジェクトID/hello-world-container
このタグをイメージに付与することによって、 gcloud コマンドでの Container Registry への登録が可能になります。まず、イメージにタグをつけます。
$ docker tag hello-world-container gcr.io/プロジェクトID/hello-world-container
特に出力はありません。下記のコマンドで、タグがつけられたことがわかります。
$ docker image ls
次に、このコンテナイメージを Container Registry にアップロードします。
$ gcloud docker -- push gcr.io/プロジェクトID/hello-world-container
アップロードが完了すると、上記のような出力がなされます。
コンソールの Container Engine のページにある、 Container Registry から、登録したイメージを参照することが可能です。
さて、それでは登録したイメージを使ってコンテナを起動してみましょう。
コンソールを開き、メニューの Container Engine をクリックし、クラスターの起動画面を開きます。
Zone は asia-northeast1-a, Size は1を指定し、 [Create] をクリックします。
クラスターが起動したら、ターミナルに戻ります。認証情報を取得します。
$ gcloud container clusters get-credentials cluster-1
次に、 kubectl で Pod を起動します。 --image の引数には、先ほどアップロードしたコンテナイメージのタグを入力します。
$ kubectl run hello-world --image=gcr.io/プロジェクトID/hello-world-container --port=8000
Pod の起動が完了したら、 Service を作成して外部からのアクセスが可能なようにします。
$ kubectl expose deployment hello-world --type=LoadBalancer
起動が完了したら、以下のコマンドで IP を確認しましょう。
$ kubectl describe services hello-world
Events: の項目に ”Created Load balancer” と表示されれば、サービスへのアクセスが可能になります。ブラウザで、 http://LoadBalancer Ingress の IPアドレス:8000/ を開きましょう。
下の図のように、 App Engine にデプロイした hello-world アプリケーションと同じものが見えると思います。
おわりに
いかがでしたでしょうか。 Container Registry を使うことで、自分で作成したコンテナイメージを簡単にプライベートなレジストリにアップロードし、 Google Container Engine にデプロイすることが可能です。この方法では開発環境と同じイメージを本番環境で使うため、開発環境と本番環境の差も少なく、よりシームレスに開発とデプロイを行えるのではないでしょうか。
弊社トップゲートでは、Google Cloud (GCP) 利用料3%OFFや支払代行手数料無料、請求書払い可能などGoogle Cloud (GCP)をお得に便利に利用できます。さらに専門的な知見を活かし、
- Google Cloud (GCP)支払い代行
- システム構築からアプリケーション開発
- Google Cloud (GCP)運用サポート
- Google Cloud (GCP)に関する技術サポート、コンサルティング
など幅広くあなたのビジネスを加速させるためにサポートをワンストップで対応することが可能です。
Google Workspace(旧G Suite)に関しても、実績に裏付けられた技術力やさまざまな導入支援実績があります。あなたの状況に最適な利用方法の提案から運用のサポートまでのあなたに寄り添ったサポートを実現します!
Google Cloud (GCP)、またはGoogle Workspace(旧G Suite)の導入をご検討をされている方はお気軽にお問い合わせください。
お問合せはこちら
メール登録者数3万件!TOPGATE MAGAZINE大好評配信中!
Google Cloud(GCP)、Google Workspace(旧G Suite) 、TOPGATEの最新情報が満載!