http://www.360doc.com/content/22/0609/09/474846_1035269866.shtml
https://www.myinqi.com/zixun/996935.html
目录
源码
下载地址:https://gitee.com/mirrors/lxc
官网地址:https://linuxcontainers.org/lxc/downloads/
android平台编译
注意:
1.lxc5,6都缺少Makefile.am文件,无法执行autotool生成configure文件。
2.ndk一定要使用17版本,其它的高版本试了好几个都无法编译。
1 #make clean
2 #sudo rm -rf out/
3 #mkdir out
4 NDK_ROOT=/etc/opt/pkg/android-ndk-r17c
5 SYSROOT="$NDK_ROOT/platforms/android-28/arch-arm64"
6 SI="$NDK_ROOT/sysroot/usr/include"
7 FLAGS="-isystem $SI -isystem $SI/aarch64-linux-android"
8
9 export CC="$NDK_ROOT/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc"
10 export CFLAGS="--sysroot=$SYSROOT $FLAGS -pie"
11 export LDFLAGS="-L/home/xinyi/code/lxc-4.0.0/out/lib"
12 #export LIBS="-llxc"
13 #export LD_LIBRARY_PATH=/home/pxl/lxc-4.0.12/out/lib:$LD_LIBRARY_PATH
14 #export LD_LIBRARY_PATH=/home/pxl/lxc-4.0.12/out/lib/
15
16 #echo $LD_LIBRARY_PATH
17 #exit 1
18 pre=`pwd`
19 ./configure --prefix=${pre}/out \
20 --host=aarch64-linux-android
21 # --enable-configpath-log
22
23 #make
24 sudo make install
3.项目本身就有configure.ac文件,无需用 autoscan再生成configure.in或者configure.scan文件。
configure编译参数说明
参数传递的原理
以--with-rootfs-path
为例
在configure.ac中:
# Rootfs path, where the container mount structure is assembled
AC_ARG_WITH([rootfs-path],
[AS_HELP_STRING([--with-rootfs-path=dir], [lxc rootfs mount point])],
[with_rootfs_path=$withval], [with_rootfs_path=['${libdir}/lxc/rootfs']])
AS_AC_EXPAND(LXCROOTFSMOUNT, "$with_rootfs_path")
最终编译成宏LXCROOTFSMOUNT通过-DLXCROOTFSMOUNT传递给代码程序。
在lxc_conf_init方法中:
static char *default_rootfs_mount = LXCROOTFSMOUNT;
new->rootfs.mount = strdup(default_rootfs_mount);
各个参数说明
工程参数
--with-config-path
指定配置文件的根目录
容器参数
--with-rootfs-path
指定容器根文件系统的挂载目录
原理
lxc进化历史
https://zhuanlan.zhihu.com/p/634176688
Chroot(文件系统层次的资源隔离)
Chroot 是一个可供 User Process 调用的 System Call 接口,可以让一个 Process 把指定的目录作为根目录(Root Directory),随后 Process 所有的文件系统操作都只能在这个指定目录中进行。故称之为 Change Root。
-
chroot,pivot_root和switch_root 区别:
https://blog.csdn.net/u012385733/article/details/102565591 -
pivot_root函数(改变命名空间下进程的根文件系统):
https://blog.csdn.net/m0_62969222/article/details/132039479
https://blog.csdn.net/liuyij3430448/article/details/128283244
https://zhuanlan.zhihu.com/p/101096040
1) pivot_root参数说明
1 new_root 与 put_old 必须是文件夹
2 new_root文件夹必须是一个挂载点 ,并且new_root文件夹里面有完整rootfs的各种文件
3 new_root 文件夹挂载应该是一个与主机不同的name space
4 put_old文件夹必须在new_root文件夹内
2)关于pivot_root(".",".")
避免使用临时目录,将当前“/”作为rootfs,将/proc/self/cwd作为put_old,从而避免必须创建子目录,但这时需要先unmount(".")再chdir("/")
lxc基本原理
LXC 也是利用了 Linux 内核的 cgroup 和 namespace 特性来实现容器的资源隔离,namespace主资源隔离,cgroup主资源配置。
https://www.jianshu.com/p/63fea471bc43?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes (**)
https://www.cnblogs.com/frankltf/p/11681312.html
https://wenku.baidu.com/view/ac711c68f28583d049649b6648d7c1c708a10b91.html?wkts=1714116127325&bdQuery=lxc%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86 (创建容器、配置容器、启动容器、管理容器)
https://www.51cto.com/article/636399.html (依赖cgroup、namespace等技术)
指令
https://blog.csdn.net/yyymmmmyyy/article/details/132695327
lxc环境检查
https://www.cnblogs.com/mic-chen/p/13409756.html
参数设置
日志设置
设置日志输出位置和输出级别:--logfile ./lxc.log --logpriority info
指令集
1.创建虚拟机
ls -alh /usr/share/lxc/templates/ #列出已经安装到你的系统之中可用的LXC模板容器
lxc-create -n [container-name] -t centos #创建虚拟机
2.启动虚拟机
后台启动
lxc-start -n [container-name] -d
前台启动
lxc-start -n [container-name]
3.停止虚拟机
lxc-stop -n [container-name]
4.在宿主机中对虚拟机执行命令
lxc-attach --name [container-name] -- passwd
或者lxc-attach --n [container-name] -- cmd
5.删除虚拟机
先停掉容器然后进行删除
lxc-stop --name [container-name]
lxc-destroy --name [container-name]
6.限制虚拟机资源使用
#CPU
#指定一个CPU核心
lxc-cgroup -n [container-name] cpuset.cpus 0
#指定多个CPU核心
lxc-cgroup -n [container-name] cpuset.cpus 0-1
#指定CPU最高使用率
lxc-cgroup -n [container-name] cpu.cfs_quota_us [value]
#内存
#最大使用内存
lxc-cgroup -n [container-name] memory.limit_in_bytes [value]
0 条评论