[GCP] Google Cloud Container Registry について

2019年10月25日

Dockerのイメージをpush / pull したいため、Google Cloudを使ってみようと思います。

Container Registryとは、Dockerのコンテナイメージを保存・管理・保護するためのリポジトリになります。

今回初めてということで、push / pullをするところまでやってみようと思います。

スポンサーリンク

Container Registry

Google Cloud Platform で実行される非公開のコンテナ イメージ レジストリです。Container Registry は、Docker イメージ マニフェスト V2 と OCI イメージをサポートしています。

引用元:https://cloud.google.com/container-registry/docs/overview?hl=ja

Dockerでのイメージ管理で、DockerHubでの公開リポジトリを使用することが多いとは思いますが、非公開の自分用リポジトリが欲しかったため利用することにしました。

特徴

導入メリットとして、脆弱性スキャンやリスクのあるイメージのブロックなどの対応が特に良いと思いました。

気になる方は、以下をチェック!

https://cloud.google.com/container-registry/?hl=ja

使ってみよう

早速触りながら、慣れていこうと思います。

事前準備

以下の準備が必要となります。
参考:https://cloud.google.com/sdk/docs/quickstart-macos?hl=ja

  1. Google Cloud Platformにてプロジェクト作成
  2. システムに Python 2.7 がインストールされていることを確認
  3. google-cloud-sdkのインストール

SDKのインスール完了後に以下を実行。

// ホームディレクトリで実行
$ ./google-cloud-sdk/install.sh

gcloudコマンド

Google Cloud Platform でメインとなる CLI ツールです。このツールを使用すると、コマンドラインから、またはスクリプトや他の自動化により、多くの一般的なプラットフォーム タスクを実行できます

引用元:https://cloud.google.com/sdk/gcloud/?hl=ja
// gcloudが利用できること
$ gcloud --version
Google Cloud SDK 245.0.0
....

SDK を初期化する

こちらのSDKの初期化を参考にしてみます。
https://cloud.google.com/sdk/docs/quickstart-macos?hl=ja
Google Cloud Platform にSDKツールを認証するためのようです。

$ gcloud init
・・・・・いくつか質問されるので、回答してきます。
ログインで利用するユーザーやプロジェクトを選択する番号を入力します。
Google Compute Engine API が有効になっている場合は、リージョンを設定できます。
リージョン一覧:https://cloud.google.com/compute/docs/regions-zones/?hl=ja
自分の場合「asia-northeast1」 -> 東京のゾーンを選択しました。

認証情報など確認してみる

初期化が完了するとSDKの認証情報などが確認できるようになります。

// アクティブユーザーに*がついている
$ gcloud auth list
     Credentialed Accounts
ACTIVE  ACCOUNT
*       XXXXXX@XXXXX.XXXX
// プロパティーの情報もみれます
$ gcloud config list
[compute]
region = asia-northeast1
zone = asia-northeast1-b
[core]
account = XXXX@XXXX.XXXX
.....
Your active configuration is: [default]

Dockerをインストール(まだの人だけ)

push / pull作業する環境は、それぞれだと思います。以下を元にお手元の環境に合わせて実施ください。ほぼ、公式サイトに情報が載ってましたので、 気になった点だけ記載してます。

Linux環境の方

Ubuntu や Debian など、Linux ベースのオペレーティング システムを使用している場合は、ユーザー名を docker グループに追加して、sudo を使用しなくても Docker を実行できるようにします。


https://cloud.google.com/container-registry/docs/quickstart?hl=ja
$ sudo usermod -a -G docker ${USER}

Docker For Macの方

すでに自分はMacにDocker入っていましたので、macで実施してます。

設定がまだの方は、以下のサイト様がわかりやすくて、参考になりそうでした。https://aprico-media.com/posts/2375

Docker設定後

// dockerが動作していることを確認
$ docker run busybox date

Docker imageをpush

やっとpushできるところまできました!!
クイックスタートにあるDockerfileでpushしてみましょう!
https://cloud.google.com/container-registry/docs/quickstart?hl=ja

$ mkdir testPush   なんでも大丈夫です
$ cd testPush
// 3 つのファイルを作成(公式さんのコード利用しています)
$ touch Dockerfile requirements.txt app.py
$ vi Dockerfile
# The Dockerfile defines the image's environment
# Import Python runtime and set up working directory
FROM python:2.7-alpine
WORKDIR /app
ADD . /app
# Install any necessary dependencies
RUN pip install -r requirements.txt
# Open port 80 for serving the webpage
EXPOSE 80
# Run app.py when the container launches
CMD ["python", "app.py"]
$ vi requirements.txt
# This file defines the image's dependencies
Flask
$ vi app.py
# The Docker image contains the following code
from flask import Flask
import os
import socket
app = Flask(__name__)
@app.route("/")
def hello():
    html = "<h3>Hello, World!</h3>"
    return html
if __name__ == "__main__":
  app.run(host='0.0.0.0', port=80)

ファイルが準備できましたので、ビルドしてpushしてみましょう!

ビルド

// ビルド
$ docker build -t quickstart-image .
// 初回のみ
$ gcloud auth configure-docker
// タグつけ
$ docker tag quickstart-image gcr.io/[PROJECT-ID]/quickstart-image:tag1
// プロジェクトIDわからない場合
$ gcloud projects list
// イメージ確認
$ docker image list
...タグつけしたイメージが存在すると思います。

push

ここでやっとpushまできました!

$ docker push gcr.io/[PROJECT-ID]/quickstart-image:tag1

しばし待って完了したら、Google Cloud PlatformへContainer Registryにpushしたイメージが登録されていると思います。

pull

$ docker pull gcr.io/[PROJECT-ID]/quickstart-image:tag1

クリーンアップしておく

今回練習で作業したため、課金されないようにもimageを消しておきます。

$ gcloud container images delete gcr.io/[PROJECT-ID]/quickstart-image:tag1 --force-delete-tags

念のため、Google Cloud Platform上でも消えているか確認しました。

まとめ

push / pullに関して、すごい簡単でした。gcloud関連が自分は、まだ慣れていないため、事前準備などの方に時間を取られてしまいました。

個人で自分は利用していますが、自分で非公開レジストリ立てたりするのも大変そうだなと思って、今回試してみました。

無料クレジットもありますし、色々触ってみようと思います。