Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >容器与云|LXD 2.0 系列(三):你的第一个 LXD 容器

容器与云|LXD 2.0 系列(三):你的第一个 LXD 容器

原创
作者头像
用户8710643
修改于 2021-07-12 02:35:26
修改于 2021-07-12 02:35:26
1.1K0
举报
文章被收录于专栏:linux百科小宇宙linux百科小宇宙

这是LXD2.0系列介绍文章的第三篇博客。

LXD入门安装与配置你的第一个LXD容器资源控制镜像管理远程主机及容器迁移LXD中的DockerLXD中的LXD实时迁移LXD和JujuLXD和OpenStack调试,及给LXD做贡献由于在管理LXD容器时涉及到大量的命令,所以这篇文章的篇幅是比较长的,如果你更喜欢使用同样的命令来快速的一步步实现整个过程,你可以尝试我们的在线示例!

创建并启动一个新的容器正如我在先前的文章中提到的一样,LXD命令行客户端预配置了几个镜像源。Ubuntu的所有发行版和架构平台全都提供了官方镜像,但是对于其他的发行版也有大量的非官方镜像,那些镜像都是由社区制作并且被LXC上游贡献者所维护。

Ubuntu如果你想要支持最为完善的Ubuntu版本,你可以按照下面的去做:

lxclaunchubuntu:注意,这里意味着会随着UbuntuLTS的发布而变化。因此,如果用于脚本,你需要指明你具体安装的版本(参见下面)。

Ubuntu14.04LTS得到最新更新的、已经测试过的、稳定的Ubuntu14.04LTS镜像,你可以简单的执行:

lxclaunchubuntu:14.04在该模式下,会指定一个随机的容器名。

如果你更喜欢指定一个你自己的名字,你可以这样做:

lxclaunchubuntu:14.04c1如果你想要指定一个特定的体系架构(非主流平台),比如32位Intel镜像,你可以这样做:

lxclaunchubuntu:14.04/i386c2当前的Ubuntu开发版本上面使用的“ubuntu:”远程仓库只会给你提供官方的并经过测试的Ubuntu镜像。但是如果你想要未经测试过的日常构建版本,开发版可能对你来说是合适的,你需要使用“ubuntu-daily:”远程仓库。

lxclaunchubuntu-daily:develc3在这个例子中,将会自动选中最新的Ubuntu开发版本。

你也可以更加精确,比如你可以使用代号名:

lxclaunchubuntu-daily:xenialc4最新的AlpineLinuxAlpine镜像可以在“Images:”远程仓库中找到,通过如下命令执行:

lxclaunchimages:alpine/3.3/amd64c5其他全部的Ubuntu镜像列表可以这样获得:

lxcimagelistubuntu:lxcimagelistubuntu-daily:全部的非官方镜像:

lxcimagelistimages:某个给定的原程仓库的全部别名(易记名称)可以这样获得(比如对于“ubuntu:”远程仓库):

lxcimagealiaslistubuntu:创建但不启动一个容器如果你想创建一个容器或者一批容器,但是你不想马上启动它们,你可以使用lxcinit替换掉lxclaunch。所有的选项都是相同的,唯一的不同就是它并不会在你创建完成之后启动容器。

lxcinitubuntu:关于你的容器的信息列出所有的容器要列出你的所有容器,你可以这样这做:

lxclist有大量的选项供你选择来改变被显示出来的列。在一个拥有大量容器的系统上,默认显示的列可能会有点慢(因为必须获取容器中的网络信息),你可以这样做来避免这种情况:

lxclist--fast上面的命令显示了另外一套列的组合,这个组合在服务器端需要处理的信息更少。

你也可以基于名字或者属性来过滤掉一些东西:

