测试手动建一个container

这里写的只是测试. 目前还不能在生产环境中使用!!!

===============

容器最基本的功能. 都是使用linux内核中的 namespace 和 cgroup
相到了一些相关的命令. 于是有一个想法. 可不可以不使用docker之类的.
自己用linux + shell 命令手动建些容器来用…

如果继续扩展这个环境在最后简单讨论一下.

这里还没有讨论cgroup 和复杂的后台存储. 只是极简单的进行了一些测试.

====================

我把 docker debian10的image当作我container的文件系统.

/home/sausage/A_deb10 是container使用的目录
screen当作放在container里运行的第一个进程. (这里应该有别的选择.先想到这个就先用着. 先不展开…)

===============

我先准备一个脚本. 用做在指定的container里执行命令. (也包括执进一个bash.算是进入container环境,…)

vi /usr/sbin/dcon
#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
if [ KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ -ge 1 ] then …(ps axf |grep SCREEN|grep A_deb10|awk ‘{print $1}’)
shift
nsenter --target $CPID --mount --uts --ipc --net --pid $@
else
echo
echo “Usage:”
echo " $0 Get container shell."
echo " $0 <command & parameters> run command in container ."
echo
ps axf |grep SCREEN|grep " -t "|grep -v grep
fi

================

继续列出相关测试的命令.

dir="/home/sausage/"
name=“A_deb10”
cmd="/usr/bin/screen -d -m -t n a m e " f n = " name " fn=" name"fn="dir n a m e / p i t " o l d r o o t = " name/pit" oldroot=" name/pit"oldroot="dir$name/oldroot"

ETHNAME=“deth1”
MACADDR1=“28:d2:44:01:01:0a”
MACADDR2=“28:d2:44:01:01:0b”

mount --rbind d i r dir dirname d i r dir dirname
mkdir $oldroot 2>/dev/null
unshare --mount --net --ipc --pid --uts $cmd

d i r dir dirname/pit.sh
echo “mount --make-rslave /” >> d i r dir dirname/pit.sh
echo “cd d i r dir dirname” >> d i r dir dirname/pit.sh
echo “pivot_root . oldroot” >> d i r dir dirname/pit.sh
echo “umount -l /oldroot” >> d i r dir dirname/pit.sh

dcon A_deb10 “bash d i r dir dirname/pit.sh”
dcon A_deb10 “mount -t proc /proc /proc”
dcon A_deb10 “mount sysfs /sys -t sysfs”
dcon A_deb10 “rm -rf /pit.sh”

下面做一个虚网卡对. 一端放到container里. 这样可以实现三层连接或是二层桥接.
我这里简单给一个三层的设置

ip link add $ETHNAME address $MACADDR1 type veth peer name B address $MACADDR2
ip link set $ETHNAME up
ip link set B netns $pid

dcon A_deb10 ip link del eth0 2>/dev/null
dcon A_deb10 ip link set dev B name eth0
dcon A_deb10 ip link set eth0 up

dcon A_deb10 ip addr add 1.0.0.253/24 dev eth0
dcon A_deb10 ip link set eth0 up
dcon A_deb10 ip route rep 0.0.0.0/0 via 1.0.0.254

==============

关闭相关操作.
1.杀死进程.
2. umount 当初准备做根用的 bind rbind那个挂接点.
目前看好像没有别的需要做.

===============

展开唠一下container所使用的存储. 这里只是先列出不同的选择会带来哪些功能和直接可以考虑到的问题.
这部分目前还没有去测试.

本地目录. 简单,速度快.但 fs维护层面有一些需要注意.
本地块设备(或lvm等) 有一层虚配置.支持存储的隔离.
qemu-nbd 可实现多机结构.可以考虑一些备份和迁移. 可以空间按需分配.
guestmount 和qemu-nbd类拟 不过没有通过网络共享功能.
nfs, iscsi, nbd 之类的. 可以实现多机和组合出备份方案.
rbd, ceph…

============

还需要讨论的拨展还有 cgroup 实现资源的限制.
希望过些天我能进一步做一些测试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值