用约100行bash脚本实现的Docker。
运行bocker需要安装以下软件包:
- btrfs-progs
- curl
- iproute2
- iptables
- libcgroup-tools
- util-linux >= 2.25.2
- coreutils >= 7.5
由于大多数发行版预装的util-linux版本不够新,你可能需要从这里获取源码并自行编译。
此外,你的系统还需要完成以下配置:
- 一个btrfs文件系统挂载在
/var/bocker目录下 - 一个名为
bridge0的网络桥接设备,且配置IP为 10.0.0.1/24 - 在
/proc/sys/net/ipv4/ip_forward中启用IP转发 - 配置防火墙,将
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 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
版权所有 (C) 2015 Peter Wilmott
本程序是自由软件:你可以依据自由软件基金会发布的GNU通用公共许可证(第三版)或(可选)任何更新版本的条款,重新分发和/或修改本程序。
发布本程序的目的是希望它能发挥作用,但不提供任何担保��甚至没有隐含的适销性或特定用途适用性的担保。有关详细信息,请参阅GNU通用公共许可证。
你应已收到本程序附带的GNU通用公共许可证副本。如果没有,请参阅 http://www.gnu.org/licenses/。