stgraber@dakara:~$lxclistsecurity.privilegedtrue+------+---------+---------------------+-----------------------------------------------+------------+-----------+|NAME|STATE|IPV4|IPV6|TYPE|SNAPSHOTS|+------+---------+---------------------+-----------------------------------------------+------------+-----------+|suse|RUNNING|172.17.0.105(eth0)|2607:f2c0:f00f:2700:216:3eff:fef2:aff4(eth0)|PERSISTENT|0|+------+---------+---------------------+-----------------------------------------------+------------+-----------+在这个例子中,只有那些特权容器(禁用了用户命名空间)才会被列出来。

stgraber@dakara:~$lxclist--fastalpine+-------------+---------+--------------+----------------------+----------+------------+|NAME|STATE|ARCHITECTURE|CREATEDAT|PROFILES|TYPE|+-------------+---------+--------------+----------------------+----------+------------+|alpine|RUNNING|x86_64|2016/03/2002:11UTC|default|PERSISTENT|+-------------+---------+--------------+----------------------+----------+------------+|alpine-edge|RUNNING|x86_64|2016/03/2002:19UTC|default|PERSISTENT|+-------------+---------+--------------+----------------------+----------+------------+在这个例子中,只有在名字中带有“alpine”的容器才会被列出来(也支持复杂的正则表达式)。

获取容器的详细信息由于list命令显然不能以一种友好的可读方式显示容器的所有信息,因此你可以使用如下方式来查询单个容器的信息:

lxcinfo例如:

stgraber@dakara:~$lxcinfozerotierName:zerotierArchitecture:x86_64Created:2016/02/2020:01UTCStatus:RunningType:persistentProfiles:defaultPid:31715Processes:32Ips:eth0:inet172.17.0.101eth0:inet62607:f2c0:f00f:2700:216:3eff:feec:65a8eth0:inet6fe80::216:3eff:feec:65a8lo:inet127.0.0.1lo:inet6::1lxcbr0:inet10.0.3.1lxcbr0:inet6fe80::c0a4:ceff:fe52:4d51zt0:inet29.17.181.59zt0:inet6fd80:56c2:e21c:0:199:9379:e711:b3e1zt0:inet6fe80::79:e7ff:fe0d:5123Snapshots:zerotier/blah(takenat2016/03/0823:55UTC)(stateless)生命周期管理命令这些命令对于任何容器或者虚拟机管理器或许都是最普通的命令,但是它们仍然需要讲到。

所有的这些命令在批量操作时都能接受多个容器名。

启动启动一个容器就向下面一样简单:

lxcstart停止停止一个容器可以这样来完成:

lxcstop如果容器不合作(即没有对发出的SIGPWR信号产生回应),这时候,你可以使用下面的方式强制执行:

lxcstop--force重启通过下面的命令来重启一个容器:

lxcrestart如果容器不合作(即没有对发出的SIGINT信号产生回应),你可以使用下面的方式强制执行:

lxcrestart--force暂停你也可以“暂停”一个容器,在这种模式下,所有的容器任务将会被发送相同的SIGSTOP信号,这也意味着它们将仍然是可见的,并且仍然会占用内存,但是它们不会从调度程序中得到任何的CPU时间片。

如果你有一个很占用CPU的容器,而这个容器需要一点时间来启动,但是你却并不会经常用到它。这时候,你可以先启动它,然后将它暂停,并在你需要它的时候再启动它。

lxcpause删除最后,如果你不需要这个容器了,你可以用下面的命令删除它:

lxcdelete注意,如果容器还处于运行状态时你将必须使用“-force”。

容器的配置LXD拥有大量的容器配置设定,包括资源限制,容器启动控制以及对各种设备是否允许访问的配置选项。完整的清单因为太长所以并没有在本文中列出,但是,你可以从[这里]获取它。

就设备而言,LXD当前支持下面列出的这些设备类型:

