[mydocker]---通过例子理解chroot 和 pivot_root

chroot

chroot是针对某个进程,系统的其他部分依旧运行于老的root目录中.
准备工作, 先准备好需要作为根目录的地方, 并准备busybox.

root@nicktming:~# mkdir /tmp/nicktming
root@nicktming:~# cd /tmp/nicktming
root@nicktming:/tmp/nicktming# mkdir bin
root@nicktming:/tmp/nicktming# which bash
/bin/bash
root@nicktming:/tmp/nicktming# cp /bin/bash bin
root@nicktming:/tmp/nicktming# cp /lib* .
root@nicktming:/tmp/nicktming# wget https://busybox.net/downloads/binaries/1.21.1/busybox-x86_64
root@nicktming:/tmp/nicktming# mv busybox-x86_64 busybox
root@nicktming:/tmp/nicktming# chmod +x busybox
root@nicktming:/tmp/nicktming# pwd
/tmp/nicktming
root@nicktming:/tmp/nicktming# ls
bin  busybox  lib  lib32  lib64  libx32

开始操作

----------------------------terminal 01-------------------------------
root@nicktming:~# chroot /tmp/nicktming /bin/bash
bash-4.3# pwd
/
bash-4.3# ./busybox ls -l
total 972
drwxr-xr-x    2 0        0             4096 Apr  5 13:05 bin
-rwxr-xr-x    1 0        0           973200 Jul  9  2013 busybox
drwxr-xr-x   21 0        0             4096 Apr  5 12:35 lib
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 lib32
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 lib64
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 libx32
bash-4.3# ./busybox echo "for testing" > test.txt
bash-4.3# ./busybox ls -l
total 976
drwxr-xr-x    2 0        0             4096 Apr  5 13:05 bin
-rwxr-xr-x    1 0        0           973200 Jul  9  2013 busybox
drwxr-xr-x   21 0        0             4096 Apr  5 12:35 lib
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 lib32
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 lib64
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 libx32
-rw-r--r--    1 0        0               12 Apr  5 14:26 test.txt
bash-4.3# ./busybox cat test.txt
for testing
// 可以看到chroot后只能在此根目录进行操作, 以外的目录都访问不到
bash-4.3# cd /tmp
bash: cd: /tmp: No such file or directory

可以看到chroot后在当前terminal/tmp/nicktming已经为根目录了. 打开另外一个terminal.

----------------------------terminal 02-------------------------------
root@nicktming:~# cd /tmp/nicktming/
root@nicktming:/tmp/nicktming# pwd
/tmp/nicktming
root@nicktming:/tmp/nicktming# ls
bin  busybox  lib  lib32  lib64  libx32  test.txt
root@nicktming:/tmp/nicktming# cat test.txt 
for testing
root@nicktming:/tmp/nicktming# echo "test1" > test1.txt

新增加一个test1.txt

----------------------------terminal 01-------------------------------
bash-4.3# ./busybox ls -l
total 980
drwxr-xr-x    2 0        0             4096 Apr  5 13:05 bin
-rwxr-xr-x    1 0        0           973200 Jul  9  2013 busybox
drwxr-xr-x   21 0        0             4096 Apr  5 12:35 lib
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 lib32
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 lib64
drwxr-xr-x    2 0        0             4096 Apr  5 12:35 libx32
-rw-r--r--    1 0        0               12 Apr  5 14:26 test.txt
-rw-r--r--    1 0        0                6 Apr  5 14:43 test1.txt
bash-4.3# ./busybox cat test1.txt
test1
bash-4.3# exit
exit

pivot_root

全部内容

[mydocker]---通过例子理解chroot 和 pivot_root_第1张图片
mydocker.png

1. [mydocker]---环境说明
2. [mydocker]---urfave cli 理解
3. [mydocker]---Linux Namespace
4. [mydocker]---Linux Cgroup
5. [mydocker]---构造容器01-实现run命令
6. [mydocker]---构造容器02-实现资源限制01
7. [mydocker]---构造容器02-实现资源限制02
8. [mydocker]---构造容器03-实现增加管道
9. [mydocker]---通过例子理解存储驱动AUFS
10. [mydocker]---通过例子理解chroot 和 pivot_root
11. [mydocker]---一步步实现使用busybox创建容器
12. [mydocker]---一步步实现使用AUFS包装busybox
13. [mydocker]---一步步实现volume操作
14. [mydocker]---实现保存镜像
15. [mydocker]---实现容器的后台运行
16. [mydocker]---实现查看运行中容器
17. [mydocker]---实现查看容器日志
18. [mydocker]---实现进入容器Namespace
19. [mydocker]---实现停止容器
20. [mydocker]---实现删除容器
21. [mydocker]---实现容器层隔离
22. [mydocker]---实现通过容器制作镜像
23. [mydocker]---实现cp操作
24. [mydocker]---实现容器指定环境变量
25. [mydocker]---网际协议IP
26. [mydocker]---网络虚拟设备veth bridge iptables
27. [mydocker]---docker的四种网络模型与原理实现(1)
28. [mydocker]---docker的四种网络模型与原理实现(2)
29. [mydocker]---容器地址分配
30. [mydocker]---网络net/netlink api 使用解析
31. [mydocker]---网络实现
32. [mydocker]---网络实现测试

你可能感兴趣的:([mydocker]---通过例子理解chroot 和 pivot_root)