Intro

  • busybox는 작고 가볍고 빠른 POSIX 표준 유틸 모음이다.
  • docker에서 여러 가지로 응용해서 사용할 수 있다.

응용

  • 임베디드 시스템에 빌드하기
  • Kubernates에 init container로 사용하기
  • HTTP 웹서버로 돌리기
  • 가상컨테이너 볼륨서버(스토리지)로 사용하기

기본 사용례

  • busybox 최신버전 이미지 받고 실행
    $ docker run -it --rm busybox
    
  • busybox + myapp : myapp은 리눅스환경에서 정적컴파일한 바이너리 ```console $ cat Dockerfile # Write Dockerfile FROM busybox COPY ./my-static-binary /my-static-binary CMD [“/my-static-binary”]

$ docker build -t busybox-myapp . # Build Image $ docker run -t –rm busybox-myapp # Run Container


* busybox + httpserver : 웹서버동작(httpserver는 static compile binary)
```console
$ cat Dockerfile  # Write Dockerfile
FROM busybox
COPY ./httpserver /home/
CMD /home/httpserver

$ docker build -t go-server .  # Build Image
$ docker run -p 8080:8080 --rm -it go-server # Run Container

$ curl -v http://localhost:8080/  # Test

Busybox에 관하여

  • 놀랍게도 busybox는 httpd를 내장하고 있다. 물론 대규모 처리는 곤란하다.
  • 내장된 grep도 기본 기능만 있다. 대용량 파일 검색을 써야한다면 효율이 좋지 않으므로 gnu grep을 얹어서 사용하는 것이 좋다.
  • busybox는 glibc, musl 등을 지원하는 버전이 있다.
  • 이를 활용하면 여러개의 프로그램을 넣어야할 때 공유라이브러리를 활용할 수 있어 효율적이다.
  • alpine 리눅스가 busybox + musl + os env 이므로 자신만의 이미지를 제작하는 것도 가능하다.
  • 기본적인 utf-8이 지원되지만 출력만 문제가 없는 것으로 보인다.
  • sh, echo, vi 도 가볍게 쓰기는 좋으나 utf-8 한글입력이 안된다.
  • 이를 보완하기 위해서는 bash, echo, vi를 정적컴파일 바이너리로 대체
  • 또는 도커허브(DockerHub)의 toybox를 사용하는 것이다. utf-8 입출력을 모두 지원한다. 심지어 사이즈가 더 작다.
  • utf-8의 입출력 환경이 모두 필요하다면 toybox를 사용하는 것이 더 낫다.
  • busybox(약1.2MB)나 toybox(약764K)는 정말 가볍게 실행하고 배포할 수 있는 환경이다.
  • 결론적으로 이것에 대한 활용은 개발환경이나 큰규모의 실행환경보다는 작고 가벼운 환경에서 효율적인 운용이 필요할 때 사용하면 좋을 것 같다.