容器和LXC简单命令

文章目录

  • 容器和LXC简单命令
    • 一.CGroup(控制组)的功能
      • 1. cgroup(容器控制组)
        • 1.1 功能:
        • 1.2 具体功能:
        • 1.3 控制组可以限制的资源有
    • 二.docker基本概念
    • 三.docker工作方式
    • 四.容器的编排
    • 五. lxc命令用法
        • 1.1 下载lxc的epel源,并安装lxc软件包和依赖包
        • 1.2 添加网桥
      • 2.启动lxc
      • 3. 用于判断linux内核是否支持LXC
      • 4. 列出容器模板
      • 5. 创建lxc主机
      • 6. 命令

一.CGroup(控制组)的功能

1. cgroup(容器控制组)

  • Container(容器)分离的资源和隔离内容有

    • UTS:(主机名与域名)
    • Mount(文件系统挂载树):文件系统挂载点
    • IPC:共享内存
    • PID进程树,进程编号
    • User:用户和用户组
    • Network(tcp/ip协议栈):网络设备,IP地址,端口
  • 每个容器都可以拥有自己独立的命名空间,运行其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器间彼此互不影响

  • 命名空间由CGroup创建的

1.1 功能:
  • 用来对共享资源进行隔离,限制和审计,控制组可以对容器的内存,CPU和磁盘io等资源进行限制
1.2 具体功能:
  • 资源限制组:可以对资源所使用的内存进行限制,超出会发出警告OOM(内存溢出)
  • 优先级:让一些组优先得到更多的CPU等资源
  • 资源审计:用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进程组使用的CPU时间
  • 隔离:为控制组隔离命名空间(Namespaces命名空间 ),这样一个组不会看到另一个组的进程、网络连接和文件系统
  • 控制:挂起(暂停),恢复,重启
1.3 控制组可以限制的资源有
  • blkio:块设备,硬盘
  • CPU
  • cpuacct:CPU资源使用报告
  • cpuset:CPU核心
  • devices:设备访问
  • freezer:挂起或恢复任务
  • memory:内存用量
  • perf_event:对控制组中的任务进行统一性能测试
  • net_cls:cgroup中的任务创建的数据报文的类别标识符

1.安装Docker后,用户可以在/sys/fs/cgroup/memory/docker/目录下看到对Docker组应用的各种限制项,用户可以通过修改这些文件值来控制组限制Docker应用资源

[root@SYL4 ~]# ls /sys/fs/cgroup/memory/
cgroup.clone_children               memory.memsw.failcnt
cgroup.event_control                memory.memsw.limit_in_bytes
cgroup.procs                        memory.memsw.max_usage_in_bytes
cgroup.sane_behavior                memory.memsw.usage_in_bytes
init.scope                          memory.move_charge_at_immigrate
machine.slice                       memory.numa_stat
memory.failcnt                      memory.oom_control
memory.force_empty                  memory.pressure_level
memory.kmem.failcnt                 memory.soft_limit_in_bytes
memory.kmem.limit_in_bytes          memory.stat
memory.kmem.max_usage_in_bytes      memory.swappiness
memory.kmem.slabinfo                memory.usage_in_bytes
memory.kmem.tcp.failcnt             memory.use_hierarchy
memory.kmem.tcp.limit_in_bytes      notify_on_release
memory.kmem.tcp.max_usage_in_bytes  release_agent
memory.kmem.tcp.usage_in_bytes      system.slice
memory.kmem.usage_in_bytes          tasks
memory.limit_in_bytes               user.slice
memory.max_usage_in_bytes
[root@SYL4 ~]#

二.docker基本概念

  • docker是容器技术的前端工具,是用来管理容器的工具,它将容器得以简化

  • LXC进行大规模创建容器很难,想在另一台主机上复刻一个一模一样的容器也很难,所以docker早期的版本其核心就是一个LXC,docker对其进行了二次封装,功能的实现是通过LXC做容器管理引擎

  • 创建容器时,将系统空间所使用的组件事先准备好,编排好,将其打包成一个镜像文件,然后将镜像文件拷贝到目标主机直接部署启动。

  • docker的镜像文件放在一个集中统一的互联网仓库中的称之为镜像仓库

  • docker的核心技术主要包括Linux操作系统的命名空间、控制组、联合文件系统和Linux虚拟网络支持。

  • 联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加。

