インスタンスでのコンテナの実行

Docker コンテナは、他のほとんどのノードイメージ ディストリビューションと同様の方法で、Container-Optimized OS を実行するマシン上で docker run コマンドを使用して実行できます。例:

docker run --rm busybox echo "hello world"

次の出力が表示されます。

Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
. . .
Status: Downloaded newer image for busybox:latest
hello world

メタデータで SSH 認証鍵を管理する場合、デフォルトでは、cos イメージ上で Compute Engine が管理するすべてのユーザー アカウントが docker グループに追加されます。これにより、どのユーザーもルート権限なしで docker コマンドを実行できます。 OS Login を使用して SSH 認証鍵を管理する場合は、ユーザー アカウントを docker グループに手動で追加する必要があります。あるいは、ユーザーが docker コマンドごとに sudo を追加する必要があります。

公開 Container Registry にアクセスする

Container Registry サポートは cos ノードイメージに組み込まれています。Container Registry からコンテナを起動するには、次のコマンドを実行します。

docker run --rm gcr.io/google-containers/busybox echo "hello world"

次の出力が表示されます。

Unable to find image 'gcr.io/google-containers/busybox:latest' locally
Pulling repository gcr.io/google-containers/busybox
. . .
Status: Downloaded newer image for gcr.io/google-containers/busybox:latest
hello world

専用 Container Registry にアクセスする

マイルストーン 60 リリース以降では、docker-credential-gcr が Container-Optimized OS イメージにプリインストールされています。これは非公開の Container Registry にアクセスするおすすめの手段です。

docker-credential-gcr を使用する場合は、次のコマンドを実行します。

docker-credential-gcr configure-docker

次の出力が表示されます。

/home/username/.docker/config.json configured to use this credential helper

Container Registry レジストリの場合、次のコマンドを使用します。

docker run --rm gcr.io/your-project/your-image

または、次の例のように、Compute Engine メタデータから適切な OAuth アクセス トークンを取得し、それらのトークンを docker login コマンドで手動入力します。

METADATA=http://metadata.google.internal/computeMetadata/v1
SVC_ACCT=$METADATA/instance/service-accounts/default
ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token | cut -d'"' -f 4)
docker login -u oauth2accesstoken -p $ACCESS_TOKEN https://gcr.io
docker run … gcr.io/your-project/your-image

サポート対象の Container Registry ホスト名は次のとおりです。

  • us.gcr.io
  • eu.gcr.io
  • asia.gcr.io

Container Registry での cloud-init の使用

cloud-init の例では、cloud-config 形式を使用して、DockerHub と呼ばれる Docker のコンテナ レジストリに保存されているイメージから Docker コンテナを起動します。下の例では、cloud-config 形式を使用して、Container Registry に保存されているイメージから Docker コンテナーを起動します。

#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container
    Wants=gcr-online.target
    After=gcr-online.target

    [Service]
    Environment="HOME=/home/cloudservice"
    ExecStartPre=/usr/bin/docker-credential-gcr configure-docker
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice gcr.io/google-containers/busybox:latest /bin/sleep 3600
    ExecStop=/usr/bin/docker stop mycloudservice
    ExecStopPost=/usr/bin/docker rm mycloudservice

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service

Kubernetes クラスタの実行

Google Cloud で Kubernetes クラスタを実行する場合は、Google Kubernetes Engine(GKE)の使用をおすすめします。ただし、セルフマネージド型のオープンソース Kubernetes を実行したい場合は、次の手順に沿って操作します。

  1. ファイアウォールでポート 443 を開くことで、Kubernetes マスターにアクセスできることを確認します。
  2. Kubernetes リリース バイナリをダウンロードして解凍し、次のようにクラスタを設定します。

    # Download and extract the latest kubernetes release.
    cd <empty-dir>
    KUBERNETES_VERSION="v1.4.6"
    curl -sSL -o kubernetes.tar.gz https://github.com/kubernetes/kubernetes/releases/download/${KUBERNETES_VERSION}/kubernetes.tar.gz
    tar xzf kubernetes.tar.gz
    cd kubernetes
    
    # Configure environment to use Container-Optimized OS
    export KUBE_OS_DISTRIBUTION=cos
    
    # Start up a cluster and verify that it is running:
    cluster/kube-up.sh
    cluster/kubectl.sh get nodes
    cluster/kubectl.sh get pods --namespace=kube-system
    
  3. 以上により、アプリケーションがクラスタで実行できます。たとえば、次のようにして Redis クラスタを起動できます。

    cluster/kubectl.sh create -f \
      examples/guestbook/all-in-one/guestbook-all-in-one.yaml
    cluster/kubectl.sh get pods
    cluster/kubectl.sh describe pods redis-master-pod-name
    

GKE クラスタの一部として実行されているインスタンスの場合、Docker と Kubelet のログも自動的に Google Cloud のオペレーション スイートのロギングにエクスポートされます。Docker、Kubelet、kube-proxy のログは、Google Cloud Console を使用している場合、Compute Engine VM インスタンスの Google Cloud のオペレーション スイートで利用できます。

クラスタが不要になったら、次のコマンドで破棄できます。

cluster/kube-down.sh