磁盘既可以是一块物理磁盘,也可以只是一个被挂挂载到容器上的分区,还可以是一个来自主机的绑定挂载路径。网络接口卡一块网卡。它可以是一块桥接的虚拟网卡,或者是一块点对点设备,还可以是一块以太局域网设备或者一块已经被连接到容器的真实物理接口。unix块设备一个UNIX块设备,比如/dev/sdaunix字符设备一个UNIX字符设备,比如/dev/kvmnone这种特殊类型被用来隐藏那种可以通过配置文件被继承的设备。配置profile文件所有可用的配置文件列表可以这样获取:

lxcprofilelist为了看到给定配置文件的内容,最简单的方式是这样做:

lxcprofileshow你可能想要改变文件里面的内容,可以这样做:

lxcprofileedit你可以使用如下命令来改变应用到给定容器的配置文件列表:

lxcprofileapply,,,...本地配置有些配置是某个容器特定的,你并不想将它放到配置文件中,你可直接对容器设置它们:

lxcconfigedit上面的命令做的和“profileedit”命令是一样。

如果不想在文本编辑器中打开整个文件的内容,你也可以像这样修改单独的配置:

lxcconfigset或者添加设备,例如:

lxcconfigdeviceaddmy-containerkvmunix-charpath/dev/kvm上面的命令将会为名为“my-container”的容器设置一个/dev/kvm项。

对一个配置文件使用lxcprofileset和lxcprofiledeviceadd命令也能实现上面的功能。

读取配置你可以使用如下命令来读取容器的本地配置:

lxcconfigshow或者得到已经被展开了的配置(包含了所有的配置值):

lxcconfigshow--expanded例如:

stgraber@dakara:~$lxcconfigshow--expandedzerotiername:zerotierprofiles:-defaultconfig:security.nesting:"true"user.a:bvolatile.base_image:a49d26ce5808075f5175bf31f5cb90561f5023dcd408da8ac5e834096d46b2d8volatile.eth0.hwaddr:00:16:3e:ec:65:a8volatile.last_state.idmap:'[{"Isuid":true,"Isgid":false,"Hostid":100000,"Nsid":0,"Maprange":65536},{"Isuid":false,"Isgid":true,"Hostid":100000,"Nsid":0,"Maprange":65536}]'devices:eth0:name:eth0nictype:macvlanparent:eth0type:niclimits.ingress:10Mbitlimits.egress:10Mbitroot:path:/size:30GBtype:disktun:path:/dev/net/tuntype:unix-charephemeral:false这样做可以很方便的检查有哪些配置属性被应用到了给定的容器。

实时配置更新注意,除非在文档中已经被明确指出,否则所有的配置值和设备项的设置都会对容器实时发生影响。这意味着在不重启正在运行的容器的情况下,你可以添加和移除某些设备或者修改安全配置文件。

获得一个shellLXD允许你直接在容器中执行任务。最常用的做法是在容器中得到一个shell或者执行一些管理员任务。

和SSH相比,这样做的好处是你不需要容器是网络可达的,也不需要任何软件和特定的配置。

执行环境与LXD在容器内执行命令的方式相比,有一点是不同的,那就是shell并不是在容器中运行。这也意味着容器不知道使用的是什么样的shell,以及设置了什么样的环境变量和你的家目录在哪里。

通过LXD来执行命令总是使用最小的路径环境变量设置,并且HOME环境变量必定为/root,以容器的超级用户身份来执行(即uid为0,gid为0)。

其他的环境变量可以通过命令行来设置,或者在“environment.”配置中设置成永久环境变量。

执行命令在容器中获得一个shell可以简单的执行下列命令得到:

lxcexecbash当然,这样做的前提是容器内已经安装了bash。

更复杂的命令要求使用分隔符来合理分隔参数。

lxcexec--ls-lh/如果想要设置或者重写变量,你可以使用“-env”参数,例如:

stgraber@dakara:~$lxcexeczerotier--envmykeymyvalueenv|grepmykeymykeymyvalue管理文件因为LXD可以直接访问容器的文件系统,因此,它可以直接读取和写入容器中的任意文件。当我们需要提取日志文件或者与容器传递文件时,这个特性是很有用的。

