Container auf Instanzen ausführen

Mit dem Befehl docker run können Sie einen Docker-Container auf einem Computer ausführen, auf dem Container-Optimized OS ausgeführt wird, ähnlich wie auf den meisten anderen Knotenimagedistributionen. Beispiel:

docker run --rm busybox echo "hello world"

Die Ausgabe sieht so aus:

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

Wenn Sie SSH-Schlüssel in Metadaten verwalten, werden alle Nutzerkonten, die von Compute Engine im Image cos verwaltet werden, standardmäßig der Gruppe docker hinzugefügt. Dadurch kann jeder angemeldete Nutzer docker-Befehle ohne Root-Berechtigungen ausführen. Wenn Sie SSH-Schlüssel mithilfe von OS Login verwalten, muss das Nutzerkonto der Gruppe docker manuell hinzugefügt werden. Oder der Nutzer muss für jeden docker-Befehl sudo hinzufügen.

Zugriff auf die öffentliche Container Registry

Unterstützung für Google Container Registry ist in das cos-Knoten-Image integriert. Führen Sie Folgendes aus, um einen Container über die Container Registry zu starten:

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

Die Ausgabe sieht so aus:

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

Zugriff auf die privater Container Registry

Bei Versionen ab Meilenstein 60 ist in Container-Optimized OS-Images docker-credential-gcr vorinstalliert. Dies ist die empfohlene Methode, um auf die private Container Registry zuzugreifen.

Führen Sie den folgenden Befehl aus, um docker-credential-gcr zu verwenden:

docker-credential-gcr configure-docker

Die Ausgabe sieht so aus:

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

Verwenden Sie für Container Registry-registries den folgenden Befehl:

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

Alternativ können Sie die entsprechenden OAuth-Zugriffstoken aus Compute Engine-Metadaten abrufen und diese manuell mit dem Befehl docker login verwenden, wie im folgenden Beispiel gezeigt:

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

Folgende Container Registry-Hostnamen werden unterstützt:

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

cloud-init mit Container Registry verwenden

Dieses Beispiel für cloud-init verwendet das Cloud Config-Format, um einen Docker-Container aus einem Image zu starten, das in der Container-Registry von Docker namens DockerHub gespeichert ist. In dem Beispiel wird das Cloud Config-Format verwendet, um einen Docker-Container aus einem in der Container Registry gespeicherten Image zu starten:

#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

Docker-Daemon zum Abrufen von Images aus dem Registry-Cache konfigurieren

Sie können den Docker-Daemon so konfigurieren, dass Images mithilfe von Registry-Spiegelungen aus einem Registry-Cache abgerufen werden.

  1. Konfigurieren Sie den Daemon so, dass die Option registry-mirror auf eine der folgenden Arten verwendet wird:

    • Fügen Sie in der Datei /etc/docker/daemon.json die Option registry-mirror für die Registry hinzu (z. B. https://mirror.gcr.io):
    echo 'DOCKER_OPTS="--registry-mirror=https://mirror.gcr.io"' | tee /etc/default/docker
    
    • Hängen Sie in der Datei /etc/default/docker "--registry-mirror=https://mirror.gcr.io" an das vorhandene DOCKER_OPTS an:
    sed -i -e 's|"$| --registry-mirror=https://mirror.gcr.io"|' /etc/default/docker
    
  2. Nachdem Sie die Registry-Spiegelung hinzugefügt haben, starten Sie den Docker-Daemon neu, damit die Änderungen wirksam werden:

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

Kubernetes-Cluster ausführen

Zum Ausführen eines Kubernetes-Clusters in Google Cloud eignet sich Google Kubernetes Engine (GKE) am besten. Befolgen Sie diese Schritte, wenn Sie stattdessen eine selbstverwaltete Version des quelloffenen Kubernetes verwenden möchten.

  1. Prüfen Sie, ob der Kubernetes-Master durch Öffnen von Port 443 in Ihrer Firewall erreicht werden kann.
  2. Laden Sie die Release-Binärdateien von Kubernetes herunter, entpacken Sie diese und richten Sie den Cluster ein:

    # 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. Jetzt können Sie Ihre Anwendung auf dem Cluster ausführen. Sie können beispielsweise einen Redis-Cluster wie im folgenden Beispiel starten:

    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
    

Bei Instanzen, die als Teil eines GKE-Clusters ausgeführt werden, werden Docker- und Kubelet-Logs automatisch in das Loggingmodul der Operations Suite von Google Cloud exportiert. Logs für Docker, Kubelet und kube-proxy sind in der Google Cloud-Operations-Suite unter Compute Engine-VM-Instanz verfügbar, wenn Sie die Google Cloud-Konsole verwenden.

Sobald der Cluster nicht mehr benötigt wird, können Sie ihn auflösen:

cluster/kube-down.sh