Es posible que debas instalar paquetes o herramientas adicionales en Container-Optimized OS para determinadas tareas como, por ejemplo, la depuración. Por ejemplo, depurar problemas de conectividad de nodos mediante
instalación de tcpdump
en la caja de herramientas.
Aunque Container-Optimized OS no
incluye un administrador de paquetes, puedes usar el modelo
caja de herramientas
para instalar cualquier paquete o herramienta adicional que necesites. El uso de /usr/bin/toolbox
es el método preferido para instalar y ejecutar herramientas de depuración únicas.
/usr/bin/toolbox
básicamente te proporciona un shell en un entorno similar a chroot de Debian. Cuando invocas /usr/bin/toolbox
, ejecuta los siguientes comandos:
docker pull
ydocker create
para configurar el entorno. Estas solo se ejecutan la primera vez que invocas a/usr/bin/toolbox
.systemd-nspawn
para ejecutar el comando dado o (si no hay ningún comando) te proporciona un shell
toolbox
tiene algunas otras propiedades que se deben tener en cuenta:
- La invocación de
toolbox
después de la primera invocación no requiere un daemon de Docker que funcione ni incurre en ninguna sobrecarga de red o disco. - El entorno
toolbox
se configura una vez para cada usuario que lo invoca. Si ejecutassudo toolbox
, se configurará para el usuarioroot
. - El entorno de
toolbox
se crea en/var/lib/toolbox
y es persistente en todos los reinicios. - Puedes acceder a las secciones del sistema de archivos raíz como, por ejemplo, los directorios de inicio del usuario, desde el entorno de
toolbox
.
Cómo personalizar la caja de herramientas para tu implementación
En los siguientes ejemplos, suponemos que tu nombre de usuario es USER
y el nombre de la instancia de Container-Optimized OS es cos-dev
.
Puedes personalizar la imagen de Docker que usa toolbox
y las rutas disponibles para toolbox
en el sistema de archivos raíz. Esta configuración se encuentra en el archivo /etc/default/toolbox
. Por lo general, el archivo /etc/default/toolbox
predeterminado es similar al siguiente:
USER@cos-dev ~ $ cat /etc/default/toolbox
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
TOOLBOX_DOCKER_IMAGE="gcr.io/cos-cloud/toolbox"
TOOLBOX_DOCKER_TAG="v20220722"
TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/ --bind=/etc/resolv.conf:/etc/resolv.conf"
: ${USER:=root}
- Las variables
TOOLBOX_DOCKER_IMAGE
yTOOLBOX_DOCKER_TAG
especifican la imagen de Docker que se usará. Lagcr.io/cos-cloud/toolbox
predeterminada viene con algunas de las herramientas comunes preinstaladas, como Google Cloud CLI. - La variable
TOOLBOX_BIND
especifica las rutas de rootfs que estarán disponibles dentro del entorno de toolbox.
Para cambiar la configuración predeterminada, modifica el archivo /etc/default/toolbox
o especifica valores nuevos de las variables en ${HOME}/.toolboxrc
para el usuario apropiado. Por ejemplo, si deseas que toolbox
use fedora:latest
como su contenedor, puedes ejecutar los siguientes comandos:
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE=docker.io/library/fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox
En el hito 93, la caja de herramientas no podrá extraer la imagen personalizada. Para solucionar este problema, compila el tarball de la imagen de Docker de la caja de herramientas personalizada y expórtalo a través del archivo ${HOME}/.toolboxrc
o /etc/default/toolbox
.
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${HOME}/.toolboxrc" USER@cos-dev ~ $ toolbox
USER@cos-dev ~ $ cat /etc/default/toolbox # Copyright 2016 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. TOOLBOX_DOCKER_IMAGE="gcr.io/cos-cloud/toolbox" TOOLBOX_DOCKER_TAG="v20220722" TOOLBOX_DOCKER_IMAGE_TARBALL=[location/to/tarball] TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/" : ${USER:=root} USER@cos-dev ~ $ toolbox
Cómo instalar y ejecutar herramientas de la caja de herramientas
Una vez que hayas invocado la utilidad toolbox
para iniciar la shell, puedes usar apt-get
dentro del contenedor resultante para instalar los paquetes. Por ejemplo:
# Inside the toolbox shell
USER@cos-dev ~ $ toolbox
root@cos-dev:~# apt-get update && apt-get install -y htop psmisc
root@cos-dev:~# htop
root@cos-dev:~# pstree -p
root@cos-dev:~# exit
No siempre necesitas ingresar toolbox
para ejecutar comandos en ella. Puedes agregar prefijos a tus comandos con toolbox
. Por ejemplo, si deseas instalar y ejecutar la utilidad strace
para rastrear la ejecución del daemon de Docker, puedes hacer lo siguiente:
USER@cos-dev ~ $ toolbox apt-get install -y strace
USER@cos-dev ~ $ toolbox strace -p `pidof dockerd`
Google Cloud CLI está preinstalada en toolbox:
USER@cos-dev ~ $ toolbox
root@cos-dev:~# which gcloud
/google-cloud-sdk/bin/gcloud
# View installed components
root@cos-dev:~# gcloud components list
Your current gcloud CLI version is: 287.0.0
The latest available version is: 295.0.0
...
Ten en cuenta que gcloud CLI solo puede acceder a los recursos a los que está autorizada la instancia de VM. Consulta la documentación de Compute Engine para obtener más información sobre el aprovisionamiento de instancias de VM con acceso a otros recursos.
Lee la documentación de Google Cloud CLI para obtener más información sobre el uso de gcloud CLI.
Cómo ingresar y extraer archivos en toolbox
Se puede acceder al sistema de archivos raíz del host dentro de toolbox
a través de la ruta de acceso /media/root
. En el host, se puede acceder al directorio raíz de toolbox
a través de la siguiente ruta: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root
en el que USER
es tu nombre de usuario y VERSION
es el toolbox
(por ejemplo, v20220722
).
Los siguientes ejemplos muestran cómo incluir archivos en toolbox
y quitarlos de ella:
# Access the host filesystem inside the toolbox
USER@cos-dev ~ $ toolbox
root@cos-dev:~# ls /media/root
bin boot dev etc home lib lib64 ...
root@cos-dev:~# cp /media/root/home/USER/some-file .
# Access toolbox directory from the host
USER@cos-dev ~ $ sudo cp some-file /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-v20220722/root
# Run a command inside toolbox and save its output in your home directory
USER@cos-dev ~ $ toolbox strace -o /media/root/$HOME/ls.strace ls
USER@cos-dev ~ $ more $HOME/ls.strace
Libera espacio en el disco que usa la caja de herramientas
La instalación de la caja de herramientas consume alrededor de 2 a 3 GB de disco
espacio en /var
(el uso del disco varía según la versión de Container-Optimized OS). Para liberar el espacio en el disco que usa Toolbox, realiza las siguientes tareas según la versión de Container-Optimized OS que tengas:
Evento importante 89 and versiones anteriores
# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*
# remove container artifacts
docker image rm $IMAGE_PATH:$TAG
Puedes ejecutar docker image ls
para determinar estos valores. Por ejemplo, IMAGE_PATH=gcr.io/cos-cloud/toolbox
y TAG=v20220722
.
Evento importante 93 y versiones posteriores
# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*
# remove container artifacts
sudo ctr images rm $IMAGE_NAME
Puedes ejecutar sudo ctr images ls -q
para determinar este valor. Por ejemplo, IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722