十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

bocker完整命令参考:pull/run/exec/commit等10大命令与docker逐一对照

bocker完整命令参考:pull/run/exec/commit等10大命令与docker逐一对照 bocker完整命令参考pull/run/exec/commit等10大命令与docker逐一对照【免费下载链接】bockerDocker implemented in around 100 lines of bash项目地址: https://gitcode.com/gh_mirrors/bo/bockerbocker 是一个用约 100 行 bash 脚本实现的极简版 Docker让你用最少的代码理解容器镜像、容器、网络命名空间与 cgroups 的全部核心原理。本文给出 bocker 完整命令参考把 pull、run、exec、commit 等 10 大命令与 docker 逐一对照帮你快速上手这个透明 Docker。为什么值得学100行bash实现的极简Dockerbocker 的核心脚本只有一个文件 bocker全部功能pull、init、images、ps、run、exec、logs、commit、rm、help都写在这一份约 100 行的 bash 里。没有守护进程、没有复杂 RPC每条命令都是直接的 shell 操作镜像/容器btrfs 子卷subvolumeimg_*是镜像ps_*是容器快照隔离unshareip netnschroot组合完成资源限制cgcreate/cgset/cgexec操作 cgroups⚠️ bocker 以 root 运行会修改网卡、路由表和防火墙规则。官方强烈建议在虚拟机里运行仓库自带的 Vagrantfile 可一键搭建所需环境。前置准备运行 bocker 的环境要求开始对照命令之前需要确认系统满足 README.md 中的要求依赖用途btrfs-progs镜像/容器的存储基础iproute2创建 veth 网卡与网络命名空间iptables防火墙与流量转发libcgroup-tools资源配额cpu.shares、memory.limitutil-linux ≥ 2.25.2unshare、nsenter 等工具此外还需/var/bocker挂载 btrfs 文件系统、名为bridge0的网桥IP 10.0.0.1/24、开启 IP 转发。10大命令速查表bocker 与 docker 一一对照#bocker 命令docker 对应命令作用1bocker pull name tagdocker pull从 Docker Hub 拉取镜像2bocker init directorydocker build受限版从本地目录构建镜像3bocker imagesdocker images列出所有镜像4bocker psdocker ps -a列出所有容器5bocker run img cmddocker run从镜像创建并运行容器6bocker exec ps cmddocker exec在运行中容器里执行命令7bocker logs psdocker logs查看容器日志8bocker commit ps imgdocker commit把容器固化成新镜像9bocker rm iddocker rm/docker rmi删除容器或镜像10bocker helpdocker --help查看命令帮助一个记忆要点bocker 里镜像 id 以img_开头容器 id 以ps_开头与 docker 的十六进制短 id 不同。拉取镜像bocker pull 对照 docker pull对照docker pullbocker 的 pull 实现见 bockerbocker pull centos 7 # Created: img_42150它的原理非常直白向index.docker.io申请 token → 查询镜像层列表ancestry→ 逐层curl下载 tar 包并解压到临时目录 → 调用bocker_init生成 btrfs 子卷。测试脚本 tests/test_pull 分别拉取centos:7和ubuntu:14.04并验证了版本输出。与docker pull的差异只支持Docker Hub不支持私有 registry拉取过程是逐层curl下载带进度条而非 docker 的分块流式加载不支持latest之外的复杂 tag 语法之外的功能没有 digest 拉取本地构建bocker init 对照 docker builddocker build解析 Dockerfile 逐层执行bocker 的替代方案init更原始——直接把一个已准备好的根文件系统目录复制成镜像bocker init ~/base-image # Created: img_42087实现见 bocker创建img_*btrfs 子卷cp --reflinkauto拷贝目录内容btrfs 上是瞬间完成的 CoW 引用并记录来源路径。它对应的是我手上已经有一个系统根目录帮我打包成镜像的场景而非完整的 Dockerfile 构建流程。查看资产bocker images 与 bocker ps两条只读命令输出风格朴素但信息完整bocker images # IMAGE_ID SOURCE # img_42150 centos:7 bocker ps # CONTAINER_ID COMMAND # ps_42045 cat /etc/centos-releaseimages遍历/var/bocker下的img_*子卷读取其中保存的img.source文件显示来源bockerps遍历ps_*子卷显示容器执行过的命令bocker注意bocker ps显示的是全部历史容器含已退出的更接近docker ps -a而非docker ps——容器在 bocker 里没有退出即消失的状态快照一直留着直到你rm它。运行容器bocker run 对照 docker runrun是 bocker 最复杂的命令bocker一条命令里能看到一个容器诞生的全过程生成ps_*容器 id用它的末 3 位推导容器 IP 与 MAC 地址ip link add创建 veth 网卡对一端挂到bridge0ip netns add创建网络命名空间配置 lo、IP、默认路由btrfs subvolume snapshot把镜像子卷秒级快照成容器子卷cgcreatecgset设置 cpu.shares 与内存上限cgexec ip netns exec unshare chroot启动命令输出同时tee到容器日志文件bocker run img_42150 cat /etc/centos-release # CentOS Linux release 7.1.1503 (Core)与docker run的差异点特性bocker rundocker run资源限制环境变量BOCKER_CPU_SHARE/BOCKER_MEM_LIMIT--cpus/--memory参数后台运行不支持-d前台阻塞执行支持端口映射不支持尚未实现-p数据卷不支持尚未实现-v/--mountrun命令会阻塞到命令执行完这也是为什么测试脚本 tests/test_exec 需要用sleep 5后台占位才能模拟容器仍在运行来测试 exec。进入容器bocker exec 对照 docker execbocker exec ps_42045 ps aux实现bocker两步走先通过ps输出找到容器进程树里的unshare进程 pid再用nsenter -t pid -m -u -i -n -p进入它的 mount/uts/ipc/net/pid 命名空间并chroot执行命令。两个典型报错容器不存在 →No container named ps_xxx exists容器已退出 →Container ps_xxx exists but is not running与docker exec -it不同bocker exec不支持交互式 TTY 分配没有-it参数适合执行一次性命令。查看日志bocker logs 对照 docker logs最简单的一条bocker logs container_id直接cat容器的.log文件bocker。因为run时输出已用tee落盘到子卷内的ps_xxx.log所以即使容器进程已结束日志也完整可读——这是 tests/test_run 中每个用例都采用run → ps 取 id → logs 断言 → rm模式的原因。对应关系上它相当于docker logs但没有-f跟踪、没有按容器过滤的多路复用。固化镜像bocker commit 对照 docker commit在容器里装好软件后用commit把改动固化进镜像bockerbocker run img_42150 yum install -y wget # 容器内装 wget bocker commit ps_42018 img_42150 # Removed: img_42150 / Created: img_42150 bocker run img_42150 which wget # /usr/bin/wget注意 commit 的签名bocker commit container_id image_id目标 image_id 必须已存在——它的实现是先删旧镜像子卷再把容器子卷快照回同一 image_id。这与docker commit生成新 id的语义不同bocker 更像覆盖式更新同名镜像。tests/test_commit 完整演示了装软件 → commit → 新容器验证的闭环。由于底层是 btrfs 快照commit 是 O(1) 的 CoW 操作无论镜像多大都瞬间完成——这也是整个项目100 行实现 Docker的核心巧思之一。删除资源bocker rm 对照 docker rm / docker rmibocker rm ps_42045 # 删容器 bocker rm img_42150 # 删镜像rm同时覆盖docker rm和docker rmi两种角色bocker判断img_*还是ps_*删除 btrfs 子卷如果是容器顺带cgdelete清理 cgroup。没有-f强制删除的概念——bocker 的容器没有运行中/已退出互斥状态随时可删。仓库的清理脚本 tests/teardown 就是先images再ps遍历rm的示例写法。查看帮助bocker help 对照 docker --helpbocker help # 或直接运行 bocker不带参数帮助文本并不是独立文件——每个函数定义后紧跟#HELP注释bocker_help用sed实时从 bocker 脚本自身提取做到了源码即文档的零维护成本。尚未实现的功能bocker 与 docker 的边界对照dockerREADME.md 明确了 bocker 尚未实现的能力❌ 数据卷容器Data Volume Containers❌ 数据卷Data Volumes❌ 端口转发Port Forwarding也就是说 bocker 定位于理解容器原理 轻量隔离运行不追求生产级功能。若你的目标是学习容器到底是什么它提供的是一条比任何文档都短的代码路径pull → run → exec → commit → rm全链路每一环都摊开在 bocker 的 100 行里。总结一张表带走 bocker 命令对照场景你平时敲的换成 bocker拉镜像docker pullbocker pull建镜像docker buildbocker init目录打包看镜像docker imagesbocker images看容器docker ps -abocker ps跑容器docker runbocker run进容器docker execbocker exec看日志docker logsbocker logs存镜像docker commitbocker commit删资源docker rm/rmibocker rm二合一查帮助docker --helpbocker help想动手验证的读者可以直接运行仓库根目录的 test 脚本它会自动执行 tests/ 下全部用例并打印 PASSED/FAILED是理解每条命令行为的最快方式。【免费下载链接】bockerDocker implemented in around 100 lines of bash项目地址: https://gitcode.com/gh_mirrors/bo/bocker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表