三.docker工作方式

  • docker采取一个用户空间只跑一个业务进程的方式,在一个容器内只运行一个进程(一个容器跑一个进程或业务)

  • LXC是把一个容器当一个用户空间使用,当虚拟机一样使用,里面可以运行N个进程,这就使得我们在容器内去管理时极为不便,而docker用这种限制性的方式,在一个容器中只运行一个进程的方式,使得容器的管理更加方便。

  • docker的优劣势:

    • 删除一个容器不会影响其他容器
    • 调试不便,占空间(每个容器中都必须自带调试工具,ps命令)
    • 分发容易,真正意义上一次编写(写的镜像可以到处运行)到处运行,比java的跨平台更彻底,装的docker,可以直接部署
    • 部署容易,无论底层系统是什么,只要有docker,直接run就可以了
    • 分层构建,联合挂载(真机上的资源跟容器所绑定)
  • base基础镜像,是开源的

  • 在容器中有数据称作有状态,没有数据称作无状态。在容器的使用中,我们应以有状态为耻,以无状态为荣。数据不应该放在容器中,而应放置于外部存储中,通过挂载到容器中从而进行数据的存储。

四.容器的编排

构建一个lnmp架构的时候,它们之间会有依赖关系,哪个应用应该在什么时候启动,在谁之前或之后启动,这种依赖关系我们应该要事先定义好,最好是按照一定的次序实现,而docker自身没有这个功能,所以我们需要一个在docker的基础上,能够把这种应用程序之间的依赖关系、从属关系、隶属关系等等反映在启动、关闭时的次序和管理逻辑中,这种功能被称为容器编排。

有了docker以后,运维的发布工作必须通过编排工具来实现容器的编排
常见的容器编排工具:

  • machine+swarm(把N个docker主机当一个主机来管理)+compose(单机编排)
  • mesos(实现统一资源调度和分配)+marathon
  • kubernetes --> k8s

五. lxc命令用法

  • 1.Linux容器,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器,内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和共享API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。

  • 2.在Linux内核中,提供了cgroups功能,来达成资源的隔离。它同时也提供了名称空间隔离的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要启动任何虚拟机。

  • 3.LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器本身极为轻量化,提升了创建虚拟机的速度

  • 4.Docker本质来说不是容器,而是容器的管理工具,最初的Docker也是基于LXC实现的。

1.1 下载lxc的epel源,并安装lxc软件包和依赖包
[root@SYL4 ~]# yum -y install epel-release
[root@SYL4 ~]# yum -y install lxc lxc-templates bridge-utils lxc-libs libcgroup libvirt
lxc           #主程序包
lxc-templates #lxc的配置模板
bridge-utils  #网桥管理工具
lxc-libs      #lxc所需的库文件
libcgroup     #cgroup是为Linux内核提供任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。
libvirt       #管理Linux的虚拟化功能所需的服务器端守护程序。 需要针对特定驱动程序的管理程序。
1.2 添加网桥
brctl addbr virbr0  #添加网桥
brctl addif virbr0 ens160 ; # 将网桥关联到ens160这个网卡 \
ip addr del dev ens160 192.168.232.132/24 ; #把网卡上的ip删了 \
ifconfig  virbr0 192.168.232.132/32 up  #给网桥配置ip \
ip addr add 192.168.232.132/32 dev virbr0
ip link set virbr0 ip
route add default gw 192.168.232.2 #设置默认网关

2.启动lxc

