GCP でDocker イメージを作る(tutorial のフォロー)


GCPの Cloud Build で Docker のクイックスタート をフォローしてみました。

はまりポイントのメモと、最後に結局動かせなかった、という悲しいメモです。

GCPの設定関係

以前に作成したプロジェクトは作成してあるものを確認。

$ gcloud projects list

なんだかAPIというのが分からないので作り直した。console.cloud.google.com を開きましょう。

Cloud build APIを有効に

Project を新たに作り、"Cloud Build API"を有効にします。ここでGCP プロジェクトでの API の有効化を参考にしようとしましたが、サービスとAPIが同じものを指しているのか、よく分かりませんでしたが、特に問題にはならず。

まず、Projectを選択し、「+APIとサービスを有効化」のボタンを押します。

どのサービスを有効にするかですが、検索窓でCloud Build と入力すると、Cloud Build APIを選択できます。

それで有効にすると、できたっぽいです。料金はとりあえずはかかっていなそう様子。

gcloud のupdate

$ gcloud components update

を実行しますが、権限が無いと言われる。管理者権限でpower shell を立ち上げたところ、update できたみたい。あとは

$ gcloud auth login
$ gcloud config set project \[Project ID\]

Windows でのchmod

その後、quickstart.sh と DockerFile を作成します。quickstart.sh を chmod +x しろと指示があるのですが、power shell からできません。git bash で chmod +x してもダメ。Windows だと icacls を使うようです。

> icacls quickstart.sh  /grant Everyone:RX
処理ファイル: quickstart.sh
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
> icacls quickstart.sh
quickstart.sh Everyone:(RX)
              LAPTOP-MF1SNQEP\xapyt:(RX)
              NT AUTHORITY\SYSTEM:(I)(F)
              BUILTIN\Administrators:(I)(F)
              LAPTOP-MF1SNQEP\xapyt:(I)(F)

と出ているが、後で結局権限がないと言われました。

(追加) 別の方法として、

git add --chmod=+x -- quickstart.sh

で権限を与えたのですが、それでもだめでした。

イメージの作成

DockerFile を用いてイメージ quichstart-imnage を作ります。

$ gcloud builds submit --tag gcr.io/[PROJECT_ID]/quickstart-image .

更に、cloudbuild.yaml を作成して、こちらからもbuild してみます。

gcloud builds submit --config cloudbuild.yaml .

cloudbuild.yaml は以下のファイルです。Tutorial に書かれています。

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'

GCPのツールにある Cloud Build で、build したものを確認できます。
GCPのツールにある Container Rgistry にはプロジェクトで作成したイメージがあります。

Docker でrun しようとしますが、先ほどのquichstart.sh で実行権限を与えていなかったので、動かず。

> docker run gcr.io/projectID/quickstart-image
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"/quickstart.sh\": permission denied": unknown.

権限についてはいろいろ試したがダメ。膨大な時間をつぎ込んだ挙句敗退。ここまででした。

イメージの削除

最後にGCPのブラウザの Container Registry でイメージを消しました。イメージ名がフォルダになっていて、中に入ると、「リポジトリ」があるので、それを「削除」します。そのフォルダの中身がなくなると、イメージ名も勝手に消えるようでした。」

参考