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.
Auf öffentliche Images in Container Registry oder Artifact Registry zugreifen
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
Auf private Images in Container Registry oder Artifact Registry zugreifen
Bei Versionen ab Meilenstein 60 ist in Container-Optimized OS-Images docker-credential-gcr
vorinstalliert. Für den Zugriff auf private Images in Artifact Registry oder Container Registry wird diese Methode empfohlen.
Führen Sie den folgenden Befehl aus, um docker-credential-gcr
zu verwenden:
Artifact Registry
docker-credential-gcr configure-docker --registries LOCATION-docker.pkg.dev
Ersetzen Sie LOCATION durch den Standort Ihres Repositorys.
Container Registry
docker-credential-gcr configure-docker
Die Ausgabe sieht so aus:
/home/username/.docker/config.json configured to use this credential helper
Mit dem folgenden Befehl führen Sie ein Image aus der Registry aus:
Artifact Registry
docker run --rm LOCATION-docker.pkg.dev/your-project/repository/your-image
Ersetzen Sie LOCATION durch den Standort Ihres Repositorys.
Container Registry
docker run --rm gcr.io/your-project/your-image
Folgende Container Registry-Hostnamen werden unterstützt:
- us.gcr.io
- eu.gcr.io
- asia.gcr.io
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
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
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 --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 so konfigurieren, dass Images aus dem Registry-Cache abgerufen werden
Sie können den Docker-Daemon so konfigurieren, dass Images mithilfe von Registry-Spiegelungen aus einem Registry-Cache abgerufen werden.
Konfigurieren Sie den Daemon so, dass die Option
registry-mirror
auf eine der folgenden Arten verwendet wird:- Fügen Sie in der Datei
/etc/default/docker
die Optionregistry-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 vorhandeneDOCKER_OPTS
an:
sed -i -e 's|"$| --registry-mirror=https://mirror.gcr.io"|' /etc/default/docker
- Fügen Sie in der Datei
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
Das Hinzufügen einer Konfiguration zu /etc/default/docker
wird beim Neustart nicht beibehalten.
Damit Ihre Docker-Konfiguration auch bei Neustarts beibehalten wird, sollten Sie die Befehle entweder im cloud-init
-Skript der Instanz-Metadaten im cloud-config
-Format einfügen oder in startup script
.
Im folgenden Beispiel wird das Format cloud-config
für die Konfiguration einer registry-mirror
verwendet:
#cloud-config
runcmd:
- echo 'DOCKER_OPTS="--registry-mirror=https://mirror.gcr.io"' | tee /etc/default/docker
- systemctl daemon-reload
- 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.
- Prüfen Sie, ob der Kubernetes-Master durch Öffnen von Port 443 in Ihrer Firewall erreicht werden kann.
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
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