容器的老祖宗LXC和Docker的关系
一、什么是LXC?
LXC(Linux Container的缩写)是一个基于Linux内核的容器虚拟化技术,它提供了一种轻量级、快速、简便的方式来创建和管理系统容器。与传统虚拟化技术不同,LXC并不会模拟硬件,而是利用Linux内核的功能来隔离进程和文件系统。这使得LXC可以更加轻量级和高效,启动和运行容器的速度也比虚拟机快得多。
LXC容器可以被用于各种用途,包括开发、测试、部署和运行应用程序。容器可以随时创建、启动、停止和删除,容器的配置也可以根据需要进行调整。
LXC是一个底层的容器技术,它提供了命名空间、cgroups、文件系统隔离等内核级别的隔离特性,而不像Docker那样提供更上层的高级容器管理功能。
LXC的出现比较早,早于Docker,但是初期一直不温不火,直到Docker的出现加速了它的发展。
二、LXC安装和使用
LXC可以独立使用被用来实现容器创建、停止容器等基础功能。基于以下步骤可以简单使用LXC:
2.1、安装LXC
首先,需要在Linux系统上安装LXC软件包。在大多数Linux发行版中,可以使用系统自带的包管理器进行安装,例如,在Debian/Ubuntu上,可以使用以下命令进行安装:
sudo apt-get install lxc
2.2、创建容器
创建一个新的容器可以通过lxc-create命令完成,该命令可以创建一个基于模板的容器,例如,以下命令将创建一个基于Ubuntu 20.04模板的新容器:
sudo lxc-create -n mycontainer -t ubuntu -- --release 20.04
其中,-n选项指定容器的名称,-t选项指定使用的模板,--release选项指定模板的版本。执行该命令后,LXC将自动下载并安装Ubuntu 20.04模板,并创建一个名为“mycontainer”的新容器。
2.3、启动容器
创建容器后,可以使用lxc-start命令启动它,例如:
sudo lxc-start -n mycontainer
该命令将启动名为“mycontainer”的容器,并在控制台上输出容器的日志信息。如果需要以后台模式启动容器,可以使用-l选项指定日志文件的路径,例如:
sudo lxc-start -n mycontainer -d -l /var/log/lxc/mycontainer.log
2.4、进入容器
启动容器以后可以使用lxc-attach命令进入运行中的容器,例如:
sudo lxc-attach -n mycontainer
该命令将在当前终端中打开一个新的shell,允许在容器中运行命令和操作文件系统。当完成操作并退出容器时,只需键入“exit”即可返回主机系统。
2.5、停止容器
要停止运行中的容器,可以使用lxc-stop命令,例如:
sudo lxc-stop -n mycontainer
该命令将发送一个SIGPWR信号给容器进程,以请求它优雅地关闭并停止。
这些是LXC的基本使用方法,如果感兴趣可以在LXC文档中找到更多高级功能和配置选项。
三、Docker和LXC的关系
在Docker的早期版本中,它使用LXC作为底层容器引擎来实现容器隔离和虚拟化,Docker确实也让LXC发展得更快。
但是随着时间的推移,Docker逐渐摆脱了对LXC的依赖,并自己实现了一个名为libcontainer的容器引擎,以取代LXC。libcontainer是一个纯Go语言编写的库,它实现了Linux内核的命名空间、cgroups等特性,并提供了更多的容器管理功能。从Docker 1.11版本开始,Docker默认使用libcontainer作为容器引擎,而非LXC。
此外,Docker 提供了更加完整的工具链和生态系统,使得容器的创建、管理和部署变得更加简单和可靠。
因此,Docker 可以看作是 LXC 技术的一种封装和扩展,提供了更多的功能和工具,让容器技术更容易被使用和推广。
目前虽然Docker默认使用了libcontainer,但是仍然可以配置Docker底层使用LXC作为容器引擎。
四、配置Docker使用LXC
Docker默认使用的是自己的容器引擎,即Docker引擎,而不是LXC容器引擎。如果您想在Docker中使用LXC容器引擎,可以按照以下步骤进行配置:
4.1、安装LXC和LXD
首先,需要安装LXC和LXD。LXC是Linux容器的用户空间接口,而LXD是一个容器管理器,提供了更高级别的容器管理功能。您可以使用以下命令在Ubuntu系统上安装它们:
sudo apt-get update
sudo apt-get install lxc lxd
4.2、创建一个LXD容器
在LXD中,可以通过创建一个新的容器来运行应用程序。使用以下命令创建一个新的LXD容器:
sudo lxc launch ubuntu:18.04 mycontainer
这将使用Ubuntu 18.04镜像创建一个名为“mycontainer”的新容器。
4.3、配置Docker使用LXC
在Docker配置文件中增加以下配置,以告诉Docker使用LXD容器来运行应用程序。
{"runtimes": {"lxd": {"path": "/usr/bin/runc"}},"default-runtime": "lxd"
}
默认情况下,Docker配置文件位于/etc/docker/daemon.json。请确保在修改配置文件之前备份它。
重启Docker服务以使更改生效。使用以下命令重启Docker服务:
sudo service docker restart
完成后,Docker就能够使用LXD容器引擎来运行应用程序,底层使用LXC。
五、配置Podman使用LXC
Podman是另外一个流行的容器运行时,其底层默认使用的是runC,但是也可以指定使用LXC作为其底层容器引擎来实现容器隔离和虚拟化,需要按照以下步骤进行设置:
5.1、确认系统上已经安装了LXC。
可以使用以下命令安装LXC
$ sudo apt-get update
$ sudo apt-get install lxc
5.2、设置环境变量
可以在终端中使用以下命令设置环境变量“CONTAINER_RUNTIME”为“lxc”
$ export CONTAINER_RUNTIME=lxc
或者将其添加到shell配置文件中,如“/.bashrc”或“/.zshrc”中。
5.3 、运行容器。
现在可以使用Podman来运行容器,它将使用LXC作为底层容器引擎来实现容器隔离和虚拟化。
$ podman run -it --rm debian /bin/bash
该命令将启动一个Debian容器,并进入容器的shell中。
需要注意的是,使用LXC作为底层容器引擎可能需要管理员权限(root用户)。因此,建议使用sudo或者root用户运行以上命令。另外,使用LXC作为容器引擎可能需要更高的系统资源,因此建议在使用之前进行测试和评估。
相关文章:
容器的老祖宗LXC和Docker的关系
一、什么是LXC? LXC(Linux Container的缩写)是一个基于Linux内核的容器虚拟化技术,它提供了一种轻量级、快速、简便的方式来创建和管理系统容器。与传统虚拟化技术不同,LXC并不会模拟硬件,而是利用Linux内…...
Webpack迁移Rspack速攻实战教程(前瞻版)
前言 rspack 即将开源,但社区中不乏有已经落地的 case ,比如 rspack-migration-showcase 、 modern.js 等。 基于此,本文将介绍如何迁移一个近似于 CRA( create-react-app ) 的项目到 rspack 。 在阅读本文前&#…...
一行代码“黑”掉任意网站
文章目录只需一行代码,轻轻一点就可以把任意网站变成暗黑模式。 首先我们先做一个实验,在任意网站中,打开浏览器开发者工具(F12),在 C1onsole 控制台输入如下代码并回车: document.documentElement.style.filterinve…...
51单片机入门 -驱动 8x8 LED 点阵屏
硬件型号、软件版本、以及烧录流程 操作系统:Windows 10 x84-64单片机:STC89C52RC编译器:SDCC烧录软件:stcgal 1.6开发板:普中51单片机开发板A2套件(2022) 在 VS Code 中新建项目到烧录的过程…...
Xinlinx zynq7045国产替代 FMQL45T900全国产化 ARM 核心板+扩展板
TES745D 是一款基于 FMQL45T900 的全国产化 ARM 核心板。该核心板将 FMQL45T900(与XC7Z045-2FFG900I 兼容)的最小系统集成在了一个 87*117mm 的核心板上,可以作为一个核心模块,进行功能性扩展,能够快速的搭建起一个信号…...
硬刚ChatGPT!文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?
文章目录目录产品背景发展历程科技简介主要功能合作伙伴结语文心一言 (英文名:ERNIE Bot) *是百度基于文心大模型技术推出的生成式对话产品,被外界誉为“中国版ChatGPT”,将于2023年3月份面向公众开放。 [40] 百度在人…...
Python 异步: 在非阻塞子进程中运行命令(19)
动动发财的小手,点个赞吧! 我们可以从 asyncio 执行命令。该命令将在我们可以使用非阻塞 I/O 写入和读取的子进程中运行。 1. 什么是 asyncio.subprocess.Process asyncio.subprocess.Process 类提供了由 asyncio 运行的子进程的表示。它在 asyncio 程序…...
蓝桥杯嵌入式第五课--输入捕获
前言输入捕获的考题十分明确,就是测量输入脉冲波形的占空比和频率,对我们的板子而言,就是检测板载的两个信号发生器产生的信号:具体来说就是使用PA15和PB4来做输入捕获。输入捕获原理简介输入捕获能够对输入信号的上升沿和下降沿进…...
Spring事务和事务传播机制
目录 Spring中事务的实现 1、通过代码的方式手动实现事务 2、通过注解的方式实现声明式事务 2.1、Transactional作用范围 2.2、Transactional参数说明 2.3、注意事项 2.4、Transactional工作原理 事务隔离级别 1、事务特性 2、Spring中设置事务隔离级别 2.1、MySQL事…...
基于OpenCV+CUDA实时视频抠绿、背景合成以及抠绿算法小结
一、关于抠绿 百度百科上描述抠绿“抠绿是指在摄影或摄像时,以绿色为背景进行拍摄,在后期制作时使用特技机的“色键”将绿色背景抠去,改换其他更理想的背景的技术。”绿幕的使用已经非常普遍,大到好莱坞大片,小到自媒体的节目,一些商业娱乐场景,几乎都用使用。但是很多非…...
MySQL 中的 UNION 语句
文章目录一、数据准备一、UNION 和 UNION ALL二、UNION 的执行顺序(UNION 和其他语句一同出现)三、MySQL 使用 UNION(ALL) ORDER 导致排序失效四、UNION 报错语法一、数据准备 -- 创建表 CREATE TABLE test_user (ID int(11) NO…...
高完整性系统工程(三): Logic Intro Formal Specification
目录 1. Propositions 命题 2.1 Propositional Connectives 命题连接词 2.2 Variables 变量 2.3 Sets 2.3.1 Set Operations 2.4 Predicates 2.5 Quantification 量化 2.6 Relations 2.6.1 What Is A Relation? 2.6.2 Relations as Sets 2.6.3 Binary Relations as…...
【linux】多线程概念详述
文章目录一、线程基本概念1.1 进程地址空间与页表1.2 页表结构1.3 线程的理解1.3.1 如何描述线程1.4 再谈进程1.5 代码理解1.5.1 原生库提供线程pthread_create1.6 资源共享问题1.7 资源私有问题二、总结2.1 什么是线程2.2 并行与并发2.3 线程的优点2.4 线程的缺点2.5 线程异常…...
【Java】P8 面向对象(3)方法 基本知识
面向对象 方法方法方法的声明权限修饰符返回值类型方法名形参列表方法体简单案例方法 方法 是对类或对象行为特征的抽象,用来完成某个功能的操作。方法的目的 是为了实现代码复用,减少冗余,简化代码;方法不能独立存在,…...
js中null和undefined的区别
js中null和undefined的区别?这也是一个常见的js面试题 相同点 1,都是基本类型。 2,做判断值都是false。 !!null false // true !!undefined false // true不同点 1,诞生时间null在前,undefined在后。因为js作者Brendan-Eic…...
【Linux】linux中的c++怎么调试?gdb的介绍和使用。
背景1.1.前提知识程序的发布方式有两种,debug模式和release模式Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项windows上的调试方法有区别吗?1.调试思路是一样的2…...
提升Python代码性能的六个技巧
文章目录前言为什么要写本文?1、代码性能检测1.1、使用 timeit 库1.2、使用 memory_profiler 库1.3、使用 line_profiler 库2、使用内置函数和库3、使用内插字符串 f-string4、使用列表推导式5、使用 lru_cache 装饰器缓存数据6、针对循环结构的优化7、选择合适算法…...
VI的常用命令
VI的常用命令 文章目录VI的常用命令vi/vim是什么?VI普通模式命令VI编辑模式命令VI指令模式vi/vim是什么? VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器 VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的将字体颜色辨别语法…...
【数据结构】万字深入浅出讲解单链表(附原码 | 超详解)
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:C语言实现数据结构 💬总结:希望你看完…...
无线WiFi安全渗透与攻防(五)之aircrack-ng破解WEP加密
系列文章 无线WiFi安全渗透与攻防(一)之无线安全环境搭建 无线WiFi安全渗透与攻防(二)之打造专属字典 无线WiFi安全渗透与攻防(三)之Windows扫描wifi和破解WiFi密码 无线WiFi安全渗透与攻防(四)之kismet的使用 aircrack-ng破解WEP加密 1.WEP介绍 其实我们平常在使用wifi的时…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