从容器中取回一个文件想要从容器中获得一个文件,简单的执行下列命令:

lxcfilepull/例如:

stgraber@dakara:~$lxcfilepullzerotier/etc/hostshosts或者将它读取到标准输出:

stgraber@dakara:~$lxcfilepullzerotier/etc/hosts-127.0.0.1localhost#ThefollowinglinesaredesirableforIPv6capablehosts::1ip6-localhostip6-loopbackfe00::0ip6-localnetff00::0ip6-mcastprefixff02::1ip6-allnodesff02::2ip6-allroutersff02::3ip6-allhosts向容器发送一个文件发送以另一种简单的方式完成:

lxcfilepush/直接编辑一个文件编辑是一个方便的功能,其实就是简单的提取一个给定的路径,在你的默认文本编辑器中打开它,在你关闭编辑器时会自动将编辑的内容保存到容器。

lxcfileedit/快照管理LXD允许你对容器执行快照功能并恢复它。快照包括了容器在某一时刻的完整状态(如果-stateful被使用的话将会包括运行状态),这也意味着所有的容器配置,容器设备和容器文件系统也会被保存。

创建一个快照你可以使用下面的命令来执行快照功能:

lxcsnapshot命令执行完成之后将会生成名为snapX(X为一个自动增长的数)的记录。

除此之外,你还可以使用如下命令命名你的快照:

lxcsnapshot列出所有的快照一个容器的所有快照的数量可以使用lxclist来得到,但是具体的快照列表只能执行lxcinfo命令才能看到。

lxcinfo恢复快照为了恢复快照,你可以简单的执行下面的命令:

lxcrestore给快照重命名可以使用如下命令来给快照重命名:

lxcmove//从快照中创建一个新的容器你可以使用快照来创建一个新的容器,而这个新的容器除了一些可变的信息将会被重置之外(例如MAC地址)其余所有信息都将和快照完全相同。

lxccopy/删除一个快照最后,你可以执行下面的命令来删除一个快照:

lxcdelete/克隆并重命名得到一个纯净的发行版镜像总是让人感到愉悦,但是,有时候你想要安装一系列的软件到你的容器中,这时,你需要配置它然后将它分支成多个其他的容器。

复制一个容器为了复制一个容器并有效的将它克隆到一个新的容器中,你可以执行下面的命令:

lxccopy目标容器在所有方面将会完全和源容器等同。除了新的容器没有任何源容器的快照以及一些可变值将会被重置之外(例如MAC地址)。

移动一个快照LXD允许你复制容器并在主机之间移动它。但是,关于这一点将在后面的文章中介绍。

现在,“move”命令将会被用作给容器重命名。

lxcmove唯一的要求就是当容器应该被停止,容器内的任何事情都会被保存成它本来的样子,包括可变化的信息(类似MAC地址等)。

结论这篇如此长的文章介绍了大多数你可能会在日常操作中使用到的命令。

很显然,这些如此之多的命令都会有不少选项,可以让你的命令更加有效率,或者可以让你指定你的LXD容器的某个具体方面。最好的学习这些命令的方式就是深入学习它们的帮助文档(-help)。

