디버깅과 같은 특정 작업을 위해 Container-Optimized OS에 추가 패키지 또는 도구를 설치해야 할 수도 있습니다. 예를 들어 도구 상자에 tcpdump
를 설치하여 노드 연결 문제를 디버깅합니다.
Container-Optimized OS에 패키지 관리자가 포함되지 않더라도 사전 설치된 도구 상자 유틸리티를 사용하여 필요한 추가 패키지 또는 도구를 설치할 수 있습니다. 일회용 디버깅 도구를 설치하고 실행할 때는 /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
Milestone 93에서는 도구 상자의 커스텀 도구 상자 이미지 가져오기가 실패합니다. 이 문제를 해결하려면 커스텀 도구 상자 Docker 이미지 tar ball을 빌드하고 ${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
프리픽스만 추가하면 됩니다. 예를 들어 Docker 데몬 실행을 trace하기 위해 strace
유틸리티를 설치하고 실행하려면 다음을 수행할 수 있습니다.
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 문서를 참조하세요.
도구 상자 내부 및 외부로 파일 가져오기
호스트의 루트 파일 시스템은 /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~3GB의 디스크 공간을 사용합니다(디스크 사용량은 Container-Optimized OS 버전에 따라 다름). 도구 상자에서 사용하는 디스크의 여유 공간을 확보하려면 Container-Optimized OS 버전에 따라 다음 작업을 합니다.
Milestone 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
입니다.
Milestone 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