您可能需要在 Container-Optimized OS 上安装其他软件包或工具以执行某些任务,例如调试。例如,通过在工具箱中安装 tcpdump
来调试节点连接问题。虽然 Container-Optimized OS
软件包管理器,您就可以使用预安装的
工具箱
实用程序安装所需的任何其他软件包或工具。安装和运行一次性调试工具的首选方法是使用 /usr/bin/toolbox
。
/usr/bin/toolbox
基本上是在类似于 Debian chroot 的环境中为您提供了一个 shell。在调用 /usr/bin/toolbox
时,它会运行以下命令:
- 运行
docker pull
和docker create
以设置环境。这些命令仅会在您首次调用/usr/bin/toolbox
时运行。 systemd-nspawn
,用于运行给定的命令或(如果没有任何命令)为您提供 shell
toolbox
还有其他一些需要注意的属性:
- 首次调用
toolbox
后再调用该命令时,不需要有效的 Docker 守护进程,也不会产生任何网络/磁盘开销。 toolbox
环境会为每个调用它的用户设置一次。运行sudo toolbox
即可为root
用户设置它。toolbox
环境在/var/lib/toolbox
下创建,并且在重新启动后保持不变。- 您可以在
toolbox
环境内访问根文件系统的各个部分,例如用户主目录。
为您的部署自定义工具箱
在以下示例中,我们假设您的用户名为 USER
,Container-Optimized OS 实例名称为 cos-dev
。
您可以自定义 toolbox
使用的 Docker 映像,以及根文件系统中可供 toolbox
使用的路径。这些设置位于文件 /etc/default/toolbox
中。默认的 /etc/default/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_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}
TOOLBOX_DOCKER_IMAGE
和TOOLBOX_DOCKER_TAG
变量指定要使用的 Docker 映像。默认的gcr.io/cos-cloud/toolbox
附带了一些常用工具,例如预装的 Google Cloud CLI。TOOLBOX_BIND
变量指定 rootfs 中可在工具箱环境内使用的路径。
要更改默认设置,请修改 /etc/default/toolbox
文件,或在 ${HOME}/.toolboxrc
中为相应用户指定变量的新值。例如,假设您希望 toolbox
将 fedora:latest
用作其容器,则可以运行以下命令:
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
在 Milestone 93 中,工具箱将无法拉取自定义工具箱映像。如需解决此问题,请构建自定义工具箱 Docker 映像 tar 归档文件,并通过 ${HOME}/.toolboxrc
文件或 /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
安装和运行工具箱中的工具
调用 toolbox
实用程序来启动 shell 之后,即可在生成的容器中使用 apt-get
来安装软件包。例如:
# 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
您无需始终输入 toolbox
即可在其中运行命令。您只需在命令前面加上 toolbox
作为前缀即可。例如,要安装并运行 strace
实用程序以跟踪 Docker 守护进程的执行情况,您可以执行以下操作:
USER@cos-dev ~ $ toolbox apt-get install -y strace
USER@cos-dev ~ $ toolbox strace -p `pidof dockerd`
Google Cloud CLI 已预安装在工具箱中:
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
...
请注意,gcloud CLI 只能访问虚拟机实例有权访问的资源。请参阅 Compute Engine 文档,详细了解如何预配有权访问其他资源的虚拟机实例。
请参阅 Google Cloud CLI 文档,详细了解如何使用 gcloud CLI。
将文件移入或移出工具箱
您可以通过 /media/root
路径在 toolbox
内部访问主机的根文件系统。在主机上,可通过路径 /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root
访问 toolbox
的根目录,其中 USER
是您的用户名,VERSION
是 toolbox
版本号(例如,v20220722
)。
以下示例展示了如何将文件移入和移出 toolbox
:
# 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
清理工具箱使用的磁盘空间
安装工具箱会消耗 /var
中大约 2 到 3 GB 磁盘空间(磁盘用量因 Container-Optimized OS 版本而异)。如需释放工具箱使用的磁盘空间,请根据您的 Container-Optimized OS 版本执行以下任务:
里程碑 89 及更早版本
# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*
# remove container artifacts
docker image rm $IMAGE_PATH:$TAG
您可以运行 docker image ls
来确定这些值。例如,IMAGE_PATH=gcr.io/cos-cloud/toolbox
和 TAG=v20220722
。
里程碑 93 及更高版本
# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*
# remove container artifacts
sudo ctr images rm $IMAGE_NAME
您可以运行 sudo ctr images ls -q
来确定此值。例如 IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722
。