更多信息LXD的主要网站是:https://linuxcontainers.org/lxdGithub上的开发动态:https://github.com/lxc/lxd邮件列表支持:https://lists.linuxcontainers.orgIRC支持:#lxcontainersonirc.freenode.net如果你不想或者不能在你的机器上安装LXD,你可以试试在线版本!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于服务器的个人博客网站搭建
服务器与本地xshell连接,就像连接Linux系统一样,只是ip写成服务器的公网ip。
CoreDao
2021/04/13
4K0
基于服务器的个人博客网站搭建
网站备案后没有找到站点
A1 问题: A2 原因: 您没有将此域名或IP绑定到对应站点! 配置文件未生效! A3 解决: 检查是否已经绑定到对应站点,若确认已绑定,请尝试重载Web服务(大部分是这个问题,添加对应站点和开放端
CoreDao
2021/04/13
3.4K1
网站备案后没有找到站点
【宝塔面板】从零开始部署WordPress博客
根据上面的操作到达这一步就说明你成功的安装好了属于你的wordpress,可以用wordpress程序来做博客,电商平台,公司页面等很多有趣的网站。
春风不在江南岸
2024/08/24
2300
好物分享38-用宝塔面板快速搭建个人博客
最近我在尝试使用七牛云图床服务使用自定义域名,由于域名需要备案,在这个过程中发现,备案初审前至管局审核需注意什么? (aliyun.com)[2]
北野茶缸子
2022/12/10
1K0
好物分享38-用宝塔面板快速搭建个人博客
【玩转腾讯云】如何用腾讯云搭建typecho博客
物价清单:域名注册(老用户常规:55¥/年or新用户23¥/首年)+腾讯云新用户(香港1核1G1M 50G硬盘)三年合计428¥+宝塔(免费版)+typecho主题(免费主题 or 收费主题,本教程使用的是收费主题88¥)
浮生长恨欢娱少
2020/04/06
40.3K2
【玩转腾讯云】如何用腾讯云搭建typecho博客
【宝塔Linux面板】宝塔面板安装教程分享,适合新手
越来越多的人选择个人建站,个人站长其实门槛很低的,但是有些朋友觉得Linux服务器的各种命令脚本自己没法搭建环境。今天给大家推荐一个不错的Linux面板工具,宝塔面板是一款使用方便、功能强大且终身免费的服务器管理软件,支持Linux与Windows系统。一键配置:LAMP/LNMP环境、网站、数据库、FTP、SSL,通过Web端轻松管理服务器。
wordpress建站吧
2022/10/31
2.5K0
centos安装宝塔面板
(2.)轻量服务器参考添加防火墙规则:https://cloud.tencent.com/document/product/1207/44577
用户8385190
2021/09/13
1.4K0
【干货】保姆级超细教程从购买服务器到网站搭建成功!
云服务器(Elastic Compute Service, ECS)是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效。用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。
释然IT杂谈
2022/10/27
4.8K0
【干货】保姆级超细教程从购买服务器到网站搭建成功!
【有奖征文】用轻量云快速搭建BT面板+创建站点(Liunx)
宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。对新手而言非常友好,能快速的管理自己的服务器和网站。
用户8403842
2022/03/25
9670
【有奖征文】用轻量云快速搭建BT面板+创建站点(Liunx)
腾讯云服务器如何安装宝塔_服务器宝塔面板是什么
通过前面一节的过程(https://blog.csdn.net/AnChenliang_1002/article/details/125268556),我们已经申请了腾讯云服务器,下面我们在云服务器上安装宝塔面板。 宝塔面板是一款服务器管理软件,用户可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化CPU、内存、流量监控图表,计划任务等功能。
全栈程序员站长
2022/11/01
7.8K0
腾讯云服务器如何安装宝塔_服务器宝塔面板是什么
将node项目部署到云服务器详细教程
这里我已经安装过Xshell了,无法演示安装完毕的提示内容。我就演示输入 bt default 的提示
CRMEB商城源码
2022/04/20
5.8K0
将node项目部署到云服务器详细教程
Ubuntu如何使用宝塔面板部署开源论坛HadSky并结合内网穿透远程访问?
经过多年的基础设施建设和科技发展,网络已经成为我们生活中不可缺少的“必需品”。在大部分情况下,我们都可以在网络上找到需要的信息,并且能够通过特定方式(如论坛、留言、评论等)与众网友们交换意见和见解。不过,在别人的地盘呆久了,总会有自己建立交互空间吸引大家来畅聊的想法。今天,笔者就为大家介绍,如何在自家电脑的ubuntu系统上,建立轻量化的HadSky论坛,并让其能够为大家所访问( 注意:面向公共的论坛网站,必须向当地监管部门申请备案!)。
程思扬
2024/01/09
5640
Ubuntu如何使用宝塔面板部署开源论坛HadSky并结合内网穿透远程访问?
【玩转腾讯云】八.一分钟快速上手搭建宝塔管理面板
②选择自定义配置——计费模式为“按量付费”——地域选择“北京”——可用区选择“随机可用区”——网络选择“默认”即可
一只特立独行的兔先生
2020/04/18
3K0
【玩转腾讯云】八.一分钟快速上手搭建宝塔管理面板
不会建站?10分钟教你零基础快速搭建个人网站!
轻量应用服务器(Light server)是一种内置应用型镜像或系统型镜像的小规格云服务器, 绑定适配大小的磁盘和带宽,为中小型企业和个人用户提供官网搭建、web应用搭建、云上学习和测试等场景的服务。
网络安全自修室
2022/12/06
2.5K0
不会建站?10分钟教你零基础快速搭建个人网站!
宝塔面板忘记了登录密码怎么办?
我们安装了宝塔面板后,通常会修改默认的端口号以及用户名和密码。如果长时间不登录宝塔面板的话,很容易会忘记这些登录信息,我们该如何找回?今天就来为大家简单分享一下忘记宝塔面板登录信息后的解决办法。
会长君
2023/04/25
3.5K0
宝塔面板忘记了登录密码怎么办?
centos安装宝塔面板
(2.)轻量服务器参考添加防火墙规则:https://cloud.tencent.com/document/product/1207/44577
深蓝.
2021/10/03
1.4K0
【玩转腾讯云】用轻量应用服务器搭建网站
不少小伙伴应该知道,腾讯云正在内测轻量应用服务器,而且马上就要公测了!我提前申请到了一台内测机器,那就来告诉大家,在公测后购买腾讯云轻量应用服务器之后如何玩转它吧,比如搭建静态或者动态网站!
Bess Croft
2020/06/12
11.8K2
【玩转腾讯云】用轻量应用服务器搭建网站
用免费腾讯云服务器体验基于CentOS搭建宝塔面板环境
首次可免费使用云主机 30 分钟 ,到期后云主机将被重置并退库,若想保留成果请及时留用。
用户5915102
2019/09/07
8.6K0
用免费腾讯云服务器体验基于CentOS搭建宝塔面板环境
如何在Ubuntu使用宝塔部署Emlog网站并发布到公网实现任意浏览器访问
博客作为使用最广的个人在互联网的发声网站,在很长一段时间里,都被大家视作在互联网上发声的主要通道之一。虽然之后出现的即时聊天工具和朋友圈崛起,抢夺了不少博客的空间,但其仍占有不小的市场份额。也正因博客很重要,才吸引了不少开发者,制作出了各种各样的个人博客软件。今天,笔者就为大家介绍,如何在本地Ubuntu系统上,搭建一个Emlog个人博客网站,并使用cpolar创建的内网穿透数据隧道,将其发布到公共互联网上。
学编程的小程
2024/05/26
1530
如何在Ubuntu使用宝塔部署Emlog网站并发布到公网实现任意浏览器访问
Linux系统安装宝塔面板教程
宝塔面板对于不熟悉linux系统的人来说,就是福音,可以解决配置站点难,配置环境复杂的问题,平时编译环境半个小时,也可能两三个小时都搞不定,配置个站点十多分钟,前后可能得好几个小时才能搞定,但是有了宝塔面板,可能前后就10分钟的事,事半功倍。
米克随笔
2021/12/17
2.8K0
Linux系统安装宝塔面板教程
推荐阅读
相关推荐
基于服务器的个人博客网站搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档