デバッグなどの特定のタスクを行うには、Container-Optimized OS にパッケージやツールを追加でインストールする必要があります。たとえば、ツールボックスに tcpdump
をインストールして、ノードの接続の問題をデバッグします。Container-Optimized OS にはパッケージ マネージャーが含まれていませんが、プリインストールされた ツールボックス ユーティリティを使用して、必要なパッケージやツールを追加でインストールできます。1 回だけデバッグツールをインストールして実行する場合は、/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
変数には、ツールボックス環境内で利用できるようにする 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
マイルストーン 93 では、ツールボックスはカスタム ツールボックス イメージを pull できません。この問題を回避するには、カスタム ツールボックスの Docker イメージの tarball をビルドし、${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
ユーティリティを起動してシェルを実行すると、作成されたコンテナ内の 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 インスタンスのアクセスが許可されているリソースのみであることにご注意ください。他のリソースへのアクセスが可能な VM インスタンスのプロビジョニングの詳細については、Compute Engine のドキュメントをご覧ください。
gcloud CLI の使用方法の詳細については、Google Cloud CLI のドキュメントをご覧ください。
ツールボックスへのファイルの入出力
ホストのルート ファイルシステムには、toolbox
内で /media/root
パスを介してアクセスできます。ホスト上では、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 のバージョンに応じて次のタスクを行います。
マイルストーン 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