[root@SYL4 ~]# systemctl start lxc//启动服务
[root@SYL4 ~]# systemctl status lxc//查看状态
● lxc.service - LXC Container Initialization and Autoboot CodeLoaded: loaded (/usr/lib/systemd/system/lxc.service; disabled; v>Active: active (exited) since Sat 2022-04-23 17:49:23 CST; 1s agoDocs: man:lxc-autostartman:lxcProcess: 51796 ExecStart=/usr/libexec/lxc/lxc-containers start (c>Process: 51794 ExecStartPre=/usr/libexec/lxc/lxc-apparmor-load (c>Main PID: 51796 (code=exited, status=0/SUCCESS)Apr 23 17:49:23 SYL4 systemd[1]: Starting LXC Container Initializat>
Apr 23 17:49:23 SYL4 systemd[1]: Started LXC Container Initializati>
[root@SYL4 ~]#
[root@SYL4 ~]# systemctl start libvirtd//启动虚拟网络
[root@SYL4 ~]#

3. 用于判断linux内核是否支持LXC

[root@SYL4 ~]# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-4.18.0-348.el8.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Warning: newuidmap is not setuid-root
Warning: newgidmap is not setuid-root
Network namespace: enabled--- Control groups ---
Cgroups: enabledCgroup v1 mount points:
/sys/fs/cgroup/systemd
/sys/fs/cgroup/freezer
/sys/fs/cgroup/perf_event
/sys/fs/cgroup/memory
/sys/fs/cgroup/pids
/sys/fs/cgroup/cpu,cpuacct
/sys/fs/cgroup/rdma
/sys/fs/cgroup/cpuset
/sys/fs/cgroup/net_cls,net_prio
/sys/fs/cgroup/blkio
/sys/fs/cgroup/devices
/sys/fs/cgroup/hugetlbCgroup v2 mount points: Cgroup v1 clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled--- Misc ---
Veth pair device: enabled, not loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, not loaded
Advanced netfilter: enabled, not loaded
CONFIG_NF_NAT_IPV4: missing
CONFIG_NF_NAT_IPV6: missing
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, not loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, loaded--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig[root@SYL4 ~]#

4. 列出容器模板

[root@SYL4 ~]# ls /usr/share/lxc/templates/
lxc-busybox  lxc-download  lxc-local  lxc-oci
[root@SYL4 ~]#

5. 创建lxc主机

[root@SYL4 ~]# ls /usr/share/lxc/templates/
lxc-busybox  lxc-download  lxc-local  lxc-oci
[root@SYL4 ~]# lxc-create --name=mushuang -t /usr/share/lxc/templates/lxc-busybox
/usr/bin/which: no busybox in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
ERROR: Please pass a pathname for busybox binary
lxc-create: mushuang: lxccontainer.c: create_run_template: 1625 Failed to create container from template
lxc-create: mushuang: tools/lxc_create.c: main: 331 Failed to create container mushuang
用法: lxc-create {-n name} [-f config_file] {-t template} [-B backingstore] [-- template-options]
  • 选项
-n,--name               #容器的主机名
-f,--config            #指定配置文件以配置容器的虚拟化和隔离功能
-t template             #调用模板脚本,可执行模板脚本的完整路径也可以作为参数传递。 “none”可用于强制lxc-create跳过rootfs创建。
-B backingstore         #指定根文件储存路径的文件系统,可选:dir、lvm、loop、btrfs、zfs、best   ,默认为dir,如果是dir可以使用--dir指定lxc主机的根在宿主机的存储路径。
-P, --lxcpath           #自定义容器路径。默认值为/var/lib/lxc。
-o, --logfile           #输出创建过程到一个日志文件中。
-l, --logpriority       #将日志优先级设置为LEVEL,默认优先级为ERROR
--                      #向template传递参数查看可选参数:lxc-create -t TEMPLATE -h,常用参数如下-n,--name       #容器标识符-p,--path       #指定容器根的创建路径,默认/var/lib/lxc/容器名/-c,--clean      #清除缓存-R,--release    #指定Centos的发行版本--fqdn       #用于DNS和系统命名的完全域名(FQDN)--repo       #指定创建容器是使用的yum源,这个是redhat系统的参数-a,--arch       #指定容器的架构,可选i686,x86_64

6. 命令

lxc-checkconfig
检查系统环境是否满足容器使用要求;lxc-create
创建lxc容器;
格式:lxc-create -n NAME -t TEMPLATE_NAMElxc-start
启动容器;
格式:lxc-start -n NAME -dlxc-info
查看容器相关的信息;
格式:lxc-info -n NAMElxc-console
附加至指定容器的控制台;
格式:lxc-console -n NAME -t NUMBERlxc-stop
停止容器;lxc-destory
删除处于停机状态的容器;lxc-snapshot
创建和恢复快照;退出容器方式:<Ctrl+a q>

容器和LXC简单命令相关推荐

  1. dockers容器基础及基础命令(一)

    目录 前言 一.KVM虚拟化的简单概论 1.虚拟化 2.虚拟化类型 3.虚拟化特性 4.KVM简介 二.docker容器简介 1.docker概念 2.Docker和虚拟机的区别 3.Docker的使 ...

  2. LXC简单介绍与使用

    简介 LXC(LinuX Containers)Linux容器,一种操作系统层虚拟化技术,为Linux内核容器功能的一个用户空间接口.它将应用软件系统打包成一个软件容器(Container),内含应用 ...

  3. Docker新手教程(03)进入已创建的Docker容器并执行bash命令

    03.进入已创建的Docker容器并执行bash命令 1.情况描述 我们会遇见这样一种情况,一个Docker容器执行一段时间后,出错了,这个时候我们需要查看到底是因为什么原因出错. 正常情况,我们进入 ...

  4. IoC容器总结与简单模拟

    IoC容器总结与简单模拟 当一个组件需要外部资源时,最直接也最明智的方法是执行查找,这种行为称为主动查找.但这种查找存在一个缺点--组件需要知道如何获得资源.那么它的解决方案是什么呢?请看下文. AD ...

  5. sola ris 简单命令

    Solaris 简单命令 2007-04-14 17:00:56 标签:solaris linux unix 命令 solaris [推送到技术圈] 比较郁闷的是,无法执行rb文件,提示没有权限.想给 ...

  6. docker 在容器外执行某个容器内的某个命令

    有时候我们想执行某个容器的某条命令,但又不想进入容器内.那该怎么办? 于是脚本可以这样写 DOCKER_ID=62f3f40ab240 sudo docker exec -it $DOCKER_ID ...

  7. 华为ensp常用简单命令(二)

    华为ensp常用简单命令(二) 华为ensp 1.CE交换机 2.vlan及三大模式划分端口入vlan 3.网桥优先级 4.RSTP和MSTP 5.查看命令 华为ensp 1.CE交换机 CE交换机把 ...

  8. 关于file的部分简单命令

    1.关于file的简单命令 2.创建/删除  文件/目录 ## -f和-r可以连用,表示强制删除 3.文件/目录的复制 ##复制是一个新建的过程,在保持原有不变的基础上重新再建立一个 4.文件/目录的 ...

  9. linux学习-简单命令介绍及安装VMware Tools

    常用简单命令介绍 ethernet以太网 pts:模拟终端 图形界面: Ctrl+Alt+F1 字符界面:Ctrl+Alt+F2-F6 切换虚拟终端:(本机操作) # chvt 1-6 关闭图形界面, ...

最新文章

  1. SQL Server 跨数据库事务
  2. WebGIS中基于AGS的画圆查询简析以及通过Polygon来构造圆的算法
  3. 洛谷 p2066 机器分配(资源型)
  4. Kafka JAVA客户端代码示例--高级应用
  5. 一起用C#做个五子棋的小游戏 增加了程序对战功能
  6. php webshell开源,[github开源]webshell连接器--Jeshell
  7. 英国鬼死于狭隘和傲慢,中国鬼死于听天由命和漫不经心--《我的团长我的团》兰晓龙...
  8. 《C程序设计语言》笔记 (三) 控制流
  9. 通达OA - 数据备份与恢复指南
  10. 音视频是怎样实现传输的
  11. 税控盘查看服务器设置的网站,税控盘服务器地址
  12. 北京航空航天计算机考研科目,2020考研北京航空航天大学计算机考研考试科目...
  13. 计算机通信答辩ppt,电子设计大赛答辩.ppt
  14. 第六章代码的问题——基于DirectX11的3D图形程序设计案例教程——重庆大学出版社
  15. 角色设计竟然有这些小技巧
  16. Doctrine 查询语法
  17. 把模糊MATLAB波形的图变清晰,什么修图软件能把模糊图片清晰化?
  18. java计算机毕业设计校园环境保护监督系统源程序+mysql+系统+lw文档+远程调试
  19. OWC生成统计报表(柱形图)
  20. Java 8新特性(三):Optional类

热门文章

  1. #185. [NOIP2016 提高组] 蚯蚓题解
  2. 如何解决eNSP启动AR/WLAN设备失败问题
  3. 站在营销看工作,偶发几点小心得
  4. C51数字钟程序-ZT(拿来学习用)
  5. zabbix配置钉钉报警
  6. 【全网首发】听阿里云产品架构师罗小飞解读CDN产品最佳实践
  7. python中如何求水仙花数_python如何求水仙花数?
  8. DOM深入学习 --- 聚焦:focus / blur ,foucs / blur 委托的实现,tabindex中任何元素都可聚焦(六)
  9. 1602液晶显示器代码
  10. SecureCRT快速连接服务器