【GCP入門編・第8回】 Container Registry での Docker イメージの使用方法!

【GCP入門編・第8回】 Container Registry での Docker イメージの使用方法!

この記事では、 Container Registry に自分で作成したコンテナイメージを登録し、 Google Container Engine にデプロイする方法を解説します。

この記事の目的

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 アプリケーションのフォルダは以下のようになっているかと思います。
01.jpg
このディレクトリに、 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 .

02.jpg
“Successfully build ...” というメッセージが表示されたら、イメージの作成は完了です。ローカル環境で試しに動かしてみましょう。

$ docker run -p 8000:8000 hello-world-container

03.jpg
コンテナが起動し、8000番ポートで gunicorn が動きましたでしょうか。ブラウザで、 http://127.0.0.1:8000/ にアクセスしてみましょう。
04.jpg
上記の画面のように、メッセージが表示されていれば、イメージの作成は完了です。次にこちらのイメージを 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

05.png
次に、このコンテナイメージを Container Registry にアップロードします。

$ gcloud docker -- push gcr.io/プロジェクトID/hello-world-container

06.png
アップロードが完了すると、上記のような出力がなされます。
コンソールの Container Engine のページにある、 Container Registry から、登録したイメージを参照することが可能です。
07.png
さて、それでは登録したイメージを使ってコンテナを起動してみましょう。
コンソールを開き、メニューの Container Engine をクリックし、クラスターの起動画面を開きます。
08.jpg
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

09.png
Pod の起動が完了したら、 Service を作成して外部からのアクセスが可能なようにします。

$ kubectl expose deployment hello-world --type=LoadBalancer

10.png
起動が完了したら、以下のコマンドで IP を確認しましょう。

$ kubectl describe services hello-world

11.png
Events: の項目に ”Created Load balancer” と表示されれば、サービスへのアクセスが可能になります。ブラウザで、 http://LoadBalancer Ingress の IPアドレス:8000/ を開きましょう。
下の図のように、 App Engine にデプロイした hello-world アプリケーションと同じものが見えると思います。
12.png

おわりに

いかがでしたでしょうか。 Container Registry を使うことで、自分で作成したコンテナイメージを簡単にプライベートなレジストリにアップロードし、 Google Container Engine にデプロイすることが可能です。この方法では開発環境と同じイメージを本番環境で使うため、開発環境と本番環境の差も少なく、よりシームレスに開発とデプロイを行えるのではないでしょうか。



弊社トップゲートでは、Google Cloud (GCP) 利用料3%OFFや支払代行手数料無料、請求書払い可能など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の最新情報が満載!

メルマガ登録はこちら

関連記事

Contactお問い合わせ

Google Cloud / Google Workspace導入に関するお問い合わせ

03-6387-9250 10:00〜19:00(土日祝は除く)
Top