- Bocker는 Docker를 약 100줄의 Bash로 구현한 프로젝트로, 이미지 pull, 컨테이너 run, 로그 확인, commit, 삭제 같은 Docker 유사 흐름을 제공함
- 실행에는 btrfs-progs, curl, iproute2, iptables, libcgroup-tools, util-linux 2.25.2 이상, coreutils 7.5 이상이 필요하며,
/var/bocker아래 btrfs 파일시스템과bridge0네트워크 구성이 필요함 - README 예시는
centos:7이미지를 pull한 뒤 컨테이너에서 명령을 실행하고,yum install -y wget결과를 commit해 이후 실행에서/usr/bin/wget을 확인하는 흐름을 보여줌 - Bocker는 root로 실행되며 네트워크 인터페이스, 라우팅 테이블, 방화벽 규칙을 변경하므로 가상 머신에서 실행하는 것이 권장되고, 시스템 손상 가능성에 대한 보장은 없음
- 현재
docker pull,images,ps,run,exec,logs,commit,rm/rmi, 네트워킹, CGroups 기반 쿼터를 구현했지만 데이터 볼륨, 데이터 볼륨 컨테이너, 포트 포워딩은 아직 구현되지 않음
Bocker의 목적과 범위
- Bocker는 Docker를 약 100줄의 Bash로 구현한 프로젝트임
- README는 Docker와 유사한 명령 흐름을 Bash 기반으로 보여주며, 이미지 관리, 컨테이너 실행, 로그 조회, 변경사항 commit, 리소스 제한 같은 기능을 포함함
실행 요구사항
- 실행에 필요한 패키지는 다음과 같음
-
btrfs-progs
- curl
- iproute2
- iptables
- libcgroup-tools
- util-linux 2.25.2 이상
- coreutils 7.5 이상
- 대부분의 배포판은 충분히 최신 util-linux를 포함하지 않으므로, util-linux 2.25 소스를 받아 직접 컴파일해야 할 가능성이 있음
- 시스템에는 다음 구성이 필요함
/var/bocker아래에 마운트된 btrfs 파일시스템bridge0라는 네트워크 브리지와10.0.0.1/24IP/proc/sys/net/ipv4/ip_forward에서 IP 포워딩 활성화bridge0에서 물리 인터페이스로 트래픽을 라우팅하는 방화벽 설정- 필요한 환경을 쉽게 만들 수 있도록 Vagrantfile이 포함돼 있음
-
실행 시 주의사항
- 요구사항을 충족해도 Bocker는 가상 머신에서 실행하는 것이 권장됨
- Bocker는 root로 실행되며 다음 항목을 변경해야 함
- 네트워크 인터페이스
- 라우팅 테이블
- 방화벽 규칙
- README는 Bocker가 시스템을 망가뜨리지 않는다는 보장을 할 수 없다고 명시함
예시 사용 흐름
bocker pull centos 7로centos:7이미지를 가져오면img_42150같은 이미지 ID가 생성됨bocker images는 이미지 ID와 소스를 표시함- 예시 출력:
img_42150,centos:7
- 예시 출력:
bocker run img_42150 cat /etc/centos-release는 컨테이너에서 CentOS 릴리스 정보를 출력함- 예시 출력:
CentOS Linux release 7.1.1503 (Core)
- 예시 출력:
bocker ps는 실행된 컨테이너 ID와 명령을 보여줌bocker logs ps_42045는 해당 컨테이너의 출력 로그를 보여줌bocker rm ps_42045는 컨테이너를 제거함bocker run img_42150 which wget실행 시 처음에는wget이 없다는 결과가 나옴bocker run img_42150 yum install -y wget로wget을 설치한 뒤,bocker commit ps_42018 img_42150으로 변경사항을 이미지에 반영함- 이후
bocker run img_42150 which wget는/usr/bin/wget을 출력함
리소스 제한과 CGroups
- Bocker 실행 예시는 컨테이너가 CGroups 아래에 배치되는 것을 보여줌
/proc/1/cgroup에memory:/ps_42152,cpuacct,cpu:/ps_42152같은 항목이 나타남
- 기본 CPU share와 메모리 제한 예시는 다음과 같음
/sys/fs/cgroup/cpu/ps_42152/cpu.shares:512/sys/fs/cgroup/memory/ps_42152/memory.limit_in_bytes:512000000
- 환경 변수로 리소스 제한을 바꿀 수 있음
BOCKER_CPU_SHARE=1024BOCKER_MEM_LIMIT=1024
- 변경 후 예시는 다음 값을 보여줌
- CPU shares:
1024 - memory limit:
1024000000
- CPU shares:
구현된 기능과 미구현 기능
- 현재 구현된 기능은 다음과 같음
docker build†docker pulldocker imagesdocker psdocker rundocker execdocker logsdocker commitdocker rm/docker rmi-
Networking
- Quota Support / CGroups
- †
bocker init은docker build의 매우 제한적인 구현을 제공함 - 아직 구현되지 않은 기능은 다음과 같음
- Data Volume Containers
- Data Volumes
- Port Forwarding
라이선스
- Bocker는 GNU General Public License 조건에 따라 재배포 및 수정할 수 있는 자유 소프트웨어임
- 라이선스 버전은 Free Software Foundation이 공개한 GPL v3 또는 그 이후 버전을 선택할 수 있음
- 프로그램은 유용하기를 바라며 배포되지만, 상품성이나 특정 목적 적합성에 대한 묵시적 보증도 없음