您可能需要在 Container-Optimized OS 上安裝額外套件或工具來執行偵錯等特定工作。例如,在工具箱中安裝 tcpdump
,以便偵錯節點連線問題。雖然 Container-Optimized OS 不包含套件管理員,但您可以使用預先安裝的 toolbox 公用程式,安裝所需的任何額外套件或工具。使用 /usr/bin/toolbox
是安裝及執行一次性偵錯工具的首選方法。
/usr/bin/toolbox
基本上會在類似 Debian chroot 的環境中提供殼層。叫用 /usr/bin/toolbox
時,系統會執行下列指令:
docker pull
和docker create
設定環境。這些指令只會在您第一次叫用/usr/bin/toolbox
時執行。systemd-nspawn
執行指定指令,或在沒有任何指令的情況下提供殼層
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
變數會指定要讓 toolbox 環境使用 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 只能存取 VM 執行個體已獲授權存取的資源。請參閱 Compute Engine 說明文件,進一步瞭解如何佈建可存取其他資源的 VM 執行個體。
請參閱 Google Cloud CLI 說明文件,進一步瞭解如何使用 gcloud CLI。
將檔案移入或移出工具箱
您可以透過 /media/root
路徑,在 toolbox
內存取主機的根檔案系統。在主機上,您可以透過以下路徑存取 toolbox
的根目錄:/var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root
,其中 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
清理工具箱使用的磁碟空間
Toolbox 安裝作業會在 /var
中耗用約 2 到 3 GB 的磁碟空間 (磁碟用量會因 Container-Optimized OS 版本而異)。如要釋出 toolbox 使用的磁碟空間,請視 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
。