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。

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 内核的 cgroupnamespace 特性来实现容器的资源隔离,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]

hook

https://www.cnblogs.com/utopia007/p/12603838.html


0 条评论

发表回复

您的电子邮箱地址不会被公开。