# ycontainer **Repository Path**: yinhu000/ycontainer ## Basic Information - **Project Name**: ycontainer - **Description**: 手动写个容器 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-25 - **Last Updated**: 2022-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # y-container go build -o yc main.go && scp yc root@192.168.88.135:/root/bin && ssh root@192.168.88.135 chmod +x bin/yc ``` bash # 改变根目录 chroot busybox /bin/sh # 将proc文件系统挂载到aaa目录下, 其中第二个proc只是一个名字,随便写都可以,会在`mount -l`中显示这个名字 mount -t proc proc ~/aaa # mount namespace 之 MS_PRIVATE https://lwn.net/Articles/531114/#series_index ``` 执行 `rm -rf /sys/fs/cgroup/memory/ycontainer/`时,会报`Operation not permitted`错误, 可以执行 `rmdir /sys/fs/cgroup/memory/ycontainer/` 原因:http://blog.tinola.com/?e=21 ## stress ```bash # 模拟一个 CPU 使用率 100% 的场景, 执行60秒 stress --cpu 1 --timeout 60 # 4个内存分配进程,每次分配大小100M,分配后不释放,长期保持测试 stress --vm 4 --vm-bytes 100M --vm-keep # 测试60秒 stress --vm 4 --vm-bytes 100M --timeout 60 # 新增6个I/O进程,测试60秒 stress --i 6 -t 60 # 最后三个数依次是 1分钟,5分钟,15分钟的平均负载 watch -d uptime # 5 表示间隔 5 秒后输出一组数据 mpstat -P ALL 5 ``` ## 安装aufs aufs开源库: http://aufs.sourceforge.net/ ```bash # centos 安装 aufs # 参考: https://github.com/bnied/kernel-ml-aufs [root@localhost aufs]# cd /etc/yum.repos.d [root@localhost aufs]# wget https://yum.spaceduck.org/kernel-ml-aufs/kernel-ml-aufs.repo [root@localhost aufs]# yum install -y kernel-ml-aufs # 之后重启 reboot 选择刚刚安装的那个内核就行了 [root@localhost aufs]# cat /proc/filesystems | grep aufs nodev aufs # 挂载 [root@localhost aufs]# mkdir base mnt top [root@localhost aufs]# mount -t aufs -o dirs=base none mnt mount: wrong fs type, bad option, bad superblock on none, missing codepage or helper program, or other error In some cases useful info is found in syslog - try dmesg | tail or so. # 执行挂载的报这个错,根据提示 执行 [root@localhost aufs]# dmesg | tail [351.401669] aufs au_xino_create:219:mount[7324]: xino doesn't support /tmp/.aufs.xino(xfs) [609.042445] aufs au_xino_create:219:mount[7326]: xino doesn't support /tmp/.aufs.xino(xfs) # 解决方案 [root@localhost aufs]# mount -t aufs -o noxino,dirs=base none mnt # 参考 https://lists.debian.org/debian-live/2009/12/msg00173.html https://bbs.archlinux.org/viewtopic.php?id=75932 ``` ## 网络 ```shell # 创建net namespace ip netns add ns111 ip netns add ns222 # 创建veth对 ip link add name veth111 type veth peer name veth222 # 将指定veth绑定到指定net namespace ip link set veth111 netns ns111 ip link set veth222 netns ns222 # 查看 ip -n ns111 link ip -n ns222 link # 为veth设置地址,并启用 lo,veth ip -n ns111 addr add 10.10.10.1/24 dev veth111 ip -n ns111 link set veth111 up ip -n ns111 link set lo up ip -n ns222 addr add 10.10.10.2/24 dev veth222 ip -n ns222 link set veth222 up ip -n ns222 link set lo up #ip netns exec ns111 ifconfig veth111 182.23.21.3/24 up #ip netns exec ns222 ifconfig veth222 182.23.21.4/24 up # #ip netns exec ns111 route add default dev veth111 #ip netns exec ns222 route add default dev veth222 ip netns exec ns111 ping 10.10.10.2 ip netns exec ns222 ping 10.10.10.1 ``` ### bridge ```shell yum install -y bridge-utils # 创建bridge、绑定IP、并启用 ip link add bridge333 type bridge ip addr add 10.10.10.3/24 dev bridge333 ip link set bridge333 up # 创建ns333 ip netns add ns333 # 创建veth对 ip link add name veth331 type veth peer name veth332 # 绑定veth对到ns333和bridge333 ip link set veth331 netns ns333 ip link set veth332 master bridge333 # 为ns333绑定ip、启用 ip -n ns333 addr add 10.10.10.4/24 dev veth331 brd + ip -n ns333 link set dev veth331 up ip -n ns333 link set dev lo up # 启用bridge上的veth ip link set dev veth332 up # 以上操作在来个ns444 ip netns add ns444 ip link add name veth441 type veth peer name veth442 ip link set veth441 netns ns444 ip link set veth442 master bridge333 ip -n ns444 addr add 10.0.10.5/24 dev ns444 brd + ip -n ns444 link set dev veth441 up ip -n ns444 link set dev lo up ip link set dev veth442 up ip netns exec ns333 ping 10.0.10.5 ip netns exec ns444 ping 10.0.10.4 ip netns add ns333 brctl addbr br333 ip link add name veth111 type veth peer name veth222 ip link set veth111 netns ns333 brctl addif br333 veth222 ```