bocker - 約100行のbashで実装されたDocker

(Docker implemented in around 100 lines of bash)

Created at: 2015-07-15 06:33:49
Language: Shell
License: GPL-3.0

ボッカー

Dockerは約100行のbashで実装されています。

前提 条件

bockerを実行するには、次のパッケージが必要です。

  • btrfs-progs
  • カール
  • イプルート2
  • iptables
  • libcgroup-tools
  • util-linux >= 2.25.2
  • coreutils >= 7.5

ほとんどのディストリビューションは新しいバージョンのutil-linuxを出荷していないので、おそらくここからソースを取得して自分でコンパイルする必要があります。

さらに、システムは次のように構成する必要があります。

  • btrfs ファイルシステムが
    /var/bocker
  • ネットワークブリッジが呼び出され、IP が 10.0.0.1/24
    bridge0
  • で有効になっている IP 転送
    /proc/sys/net/ipv4/ip_forward
  • 物理インターフェースから物理インターフェースへのトラフィックをルーティングするファイアウォール。
    bridge0

使いやすさのために、必要な環境を構築するVagrantfileが含まれています。

上記の前提条件を満たしていても、仮想マシンでbockerを実行したい可能性があります。Bockerはrootとして実行され、とりわけネットワークインターフェイス、ルーティングテーブル、ファイアウォールルールを変更する必要があります。私はそれがあなたのシステムをゴミ箱にしないことを保証することはできません

使用例

$ bocker pull centos 7
######################################################################## 100.0%
######################################################################## 100.0%
######################################################################## 100.0%
Created: img_42150

$ bocker images
IMAGE_ID        SOURCE
img_42150       centos:7

$ bocker run img_42150 cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)

$ bocker ps
CONTAINER_ID       COMMAND
ps_42045           cat /etc/centos-release

$ bocker logs ps_42045
CentOS Linux release 7.1.1503 (Core)

$ bocker rm ps_42045
Removed: ps_42045

$ bocker run img_42150 which wget
which: no wget in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

$ bocker run img_42150 yum install -y wget
Installing : wget-1.14-10.el7_0.1.x86_64                                  1/1
Verifying  : wget-1.14-10.el7_0.1.x86_64                                  1/1
Installed  : wget.x86_64 0:1.14-10.el7_0.1
Complete!

$ bocker ps
CONTAINER_ID       COMMAND
ps_42018           yum install -y wget
ps_42182           which wget

$ bocker commit ps_42018 img_42150
Removed: img_42150
Created: img_42150

$ bocker run img_42150 which wget
/usr/bin/wget

$ bocker run img_42150 cat /proc/1/cgroup
...
4:memory:/ps_42152
3:cpuacct,cpu:/ps_42152

$ cat /sys/fs/cgroup/cpu/ps_42152/cpu.shares
512

$ cat /sys/fs/cgroup/memory/ps_42152/memory.limit_in_bytes
512000000

$ BOCKER_CPU_SHARE=1024 \
	BOCKER_MEM_LIMIT=1024 \
	bocker run img_42150 cat /proc/1/cgroup
...
4:memory:/ps_42188
3:cpuacct,cpu:/ps_42188

$ cat /sys/fs/cgroup/cpu/ps_42188/cpu.shares
1024

$ cat /sys/fs/cgroup/memory/ps_42188/memory.limit_in_bytes
1024000000

機能: 現在実装中

  • docker build
  • docker pull
  • docker images
  • docker ps
  • docker run
  • docker exec
  • docker logs
  • docker commit
  • docker rm
    /
    docker rmi
  • ネットワーキング
  • クォータサポート/CGroups

†非常に限られた実装を提供します

bocker init
docker build

機能:まだ実装されていません

  • データボリュームコンテナ
  • データ量
  • ポートフォワーディング

ライセンス

著作権 (C) 2015 ピーターウィルモット

このプログラムは自由ソフトウェアです:フリーソフトウェアファウンデーションが発行するGNU一般公衆利用許諾契約書の条項、ライセンスのバージョン3、または(あなたの選択により)それ以降のバージョンの下で、再配布および/または変更することができます。

このプログラムは、それが有用であることを期待して配布されていますが、いかなる保証もありません。商品性または特定目的への適合性の黙示的な保証さえなし。詳細については、GNU一般公衆利用許諾契約書を参照してください。

あなたはこのプログラムと一緒にGNU一般公衆利用許諾契約書のコピーを受け取るべきでした。そうでない場合は、http://www.gnu.org/licenses/ を参照してください。