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
cos
verwaltet werden, standardmäßig der Gruppe docker
hinzugefügt. Dadurch kann jeder angemeldete Nutzer docker
-Befehle ohne Root-Berechtigungen ausführen. Beim Verwalten von SSH
Schlüssel mit OS Login verwenden, muss das Nutzerkonto der Gruppe „docker
“ hinzugefügt werden
manuell. Andernfalls muss der Nutzer 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
Ab Meilenstein-Version 60
docker-credential-gcr
ist in Container-Optimized OS-Images 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
Führen Sie mit folgendem Befehl 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
Sie können die folgenden Container Registry-Hostnamen verwenden:
- us.gcr.io
- eu.gcr.io
- asia.gcr.io
Führen Sie den folgenden Befehl aus, um Docker mit sudo
zu verwenden. -E
-Befehlszeile
Flag sorgt dafür, dass Docker die Datei .docker/config.json
aus der Startseite eines Nutzers verwendet
anstelle des Stammverzeichnisses.
Artifact Registry
sudo -E docker run --rm LOCATION-docker.pkg.dev/your-project/repository/your-image
Ersetzen Sie LOCATION durch den Standort Ihres Repositorys.
Container Registry
sudo -E 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 er Images aus dem Registry-Cache abruft
Sie können den Docker-Daemon so konfigurieren, dass Images mithilfe von Registry-Spiegelungen aus einem Registry-Cache abgerufen werden.
Konfigurieren Sie den Daemon zur Verwendung der
registry-mirror
-Option auf eine der folgenden Arten:- 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 nach einem Neustart persistent bleibt,
sollten Sie die Befehle entweder im cloud-init
-Skript des
Metadaten im cloud-config
-Format
oder 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
Weitere Informationen zur Konfiguration einer Instanz mit cloud-init
finden Sie unter cloud-init mit dem Cloud-Konfigurationsformat verwenden.
Fehlerbehebung
Optionskonflikte zwischen Docker daemon.json
und Flags beheben
Wenn beim Konfigurieren des Docker-Daemon für eine Option gleichzeitig eine daemon.json
-Datei und Flags festgelegt sind, startet Docker nicht. Dabei wird ein Fehler ausgegeben, der folgendem ähnelt:
unable to configure the Docker daemon with file /etc/docker/daemon.json:
the following directives are specified both as a flag and in the configuration file:
Die empfohlene Lösung für diesen Konflikt besteht darin, die Standard-daemon.json
zu ändern, die sich in /etc/docker/daemon.json
befindet. Durch das Ändern dieser Datei können Sie nur die betroffenen Optionen ändern, während Sie die anderen Standardoptionen beibehalten. Dies kann mit cloud-init
erfolgen, beispielsweise mit einer cloud-config
, die in etwa so aussieht:
#cloud-config
write_files:
- path: /tmp/modify_docker_daemon_opts.py
permissions: 0744
owner: root
content: |
import json, sys, os, logging
DAEMON_OPTS_FILE = '/etc/docker/daemon.json'
opts = {}
if os.path.exists(DAEMON_OPTS_FILE):
with open(DAEMON_OPTS_FILE) as f:
try:
opts = json.load(f)
except:
logging.info("json parsing failed, starting with empty config.")
pass
# Add your daemon option modifications here
# For example,
# opts['log-opts']['max-size'] = '100m'
with open(DAEMON_OPTS_FILE, 'w') as f:
json.dump(opts, f)
runcmd:
- python /tmp/modify_docker_daemon_opts.py
- rm -f /tmp/modify_docker_daemon_opts.py
- systemctl restart docker.service