[docker基础四]容器虚拟化基础之 LXC
目录
一 认识LXC
二 LXC容器操作实战
1)实战目的
2)基础知识
lxc-checkconfig
lxc-create
lxc-start
lxc-ls
lxc-info
lxc-attach
lxc-stop
lxc-destory
3)安装LXC(我的是Ubuntu)
4)操作实战
1. 检查 lxc 是否运行
2. 检查 lxc 的功能支持情况
3. 查看 lxc 提供的容器模板
4. 创建一个 lxc 虚拟主机,这个命令就会下载安装指定环境下的软件包,创建新容器。 整个过程需要时间较长,与容器的类型有关
5. 下载安装完所有软件包后,LXC 容器镜像就创建完成了,你可以看到默认的登录 界面。容器被放到 /var/lib/lxc/ 这个目录下,容器的根文件系统放在 /var/lib/lxc//rootfs 目录下。创建过程中下载的软件包保存在 /var/cache/lxc 目 录下面,当你想另外建一个一样的容器时,可以省去很多下载时间。
6. 查看创建的容器信息
7. 启动容器,我们可以看到容器状态为运行中
8. 查看容器的详细信息
9. 容器 ip 为 10.0.3.248,我们通过 ssh 进入容器,查看 ip 地址,磁盘挂载信息,目 录信息和宿主机都不一样
10. 在容器外面执行命令
11. 停止容器
12. 删除容器
一 认识LXC
LXC 是什么?
LXC(LinuX Containers)Linux 容器,一种操作系统层虚拟化技术,为 Linux 内核容 器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container), 内含应用软件本身的代码,以及所需要的操作系统核心和库。透过统一的名字空间和 共享 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境, 使得 Linux 用户可以容易的创建和管理系统或应用容器。 LXC 是最早一批真正把完整的容器技术用一组简易使用的工具和模板来极大的简化了 容器技术使用的一个方案 LXC 虽然极大的简化了容器技术的使用,但比起直接通过内核调用来使用容器技术, 其复杂程度其实并没有多大降低,因为我们必须要学会 LXC 的一组命令工具,且由于 内核的创建都是通过命令来实现的,通过批量命令实现数据迁移并不容易。其隔离性 也没有虚拟机那么强大。 后来就出现了 docker,所以从一定程度上来说,docker 就是 LXC 的增强版。
二 LXC容器操作实战
1)实战目的
通过 lxc 来完成容器的创建,体会容器,并了解 docker 并不是容器的唯一实现。自 docker 0.9 版本起,docker 除了继续支持 LXC 外,还开始引入自家的 libcontainer, 试图打造更通用的底层容器虚拟化库。如今的 docker 基本上都已经是使用 libcontainer 而非 LXC 了。
2)基础知识
LXC 的常用命令如下:
lxc-checkconfig
检查系统环境是否满足容器使用要求;
格式: lxc-checkconfig
lxc-create
创建 lxc 容器;
格式: lxc-create -n NAME -t TEMPLATE_NAME [-- template-options]
lxc-start
启动容器;
格式: lxc-start -n NAME -d
lxc-ls
列出所有容器,-f 表示打印常用的信息 ;
格式: lxc-ls -f
lxc-info
查看容器相关的信息;
格式: lxc-info -n NAME
lxc-attach
进入容器执行命令;
格式: lxc-attach --name=NAME [-- COMMAND]
lxc-stop
停止容器;
格式: lxc-stop -n NAME
lxc-destory
删除处于停机状态的容器;
格式: lxc-destory -n NAME
3)安装LXC(我的是Ubuntu)
安装前执行检查看下是否需要卸载,如果需要卸载,执行下面的命令完成卸载,不需 要直接到第 2 步
#一、安装
#lxc 主程序包
#lxc-templates lxc 的配置模板
#bridge-utils 网桥管理工具
apt install lxc lxc-templates bridge-utils -y
#二、检查服务是否正常运行
systemctl status lxc
4)操作实战
1. 检查 lxc 是否运行
2. 检查 lxc 的功能支持情况
3. 查看 lxc 提供的容器模板
4. 创建一个 lxc 虚拟主机,这个命令就会下载安装指定环境下的软件包,创建新容器。 整个过程需要时间较长,与容器的类型有关
#创建 Ubuntu LXC 容器,-t 指定模板容器,-n 指定要创建的容器名,下面创建
的是 ubuntu
#Centos 上创建 centos 的命令:lxc-create -t centos --name centos1 --
--release 7 --arch x86_64
#Ubuntu 上创建 centos 的命令,注意模板需要使用 download:lxc-create --
name centos7 --template=download -- --dist=centos --release=7 --
arch=amd64
root@139-159-150-152:/var/run/docker/netns# lxc-create -t ubuntu -
-name lxchost1 -- -r xenial -a amd64
#
#创建完成显示
##
# The default user is 'ubuntu' with password 'ubuntu'!
# Use the 'sudo' command to run tasks as root in the container.
##
5. 下载安装完所有软件包后,LXC 容器镜像就创建完成了,你可以看到默认的登录 界面。容器被放到 /var/lib/lxc/ 这个目录下,容器的根文件系统放在 /var/lib/lxc//rootfs 目录下。创建过程中下载的软件包保存在 /var/cache/lxc 目 录下面,当你想另外建一个一样的容器时,可以省去很多下载时间。
root@139-159-150-152:/var/run/docker/netns# ll
/var/lib/lxc/lxchost1/
total 16
drwxrwx--- 3 root root 4096 Mar 17 11:44 ./
drwx------ 3 root root 4096 Mar 17 11:34 ../
-rw-r----- 1 root root 679 Mar 17 11:44 config
drwxr-xr-x 17 root root 4096 Mar 17 11:42 rootfs/
root@139-159-150-152:/var/run/docker/netns# ll /var/cache/lxc/
total 12
drwx------ 3 root root 4096 Mar 17 11:34 ./
drwxr-xr-x 19 root root 4096 Mar 17 11:27 ../
drwxr-xr-x 3 root root 4096 Mar 17 11:44 xenial/
6. 查看创建的容器信息
root@139-159-150-152:/var/run/docker/netns# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
lxchost1 STOPPED 0 - - - false
STOPPED表示容器只是创建出来但是还没启动
7. 启动容器,我们可以看到容器状态为运行中
root@139-159-150-152:/var/run/docker/netns# lxc-start -n lxchost1
-d
root@139-159-150-152:/var/run/docker/netns# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
lxchost1 RUNNING 0 - 10.0.3.248 - false
容器状态由 STIPPED ->RUNNING 从停止变成运行中
8. 查看容器的详细信息
root@139-159-150-152:/var/run/docker/netns# lxc-info -n lxchost1
Name: lxchost1
State: RUNNING
PID: 282127
IP: 10.0.3.248
CPU use: 0.59 seconds
BlkIO use: 29.45 MiB
Memory use: 59.52 MiB
KMem use: 6.82 MiB
Link: vethbg8LKH
TX bytes: 1.73 KiB
RX bytes: 6.61 KiB
Total bytes: 8.33 KiB
9. 容器 ip 为 10.0.3.248,我们通过 ssh 进入容器,查看 ip 地址,磁盘挂载信息,目 录信息和宿主机都不一样
root@139-159-150-152:/var/run/docker/netns# ssh ubuntu@10.0.3.248
ubuntu@10.0.3.248's password:
ubuntu@lxchost1:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state
UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0@if562: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
noqueue state UP group default qlen 1000link/ether 00:16:3e:71:d8:3d brd ff:ff:ff:ff:ff:ff linknetnsid 0inet 10.0.3.248/24 brd 10.0.3.255 scope global dynamic eth0valid_lft 2844sec preferred_lft 2844secinet6 fe80::216:3eff:fe71:d83d/64 scope link valid_lft forever preferred_lft forever
ubuntu@lxchost1:~$ uname -a
Linux lxchost1 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3
18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@lxchost1:~$ ll /
total 52
drwxr-xr-x 17 root root 4096 Mar 17 03:51 ./
drwxr-xr-x 17 root root 4096 Mar 17 03:51 ../
lrwxrwxrwx 1 root root 7 Mar 17 03:40 bin -> usr/bin/
drwxr-xr-x 2 root root 4096 Apr 15 2020 boot/
drwxr-xr-x 7 root root 540 Mar 17 03:51 dev/
drwxr-xr-x 63 root root 4096 Mar 17 03:51 etc/
drwxr-xr-x 3 root root 4096 Mar 17 03:44 home/
lrwxrwxrwx 1 root root 7 Mar 17 03:40 lib -> usr/lib/
lrwxrwxrwx 1 root root 9 Mar 17 03:40 lib32 -> usr/lib32/
lrwxrwxrwx 1 root root 9 Mar 17 03:40 lib64 -> usr/lib64/
lrwxrwxrwx 1 root root 10 Mar 17 03:40 libx32 -> usr/libx32/
drwxr-xr-x 2 root root 4096 Mar 17 03:40 media/
drwxr-xr-x 2 root root 4096 Mar 17 03:40 mnt/
drwxr-xr-x 2 root root 4096 Mar 17 03:40 opt/
dr-xr-xr-x 225 root root 0 Mar 17 03:51 proc/
drwx------ 2 root root 4096 Mar 17 03:40 root/
drwxr-xr-x 13 root root 420 Mar 17 04:04 run/
lrwxrwxrwx 1 root root 8 Mar 17 03:40 sbin -> usr/sbin/
drwxr-xr-x 2 root root 4096 Mar 17 03:40 srv/
dr-xr-xr-x 13 root root 0 Mar 17 03:51 sys/
drwxrwxrwt 9 root root 4096 Mar 17 04:04 tmp/
drwxr-xr-x 13 root root 4096 Mar 17 03:40 usr/
drwxr-xr-x 11 root root 4096 Mar 17 03:40 var/
ubuntu@lxchost1:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 21G 17G 57% /
none 492K 4.0K 488K 1% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 199M 108K 199M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 992M 0 992M 0% /sys/fs/cgroup
tmpfs 199M 0 199M 0% /run/user/1000
ubuntu@lxchost1:~$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:51 ? 00:00:00 /sbin/init
root 44 1 0 03:51 ? 00:00:00
/lib/systemd/systemd-journald
systemd+ 72 1 0 03:51 ? 00:00:00
/lib/systemd/systemd-networkd
root 76 1 0 03:51 ? 00:00:00 /usr/sbin/cron
-f
message+ 77 1 0 03:51 ? 00:00:00 /usr/bin/dbusdaemon --system --address=systemd: --nofork --nopidfile --systemdactivation --syslog-only
root 79 1 0 03:51 ? 00:00:00
/usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup
triggers
syslog 80 1 0 03:51 ? 00:00:00
/usr/sbin/rsyslogd -n -iNONE
root 81 1 0 03:51 ? 00:00:00
/lib/systemd/systemd-logind
systemd+ 82 1 0 03:51 ? 00:00:00
/lib/systemd/systemd-resolved
root 88 1 0 03:51 pts/0 00:00:00 /sbin/agetty -
o -p -- \u --noclear --keep-baud console 115200,38400,9600 vt220
root 89 1 0 03:51 ? 00:00:00 sshd:
/usr/sbin/sshd -D [listener] 0 of 10-100 startups
root 163 89 0 04:03 ? 00:00:00 sshd: ubuntu
[priv]
ubuntu 166 1 0 04:04 ? 00:00:00
/lib/systemd/systemd --user
ubuntu 167 166 0 04:04 ? 00:00:00 (sd-pam)
ubuntu 182 163 0 04:04 ? 00:00:00 sshd:
ubuntu@pts/5
ubuntu 183 182 0 04:04 pts/5 00:00:00 -bash
ubuntu 196 183 0 04:04 pts/5 00:00:00 ps -ef
10. 在容器外面执行命令
root@139-159-150-152:/var/run/docker/netns# lxc-attach -n lxchost1
--clear-env -- echo "Hello bit"
Hello bit
11. 停止容器
root@139-159-150-152:/var/run/docker/netns# lxc-stop -n lxchost1
root@139-159-150-152:/var/run/docker/netns# lxc-ls -f
NAME STATE AUTOSTART GROUPS IPV4 IPV6 UNPRIVILEGED
lxchost1 STOPPED 0 - - - false
12. 删除容器
root@139-159-150-152:/var/run/docker/netns# lxc-destroy -n
lxchost1
root@139-159-150-152:/var/run/docker/netns# lxc-ls -f
root@139-159-150-152:/var/run/docker/netns#
变成 STOPPED 状态只是停止运行,想要彻底销毁还是需要 destory 命令
相关文章:

