您可能需要在 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 Daemon,也不會產生任何網路或磁碟負擔。 - 系統會為每位叫用
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
/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_DOCKER_IMAGE_TARBALL=<var>[location/to/tarball]</var>
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
公用程式啟動殼層後,您可以在產生的容器中使用 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 Daemon 的執行作業,可以執行下列操作:
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
清除工具箱使用的磁碟空間
工具箱安裝作業會耗用 /var
中約 2 到 3 GB 的磁碟空間 (磁碟用量會因 Container-Optimized OS 版本而異)。如要釋放工具箱占用的磁碟空間,請根據 Container-Optimized OS 版本執行下列工作:
# 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
。