- Namespaces
- Chroot
- Cgroups
docker run --rm -it ubuntu /bin/bash
exit 退出container
- docker container 的隔離機制(原理就是linux 中的namespace)
- What you can see
- Created with syscall
- Unix Timesharing System
- Process IDs
- Mounts
- Network
- User IDs
- InterProcess Comms
- What you can use
- Filesystem interface
- Memory
- CPU
- I/O
- process number
開始設定container時必須以sudo身份執行
可以使用chroot來限制文件內容 chroot usr chdir / ls 無法再看到更上層的目錄
- 使用sleep方法來快速找尋進程
sleep 100
ps -C sleep
sudo ls -l /proc/[sleep pid]/root
lrwxrwxrwx 1 root root 0 12月 2 15:17 /proc/60719/root -> /usr
usr 為我 chroot 的目錄
使用 mount | grep proc 查看mount對象
新增以後發現從主機上mount | grep proc無法查看到container
Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWPID | syscall.CLONE_NEWNS,
// 希望container具有new ns(namespace) 但不與主機共享
Unshareflags: syscall.CLONE_NEWNS,
docker限制最大記憶體量的方式其實是將數字寫入文件中,這就是它告訴內核它需要限制的最大量
vim /etc/default/grub
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=0 systemd.unified_cgroup_hierarchy=0"
測試瘋狂創造進程充報記憶體是否還會被cgroup控制組限制->fork bomb :() { : | : & } ; :
-> 發現永遠不會超過20個進程
查看當前進程 cat pids.current