# 약 100줄의 Bash로 구현된 Docker, Bocker (2015)

> Clean Markdown view of GeekNews topic #17927. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=17927](https://news.hada.io/topic?id=17927)
- GeekNews Markdown: [https://news.hada.io/topic/17927.md](https://news.hada.io/topic/17927.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-11-24T19:33:16+09:00
- Updated: 2024-11-24T19:33:16+09:00
- Original source: [github.com/p8952](https://github.com/p8952/bocker)
- Points: 6
- Comments: 1

## Topic Body

- # Bocker
  - Bocker는 약 100줄의 bash로 구현된 Docker의 간단한 버전임.
  
- ## Prerequisites
  - Bocker를 실행하기 위해 필요한 패키지:
    - btrfs-progs
    - curl
    - iproute2
    - iptables
    - libcgroup-tools
    - util-linux >= 2.25.2
    - coreutils >= 7.5
  - 시스템 설정 요구 사항:
    - `/var/bocker`에 btrfs 파일 시스템 마운트
    - `bridge0`라는 네트워크 브리지와 10.0.0.1/24 IP
    - `/proc/sys/net/ipv4/ip_forward`에서 IP 포워딩 활성화
    - `bridge0`에서 물리적 인터페이스로의 트래픽 라우팅을 위한 방화벽
  - Vagrantfile을 사용하여 필요한 환경을 구축할 수 있음.
  - Bocker는 루트 권한으로 실행되며 네트워크 인터페이스, 라우팅 테이블, 방화벽 규칙을 변경하므로 가상 머신에서 실행하는 것이 좋음.

- ## Example Usage
  - Bocker의 사용 예시:
    - `bocker pull centos 7` 명령어로 CentOS 7 이미지를 가져옴.
    - `bocker images`로 이미지 목록 확인 가능.
    - `bocker run img_42150 cat /etc/centos-release`로 컨테이너에서 명령어 실행 가능.
    - `bocker ps`로 실행 중인 컨테이너 확인 가능.
    - `bocker logs ps_42045`로 컨테이너 로그 확인 가능.
    - `bocker rm ps_42045`로 컨테이너 삭제 가능.
    - `bocker run img_42150 yum install -y wget`로 패키지 설치 가능.
    - `bocker commit ps_42018 img_42150`로 컨테이너 변경 사항 커밋 가능.
    - CPU 및 메모리 제한 설정 가능.

- ## Functionality: Currently Implemented
  - 현재 구현된 기능:
    - `docker build`의 제한적 구현
    - `docker pull`
    - `docker images`
    - `docker ps`
    - `docker run`
    - `docker exec`
    - `docker logs`
    - `docker commit`
    - `docker rm` / `docker rmi`
    - 네트워킹
    - 쿼터 지원 / CGroups

- ## Functionality: Not Yet Implemented
  - 아직 구현되지 않은 기능:
    - 데이터 볼륨 컨테이너
    - 데이터 볼륨
    - 포트 포워딩

- ## License
  - 이 프로그램은 GNU General Public License에 따라 배포되는 자유 소프트웨어임.
  - 상업성이나 특정 목적에 대한 적합성에 대한 보증은 없음.

## Comments



### Comment 31650

- Author: neo
- Created: 2024-11-24T19:33:17+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42224670) 
- proot를 사용하여 Bag이라는 프로젝트를 만들었음. 이는 Docker 대안이 아니며 cgroups와 관련이 없고, CLI도 Docker와 다름. 인터넷 검열을 우회하기 위해 프록시 체인 솔루션을 개발했으며, 이를 termux에서 실행하고자 했음. 당시 termux에는 jdk/jre가 없었고, proot를 통해 archlinux 환경을 생성하여 jdk를 사용할 수 있었음. 이 환경은 다양한 작업에 적합했으며, bag.sh라는 스크립트를 통해 자동화된 환경 생성 및 명령 실행을 가능하게 했음. 이 스크립트는 5년 동안 업데이트되지 않은 로드맵을 가지고 있음

- 최소한의 bash 스크립트를 좋아하며, 10년 전 해커톤에서 Docker, Mesos 등을 사용한 분산 인프라를 홍보하기 위해 40줄의 bash로 intra-cluster 로드 밸런서를 구현한 적이 있음. 또한, colo-to-cloud 전송 도구를 개발했으나 현재는 잃어버린 상태임. Shell Fu 등에서 유용한 스크립트 모음을 찾을 수 있음

- 저장소에 "아직 구현되지 않음", "할 일", "작업 중"이라는 메시지가 있고 마지막 커밋이 몇 년 전인 경우가 좋음. 이는 본인이 코드에서 놓친 할 일 목록을 다시 돌아보지 않아도 된다는 안도감을 줌

- lazydocker가 Docker Desktop의 훌륭한 대안으로 언급되지 않은 것이 놀라움. 이는 ssh를 통해 실행되는 꽤 완전한 기능의 터미널 UI임

- BastilleBSD는 BSD에서 jails를 관리하는 도구로, Docker에서 찾을 수 있는 많은 구조를 사용함. BSD의 다른 jail 관리 소프트웨어보다 의존성이 적어 선호함

- 실용성을 떠나 구현에서 배울 점이 많음

- GitHub 홈페이지 링크가 깨져 있으니 "www."를 제거해야 함

- Docker의 간단한 재구현이 가능하다는 점이 Docker 회사가 직면한 가장 큰 문제임. Docker의 진정한 가치는 Docker Hub뿐만 아니라 Windows와 Mac용 Docker에서 제공하는 통합 경험에 있음. 이는 VirtualBox와 Vagrant를 수동으로 설정하는 것보다 훨씬 우수한 경험을 제공함

- Docker가 어떻게 시작되었는지에 대한 의문

- Docker가 아직 ubuntu/debian 저장소에 포함되지 않은 이유에 대한 의문. 이는 쉬운 순이익이 될 것임