[docker基础四]容器虚拟化基础之 LXC
目录 一 认识LXC 二 LXC容器操作实战 1)实战目的 2)基础知识 lxc-checkconfig lxc-create lxc-start lxc-ls lxc-info lxc-attach lxc-stop lxc-destory 3)安装LXC(我的是Ubuntu) 4)操作实战 1. 检查 lxc 是否运行…...

路由策略和策略路由的区别以及配置案例
区别 路由策略:路由策略是通过ACL等方式控制路由发布,让对方学到适当路由条目,比如有20条路由,只想让某个路由器学到10条,可以通过路由策略进行过滤。 策略路由:策略路由是通过定义策略和应用,…...

MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL
ICLR 2025 spotlight paper 构建能够在少量样本下学习出优良策略的深度强化学习(RL)智能体一直是一个极具挑战性的任务。为了提高样本效率,近期的研究尝试在每获取一个新样本后执行大量的梯度更新。尽管这种高更新-数据比(UTD&am…...

PyTorch API 10 - benchmark、data、批处理、命名张量
基于 PyTorch 2.7 文章目录 基准测试工具 - torch.utils.benchmarktorch.utils.bottlenecktorch.utils.checkpointtorch.utils.cpp_extensiontorch.utils.data数据集类型映射式数据集可迭代式数据集 数据加载顺序与采样器加载批处理与非批处理数据自动批处理(默认情…...

后缀表达式+栈(详解)(c++)
前言 很抱歉,上一期没有介绍栈stack的用法,今天简要介绍一下,再讲讲后缀表达式,用stack栈做一些后缀表达式的练习。 栈 栈stack是c中系统给出的栈,有了它,就不用自己创建栈啦! 头文件 栈sta…...

[C++类和对象]构造函数和析构函数
类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗? 并不是,任何类在什么都不写时,编译器会自动生成以下6 个默认成员函数。 默认成员函数:用户没有显式实现,编译器会…...

onenet连接微信小程序(mqtt协议)
一、关于mqtt协议 mqtt协议常用于物联网,是一种轻量级的消息推送协议。 其中有三个角色,Publisher设备(客户端)发布主题到服务器,其他的设备通过订阅主题,获取该主题下的消息,Publisher可以发…...
使用 JAX-RS 创建 REST 服务/微服务
REST(表述性状态转移)是一种基于 Web 标准和 HTTP 协议的架构风格,广泛用于构建可扩展、无状态且易于消费的 Web 服务。JAX-RS(Java API for RESTful Web Services)是 Java 提供的标准 API,通过注解简化了 RESTful Web 服务的开发和部署。JAX-RS 允许开发者使用 Java 类和…...

人脸真假检测:SVM 与 ResNet18 的实战对比
在人工智能蓬勃发展的当下,人脸相关技术广泛应用于安防、金融、娱乐等诸多领域。然而,随着人脸合成技术的日益成熟,人脸真假检测成为保障这些应用安全的关键环节。本文将深入探讨基于支持向量机(SVM)结合局部二值模式&…...
如何创建伪服务器,伪接口
创建伪接口一般是用于模拟真实接口的行为,以便在开发和测试过程中进行使用,以下是一些常见的创建伪接口的方法: 使用 Web 框架搭建: Python 和 Flask:Flask 是一个轻量级的 Python Web 框架。示例代码如下:…...

《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南
第54篇:国产大模型API对比与使用指南 ——从百度文心到通义千问,一文看懂国内AI平台选型 📌 摘要 随着中国人工智能产业的快速发展,越来越多的国产大模型平台开始崭露头角。本文将系统梳理当前主流国产大模型 API(如…...

质量、重力、引力、惯性 的本质,以及虫洞
1、质量 物体,之所以,有质量源自于其微观结构。物体好比一块海绵,浸没在暗物质的海洋里。随暗物质海洋的涌动而不断移动。海绵微观结构越细密,受到暗物质海洋的裹携力就越大(好比汤勺,与漏勺对汤水的阻碍力。又好比纱窗与船帆对风的阻隔力。) 微观结构越细密,在相同表面积…...

基于ssm+mysql的快递管理系统(含LW+PPT+源码+系统演示视频+安装说明)
系统功能 管理员功能:个人中心、用户管理、订单管理、快递员管理;快递员功能:查看订单、更新快递状态;派单员功能:订单分配、订单管理;客户功能:订单查询、个人信息维护。 作者:计算…...
JVM——即时编译器的中间表达形式
中间表达形式(IR):编译器的核心抽象层 1. IR的本质与作用 在编译原理的体系中,中间表达形式(Intermediate Representation, IR)是连接编译器前端与后端的桥梁。前端负责将源代码转换为IR,而后…...

质心均匀体(引力屏蔽技术)
1、线质心体 陀螺我们都玩过,一个惯性圆盘加一个轴,旋转起来可以独脚而立。(垂直于旋转面的不平衡力,在旋转面旋转180度后,被其自身抵消,故而平衡。可抵消不平衡力的大小,取决于惯性飞轮的质量和旋转的速度)。此时,旋转的陀螺等同于一个轴线质心体(轴线上任意一点提供支…...
深度学习:AI为老年痴呆患者点亮希望之光
引言 随着全球人口老龄化进程的加速,老年痴呆症已成为严重威胁老年人健康和生活质量的公共卫生问题。据世界卫生组织统计,全球每 3 秒钟就有 1 人被诊断为痴呆,预计到 2050 年,全球痴呆患者人数将从目前的约 5000 万激增至 1.52 亿…...

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
本文项目编号 T 180 ,文末自助获取源码 \color{red}{T180,文末自助获取源码} T180,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

STM32的SysTick
SysTick介绍 定义:Systick,即滴答定时器,是内核中的一个特殊定时器,用于提供系统级的定时服务。该定时器是一个24位的递减计数器,具有自动重载值寄存器的功能。当计数器到达自动重载值时,它会自动重新加载…...

【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
1.约定前后端交互接口 [请求] /book/getListByPage [参数] currentPage1&pageSize10 [响应] 返回封装的result对象对应的Json数据 2. 整体逻辑 2.1 Controller的逻辑 (1)把接收的参数封装为PageRequest类,里面有属性:curren…...
Github 2025-05-10 Rust开源项目日报 Top10
根据Github Trendings的统计,今日(2025-05-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Python项目1Zed: 由Atom和Tree-sitter的创建者开发的高性能多人代码编辑器 创建周期:1071 天开发语言:Rust协议类型…...
drf 使用jwt
安装jwt pip install pyJwt 添加登录url path("jwt/login",views.JwtLoginView.as_view(),namejwt-login),path("jwt/order",views.JwtOrderView.as_view(),namejwt-order), 创建视图 from django.contrib.auth import authenticateimport jwt from jw…...

养生:为健康生活添彩
养生是对生活的热爱,是为健康生活注入活力的良方。从饮食、运动到生活习惯,每一个方面都能让我们离健康更近一步。以下是一些实用的养生之道,助你开启健康生活的新旅程。 饮食养生:营养均衡,健康基石 合理的饮食是养…...
在 Vue 3 中使用 canvas-confetti 插件
🎉 在 Vue 3 中使用 canvas-confetti 插件 canvas-confetti 是一个轻量、无依赖的 JavaScript 动画库,用于在网页上展示彩带、庆祝动画。非常适合用于抽奖、支付成功、活动庆祝等场景。 本教程将指导你如何在 Vue 3 项目中集成并使用该插件。 …...
rt-thread+STM32H7移植lwip出现问题解决方法
问题一:ping不通,或有丢帧情况。 问题二:不开启优化一切正常,keil开启优化后就无法联网。 问题三:网络断断续续。 解决方法: 主要是mpu配置和drv_eth驱动的问题,我的配置如下: mpu&…...
Java Spring、Spring MVC、Spring Boot 和 Spring Cloud 的关系与区别
在 Java 开发领域,Spring、Spring MVC、Spring Boot 和 Spring Cloud 这些框架和技术名词频繁出现。对于初学者来说,理解它们之间的关系和区别可能有些困惑。本文将深入浅出地讲解这些概念,帮助你理清它们的联系与差异。 一、Spring 1.1 定义 Spring 是一个轻量级的 Java…...

服务器综合实验(实战详解)
该文章的目录部分 实验内容 实验完成步骤 虚拟机准备 配置两个虚拟机的本地仓库 虚拟机A: 虚拟机B: 配置SSH公钥互信 虚拟机A: 编辑 虚拟机B: 提供基于bind的DNS服务 虚拟机A: 项目需求1: …...
Milvus 向量数据库详解与实践指南
一、Milvus 核心介绍 1. 什么是 Milvus? Milvus 是一款开源、高性能、可扩展的向量数据库,专门为海量向量数据的存储、索引和检索而设计。它支持近似最近邻搜索(ANN),适用于图像检索、自然语言处理(NLP&am…...
react+ts中函数组件父子通信方式
1. 父组件通过 Props 向子组件传递数据 这是最常见也是最基本的父子组件通信方式。父组件通过 props 将数据或回调函数传递给子组件。 示例代码: // 子组件接收来自父组件的数据 interface ChildProps {message: string; }const ChildComponent: React.FC<Chi…...

VSCode-插件:codegeex:ai coding assistant / 清华智普 AI 插件
一、官网 https://codegeex.cn/ 二、vscode 安装插件 点击安装即可,无需复杂操作,国内软件,无需科学上网,非常友好 三、智能注释 输入 // 或者 空格---后边自动出现注释信息,,按下 Tab 键,进…...

SlideLoss与FocalLoss在YOLOv8分类损失中的应用及性能分析
文章目录 一、引言二、YOLOv8 损失函数概述三、SlideLoss 详解(一)SlideLoss 的原理(二)SlideLoss 的代码实现 四、FocalLoss 分类损失函数详解(一)FocalLoss 的原理(二)FocalLoss 的…...