Google Container Engine(GKE)でコンテナを起動する際に、dockerイメージの保管場所にGoogle Container Registryを使用する方法です。
ローカルでdockerイメージを作成 -> Google Container Registryにpush -> pushしたdockerイメージをGKEで利用する、といった手順になります。
環境
- ローカルPC
- PC:MacBook Pro
- OS:OS X El Capitan(ver 10.11.6)
- Docker:Docker for Mac[stable] ver 1.12.1(build:12133)
前提
下記フォルダ構成で、各種リソースをローカルに配置することを前提としています。
gke-test
|--Dockerfile
|--html
|--index.html
Google Cloud SKDのインストール
ローカルからGoogle Container Registryにdockerイメージをpushする為に、Google Cloud SDKを下記よりインストールします。
Google Cloud SDKのインストール
dockerイメージの作成
自分で作成したイメージがGKEで使用されていることを確認する為に、簡単なHTMLファイルをnginxの公開用フォルダに格納して、それをdockerイメージにします。
・HTMLファイルの作成
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>nginx test</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
・Dockerfileの作成
公式のnginxイメージをベースに、作成したhtmlファイルをnginxの公開フォルダにコピーするDockerfileを作成します。
FROM nginx
COPY html /usr/share/nginx/html
・dockerイメージの作成
Dockerfileを元にdockerイメージを作成します。
Google Container Registryにpushできるようにする為に、作成するdockerイメージには「リージョン/プロジェクトID/イメージ名:タグ」の形式で名前をつけています。
$ cd gke-test
$ docker build -t gcr.io/xxxxxx-xxxxxx-123456/mynginx:latest .
なお、Google Container Registryで使用できるリージョンは
リージョン | 地域 |
---|---|
us.gcr.io | アメリカ |
es.gcr.io | ヨーロッパ |
asia.gcr.io | アジア |
となっていて、gcr.ioと指定した場合は、us.gcr.ioを指定したことになり、アメリカのリージョンを利用することになります。
また、プロジェクトIDはGoogle Cloud Platform上のプロジェクトIDを指定して下さい。
Google Container Registryへdockerイメージをpush
dockerイメージの作成が完了したら、Google Container Registryへdockerイメージをpushします。
先にインストールしたGoogle Cloud SDKを使用してpushを行います。
$ gcloud docker push gcr.io/xxxxxx-xxxxxx-123456/mynginx:latest
pushに成功すれば下記のようにGoogle Container Resitoryにイメージが保管されたことを確認できます。
pushしたdockerイメージの利用
前回と同じ構成で、ReplicationController、Serviceを立ち上げます。
その際、ReplicationControllerで使用するdockerイメージにGoogle Container Registryに保管したものを使用するように、ReplicationControllerのyamlファイルを修正します。
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: gcr.io/xxxxxx-xxxxxx-123456/mynginx:latest #変更箇所
ports:
- containerPort: 80
ReplicationController、Serviceの起動
前回と同じ方法で、ReplicationControllerとServiceを立ち上げます。
立ち上げた後にブラウザでアクセスして、用意したindex.htmlファイルの内容が表示されれば成功です。
最後に
Google Container Registryにdockerイメージを保管するまでのやり方を把握するのに少し時間を要しました。
しかし、一度やり方がわかってしまえば、プライベートなDocker Registryを簡単に利用でき、GKEとの連携も特別な設定が不要なのですごく便利だと思います。