Puedes ejecutar un contenedor de Docker en una máquina que ejecute Container-Optimized OS de la misma manera que lo harías en la mayoría de las demás distribuciones de imágenes de nodo, con el comando docker run
. Por ejemplo:
docker run --rm busybox echo "hello world"
Aparece este resultado:
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
. . .
Status: Downloaded newer image for busybox:latest
hello world
Cuando se administran las claves SSH en metadatos, todas las cuentas de usuario que administra Compute Engine en la imagen cos
se agregan al grupo docker
de forma predeterminada. Esto permite que cualquier usuario que accedió ejecute comandos de docker
sin privilegios de administrador. Cuando administras claves SSH con OS Login, la cuenta de usuario debe agregarse de forma manual al grupo de docker
. De lo contrario, el usuario debe agregar sudo
para cada comando de docker
.
Accede a imágenes públicas en Container Registry o Artifact Registry
La compatibilidad de Container Registry está integrada en la imagen de nodo cos
. Para iniciar un contenedor desde Container Registry, ejecuta el siguiente comando:
docker run --rm gcr.io/google-containers/busybox echo "hello world"
Aparece este resultado:
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
Accede a imágenes privadas en Artifact Registry o Container Registry
A partir de las actualizaciones del evento importante 60, docker-credential-gcr
ya viene instalado en las imágenes de Container-Optimized OS. Es la forma recomendada para acceder a imágenes privadas en Artifact Registry o Container Registry.
Para usar docker-credential-gcr
, ejecuta el siguiente comando:
Artifact Registry
docker-credential-gcr configure-docker --registries LOCATION-docker.pkg.dev
Reemplaza LOCATION por la ubicación de tu repositorio.
Container Registry
docker-credential-gcr configure-docker
Aparece este resultado:
/home/username/.docker/config.json configured to use this credential helper
Para ejecutar una imagen desde el registro, usa el siguiente comando:
Artifact Registry
docker run --rm LOCATION-docker.pkg.dev/your-project/repository/your-image
Reemplaza LOCATION por la ubicación de tu repositorio.
Container Registry
docker run --rm gcr.io/your-project/your-image
Los nombres de host admitidos de Container Registry son los siguientes:
- us.gcr.io
- eu.gcr.io
- asia.gcr.io
De manera alternativa, puedes recuperar los tokens de acceso de OAuth adecuados en los metadatos de Compute Engine y usarlos con el comando docker login
de forma manual, como se muestra en el siguiente ejemplo:
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
Usa cloud-init con Container Registry
Este ejemplo de cloud-init usa el formato de Cloud Config para iniciar un contenedor de Docker desde una imagen almacenada en el registro de contenedores de Docker, llamado DockerHub. En el siguiente ejemplo, se usa el formato de Cloud Config para iniciar un contenedor de Docker desde una imagen almacenada en Container Registry:
#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
Configura el daemon de Docker para extraer imágenes de la caché de registro
Puedes configurar el daemon de Docker para extraer imágenes de una caché de registro mediante duplicaciones de registro.
Configura el daemon para usar la opción
registry-mirror
de una de las siguientes maneras:- En el archivo
/etc/default/docker
, agrega la opciónregistry-mirror
para el registro (por ejemplo,https://mirror.gcr.io
):
echo 'DOCKER_OPTS="--registry-mirror=https://mirror.gcr.io"' | tee /etc/default/docker
- En el archivo
/etc/default/docker
, agrega"--registry-mirror=https://mirror.gcr.io"
alDOCKER_OPTS
existente:
sed -i -e 's|"$| --registry-mirror=https://mirror.gcr.io"|' /etc/default/docker
- En el archivo
Después de agregar la duplicación del registro, reinicia el daemon de Docker para que se apliquen los cambios:
sudo systemctl daemon-reload sudo systemctl restart docker
Agregar una configuración a /etc/default/docker
no es persistente durante el reinicio.
Para asegurarte de que la configuración de Docker permanezca persistente durante los reinicios, considera agregar los comandos ya sea en la secuencia de comandos cloud-init
de los metadatos de la instancia en formato cloud-config
o startup script
.
En el siguiente ejemplo, se usa el formato cloud-config
para configurar un registry-mirror
:
#cloud-config
runcmd:
- echo 'DOCKER_OPTS="--registry-mirror=https://mirror.gcr.io"' | tee /etc/default/docker
- systemctl daemon-reload
- systemctl restart docker
Cómo ejecutar un clúster de Kubernetes
El enfoque recomendado para ejecutar un clúster de Kubernetes en Google Cloud es usar Google Kubernetes Engine (GKE). Sin embargo, si deseas ejecutar una versión con administración automática de Kubernetes de código abierto, sigue estas instrucciones.
- Asegúrate de que se pueda acceder a la instancia principal de Kubernetes mediante la apertura del puerto 443 en el firewall.
Descarga los objetos binarios de la versión de Kubernetes, descomprime y abre el clúster de la siguiente manera:
# 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
Ahora puedes ejecutar la aplicación en el clúster. Por ejemplo, puedes iniciar un clúster de Redis con el siguiente ejemplo:
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
Para las instancias que se ejecutan como parte de un clúster de GKE, los registros de Docker y Kubelet también se exportan automáticamente al registro de Google Cloud's operations suite.
Los registros para Docker, Kubelet y kube-proxy
están disponibles en Google Cloud's operations suite, en la sección Instancia de VM de Compute Engine, cuando se usa Google Cloud Console.
Una vez que ya no se necesite el clúster, puedes eliminarlo:
cluster/kube-down.sh