비지박스(BusyBox)란?
BusyBox는 통용되는 Unix 유틸리티 여러 개를 아주 작은 애플리케이션으로 결합한 이미지입니다. 자원 사용이 한정적인 임베디드 시스템에서 사용하기 위한 목적으로 이미지 크기가 작다는 것이 특징입니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest ff0fea8310f3 2 weeks ago 72.8MB
busybox latest 2fb6fc2d97e1 2 weeks ago 1.24MB
최신 Ubuntu와 BusyBox 용량을 비교하면 약 70MB와 1.24MB로 크기 차이가 상당합니다. BusyBox의 버전에 따라서 차이가 있지만 일반적으로 1~5MB 사이의 크기를 갖고 있습니다.
- Unix 유틸리티의 최적화된 패키지
- 리소스 최적화, 임베디드 시스템, 디스크 사용이 제한된 환경에 적합
- Unix 유틸리티가 필요한 간단한 테스트를 위해 사용
BusyBox의 주요 목적은 임베디드 시스템처럼 디스크 사용이 제한 환경에서의 리소스 최적화입니다. 도커 파일에서 BusyBox 기본 이미지를 사용하고, 애플리케이션을 제작을 하는 것이 일반적입니다.
# Dockerfile
FROM busybox
이번 포스트에서는 테스트 환경 구축에 중심을 두고 BusyBox 사용법을 간단히 소개하고자 합니다.
BusyBox 컨테이너의 실행 및 종료
CLI에서 다음 명령문을 사용하여 BusyBox 컨테이너를 실행합니다. 로컬 호스트에 BusyBox 이미지가 없으면 최신 버전을 다운로드 받아 실행합니다.
$ docker run -it --rm busybox
BusyBox를 기본 이미지로 삼는 애플리케이션을 제작하는 경우가 아니라면, Unix 유틸리티의 간단한 사용을 위해 컨테이너를 실행 할 수 있습니다. 이 때 --rm 플래그를 추가하여 일회성 컨테이너가 되도록 실행합니다.
BusyBox가 실행되면 다음과 같이 컨테이너에서 사용 가능한 Unix 유틸리티의 리스트를 출력 할 수 있습니다.
# ls /bin
[ ether-wake less pmap swapon
[[ expand link popmaildir switch_root
acpid expr linux32 poweroff sync
add-shell factor linux64 powertop sysctl
addgroup fakeidentd linuxrc printenv syslogd
adduser fallocate ln printf tac
(생략)
컨테이너를 종료하려면 다음과 같이 입력합니다.
# exit
Windows 또는 MacOS에서 Linux 명령어 사용
BusyBox를 사용하면 다른 OS에서 쉽게 Linux 명령어를 사용 할 수 있습니다. 우선 로컬 호스트의 네트워크를 사용하도록 BusyBox 컨테이너를 실행합니다.
$ docker run -it --rm --network=host busybox
예를 들어 telnet의 경우 Windows 또는 MacOS에서는 기본으로 지원하지 않습니다. 이처럼 Linux 명령어를 다른 OS에서 사용하려면 추가 설치 등의 수고로움이 따릅니다.
# telnet www.naver.com 80
Connected to www.naver.com
BusyBox 컨테이너를 사용하면 타 OS에서의 Linux 명령어의 접근성이 훨씬 높아집니다. 특히 일회성 테스트 등의 목적이라면, 테스트 환경을 구축하는데 들이는 시간을 단축하고 개발에 더 집중 할 수 있습니다.
'DevOps & Infra > Docker' 카테고리의 다른 글
[Infrastructure/Docker] 도커 로깅 드라이버 (0) | 2022.04.02 |
---|---|
[Infrastructure/Docker] 도커 컨테이너 로그 출력, docker logs 명령어와 플래그 (0) | 2022.04.02 |
[Infrastructure/Docker] 도커 컨테이너에서 Windows 또는 MacOS 로컬 호스트에 연결 (0) | 2022.04.02 |
[Infrastructure/Docker] docker login 사용법, CLI에서 도커 계정 로그인하기 (0) | 2022.03.30 |
[Infrastructure/Docker] EXPOSE와 docker run -p의 차이점 (0) | 2022.03.13 |