[docker基础四]容器虚拟化基础之 LXC

news2025/7/19 6:18:49

目录

一  认识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 1000
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::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 1000
 link/ether 00:16:3e:71:d8:3d brd ff:ff:ff:ff:ff:ff linknetnsid 0
 inet 10.0.3.248/24 brd 10.0.3.255 scope global dynamic eth0
 valid_lft 2844sec preferred_lft 2844sec
 inet6 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 命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路由策略和策略路由的区别以及配置案例

区别 路由策略&#xff1a;路由策略是通过ACL等方式控制路由发布&#xff0c;让对方学到适当路由条目&#xff0c;比如有20条路由&#xff0c;只想让某个路由器学到10条&#xff0c;可以通过路由策略进行过滤。 策略路由&#xff1a;策略路由是通过定义策略和应用&#xff0c…

MAD-TD: MODEL-AUGMENTED DATA STABILIZES HIGH UPDATE RATIO RL

ICLR 2025 spotlight paper 构建能够在少量样本下学习出优良策略的深度强化学习&#xff08;RL&#xff09;智能体一直是一个极具挑战性的任务。为了提高样本效率&#xff0c;近期的研究尝试在每获取一个新样本后执行大量的梯度更新。尽管这种高更新-数据比&#xff08;UTD&am…

PyTorch API 10 - benchmark、data、批处理、命名张量

基于 PyTorch 2.7 文章目录 基准测试工具 - torch.utils.benchmarktorch.utils.bottlenecktorch.utils.checkpointtorch.utils.cpp_extensiontorch.utils.data数据集类型映射式数据集可迭代式数据集 数据加载顺序与采样器加载批处理与非批处理数据自动批处理&#xff08;默认情…

后缀表达式+栈(详解)(c++)

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

[C++类和对象]构造函数和析构函数

类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6 个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会…

onenet连接微信小程序(mqtt协议)

一、关于mqtt协议 mqtt协议常用于物联网&#xff0c;是一种轻量级的消息推送协议。 其中有三个角色&#xff0c;Publisher设备&#xff08;客户端&#xff09;发布主题到服务器&#xff0c;其他的设备通过订阅主题&#xff0c;获取该主题下的消息&#xff0c;Publisher可以发…

人脸真假检测:SVM 与 ResNet18 的实战对比

在人工智能蓬勃发展的当下&#xff0c;人脸相关技术广泛应用于安防、金融、娱乐等诸多领域。然而&#xff0c;随着人脸合成技术的日益成熟&#xff0c;人脸真假检测成为保障这些应用安全的关键环节。本文将深入探讨基于支持向量机&#xff08;SVM&#xff09;结合局部二值模式&…

《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南

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

质量、重力、引力、惯性 的本质,以及虫洞

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

基于ssm+mysql的快递管理系统(含LW+PPT+源码+系统演示视频+安装说明)

系统功能 管理员功能&#xff1a;个人中心、用户管理、订单管理、快递员管理&#xff1b;快递员功能&#xff1a;查看订单、更新快递状态&#xff1b;派单员功能&#xff1a;订单分配、订单管理&#xff1b;客户功能&#xff1a;订单查询、个人信息维护。 作者&#xff1a;计算…

质心均匀体(引力屏蔽技术)

1、线质心体 陀螺我们都玩过,一个惯性圆盘加一个轴,旋转起来可以独脚而立。(垂直于旋转面的不平衡力,在旋转面旋转180度后,被其自身抵消,故而平衡。可抵消不平衡力的大小,取决于惯性飞轮的质量和旋转的速度)。此时,旋转的陀螺等同于一个轴线质心体(轴线上任意一点提供支…

JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码

本文项目编号 T 180 &#xff0c;文末自助获取源码 \color{red}{T180&#xff0c;文末自助获取源码} T180&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

STM32的SysTick

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

【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解

1.约定前后端交互接口 [请求] /book/getListByPage [参数] currentPage1&pageSize10 [响应] 返回封装的result对象对应的Json数据 2. 整体逻辑 2.1 Controller的逻辑 &#xff08;1&#xff09;把接收的参数封装为PageRequest类&#xff0c;里面有属性&#xff1a;curren…

养生:为健康生活添彩

养生是对生活的热爱&#xff0c;是为健康生活注入活力的良方。从饮食、运动到生活习惯&#xff0c;每一个方面都能让我们离健康更近一步。以下是一些实用的养生之道&#xff0c;助你开启健康生活的新旅程。 饮食养生&#xff1a;营养均衡&#xff0c;健康基石 合理的饮食是养…

服务器综合实验(实战详解)

该文章的目录部分 实验内容 实验完成步骤 虚拟机准备 配置两个虚拟机的本地仓库 虚拟机A&#xff1a; 虚拟机B&#xff1a; 配置SSH公钥互信 虚拟机A&#xff1a; ​编辑 虚拟机B&#xff1a; 提供基于bind的DNS服务 虚拟机A&#xff1a; 项目需求1&#xff1a; …

VSCode-插件:codegeex:ai coding assistant / 清华智普 AI 插件

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

SlideLoss与FocalLoss在YOLOv8分类损失中的应用及性能分析

文章目录 一、引言二、YOLOv8 损失函数概述三、SlideLoss 详解&#xff08;一&#xff09;SlideLoss 的原理&#xff08;二&#xff09;SlideLoss 的代码实现 四、FocalLoss 分类损失函数详解&#xff08;一&#xff09;FocalLoss 的原理&#xff08;二&#xff09;FocalLoss 的…

OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测

一、原理作用 ORB 原理&#xff08;Oriented FAST and Rotated BRIEF&#xff09;&#xff1a; 特征点检测&#xff1a;使用 FAST 算法检测角点&#xff08;关键点&#xff09;。 方向计算&#xff1a;为每个关键点分配主方向&#xff0c;增强旋转不变性。 特征描述&#xff1a…

深入解析路由策略:从流量控制到策略实施

一、网络流量双平面解析 在路由策略的设计中&#xff0c;必须明确区分两个关键平面&#xff1a; 1. 控制层面&#xff08;Control Plane&#xff09; ​​定义​​&#xff1a;路由协议传递路由信息形成的逻辑平面&#xff08;如OSPF的LSA、RIP的Response报文&#xff09;​…