docker 实践 #
一、Namespace 隔离: #
Network Namespace :
- 独立的附属网络设备, lo, veth 等虚拟/物理设备
- 独立协议栈,Ip 地址和路由表
- iptables 规则,ipvs 等
- 网桥技术实现等 UserNamespace: 用户 uid 映射问题
MountNamespace
Pid NameSapce: 确保应用pid=1,这也间接导致,容器没有 systemd 进程,应用进程被kill之后,整个容器停止工作
IPC namespace
MountNamespace #
|
|
虚拟 namespace 下的挂载情况
|
|
完整的 namespace 隔离 #
|
|
此时我们观察前后命名空间 ID 的区别
|
|
此后,还可以观察进程PID、网络端口情况、进程IPC通信,用户标识。
- 《自己动手写 Docker》
- 《Docker 的深入了解与掌握》
- 《Docker 深入浅出》
- 《第一本 Docker 书》
- Docker资源隔离:Namespace
- CNI 是什么
- 高级网络配置
二、Control Groups隔离: #
cgroups
三、镜像简述 #
coreutils #
coreutils[GNU Core Utilities]: 工具套件
bash: (help: type cd echo) #
- 提供常规命令 help: type cd echo …
- sh 命令语言解释器
busybox #
Busybox is a package that replaces a dozen standard packages, but it is not by itself a complete bootable system.
alpine #
-
busybox (ls rm mkdir);
-
包管理工具:apk /etc/apk/repositories
centos #
-
bash: (help: type cd echo)
- 提供常规命令 help: type cd echo …
- sh 命令语言解释器
-
coreutils[GNU Core Utilities]: 工具套件 (cat rm mkdir)几件套, 工具通常在存放在 /bin/*
-
包管理工具:yum
-
i18n相关文件,9.6M。// 国际化, alpine 优化,干掉了
杂项 #
需要吧 namespace 打开,这样 unshare 工具才能正常使用 echo 100 > /proc/sys/user/max_user_namespaces # 临时开一点,重启就没了 grubby –args=“user_namespace.enable=1” –update-kernel="$(grubby –default-kernel)" # 永久的
st=>start: Start|past:>http://www.google.com[blank]
e=>end: End:>http://www.google.com
op1=>operation: get_hotel_ids|past
op2=>operation: get_proxy|current
sub1=>subroutine: get_proxy|current
op3=>operation: save_comment|current
op4=>operation: set_sentiment|current
op5=>operation: set_record|current
cond1=>condition: ids_remain空?
cond2=>condition: proxy_list空?
cond3=>condition: ids_got空?
cond4=>condition: 爬取成功??
cond5=>condition: ids_remain空?
io1=>inputoutput: ids-remain
io2=>inputoutput: proxy_list
io3=>inputoutput: ids-got
st->op1(right)->io1->cond1
cond1(yes)->sub1->io2->cond2
cond2(no)->op3
cond2(yes)->sub1
cond1(no)->op3->cond4
cond4(yes)->io3->cond3
cond4(no)->io1
cond3(no)->op4
cond3(yes, right)->cond5
cond5(yes)->op5
cond5(no)->cond3
op5->e