前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Docker容器互访三种方式
docker容器之间是互相隔离的,不能互相访问,但如果有些依赖关系的服务要怎么办呢。
py3study
2020/04/01
3.7K0
巧妙的Linux命令,再来6个!
Linux非常有意思,它的KISS原则,本意是好的,但是增加了使用者的记忆负担。不像是python,一个os.dir可以看到所有的函数。
xjjdog
2021/07/07
6160
使用LXD搭建Web网站
Linux的容器是Linux的一组进程,通过使用Linux内核功能与系统隔离。它是一个类似于虚拟机的构造,但它的更轻量级。您可以在同一台服务器上轻松创建多个容器。使用Linux容器,您可以在同一服务器上运行多个实例,或者将应用程序及其依赖项捆绑到容器中,而不会影响系统的其余部分。
独木桥先生
2018/08/03
2.6K0
使用LXD搭建Web网站
Docker学习——三大组件的应用(二) 顶
Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。 下面将介绍更多关于镜像的内容,包括:从仓库获取镜像; 管理本地主机上的镜像; 介绍镜像实现的基本原理。
wuweixiang
2018/12/06
7900
Linux 下 LXD 容器搭建 Hadoop 集群
基于 LXD 的虚拟化容器,我们可以很方便的、很节约资源的在 Linux 主机下进行 3 节点甚至更多节点的 Hadoop 集群搭建练习。非常利于硬件资源不足的学生、老师进行演示。更多关于 LXD 的资源,以及 Hadoop 的资源,请参考各自官方文档。
RainMark
2019/09/04
1.4K0
说说linux容器的隔离
说到docker,大家都懂。但是LXC可能就比较陌生。Docker的起源于LXC。LXC的英文全称是Linux Container,相比较其他虚拟机而言,是一种轻量级虚拟化技术,它介于Chroot(linux的一个改变根目录挂载点的机制)和完整开发的虚拟机之间。LXC不使用单独的内核资源,但是可以创建一个类似的Linux操作系统环境。
mariolu
2020/02/13
3.2K0
【云原生 | 05】Docker中容器的创建与启停「建议收藏」
🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅 ✒️个人主页:小鹏linux 💊个人社区:小鹏linux(个人社区)欢迎您的加入! ​ 目录 1. 镜像和容器 2. 新建并启动容器 3. 使用第一个容器 4. 容器命名 5.重启容器 6. 附着到容器上 👑👑👑结束语👑👑👑 ---- 1. 镜像和容器 看待镜像和容器的一种方式是将它们类比成程序与进程。一个进程可以视为一个被执行的应用程序,同样,一个Docker容器可以视为一个运行中的
全栈程序员站长
2022/11/16
6530
【云原生 | 05】Docker中容器的创建与启停「建议收藏」
Docker容器网络
Docker在安装后自动提供3种网络,可以使用``docker network ls`命令查看
Alone-林
2022/08/23
5140
Docker容器网络
LXD 3.8 发布,下一代容器管理器
LXD 3.8 发布了,LXD 是下一代容器管理程序,它提供类似于虚拟机的用户体验,但使用的是 Linux 容器。LXD 的核心是一个特权守护程序,它通过本地 unix 套接字以及网络暴露 REST API。随后客户端通过该 REST API 执行所有操作,这意味着无论是与本地主机还是远程服务器通信,都以相同的方式运行。LXD 附带提供命令行客户端。
Debian中国
2018/12/21
1.1K0
【重识云原生】第六章容器6.1.10节——DockerFile解析
        首先通过一张图来了解 Docker 镜像、容器和 Dockerfile 三者之间的关系。
江中散人_Jun
2022/09/30
1.5K0
【重识云原生】第六章容器6.1.10节——DockerFile解析
【重识云原生】第六章容器6.1.12节——Docker网络模型设计
        先来简要回顾一下前面的内容,namespace和cgroup是Linux 内核的两大特性,namespace的诞生据说就是为了支持容器技术,那么这俩特性到底干了啥呢?
江中散人_Jun
2022/09/28
4660
【重识云原生】第六章容器6.1.12节——Docker网络模型设计
Docker容器常见操作详解
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped ) 的容器重新启动。 因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
星哥玩云
2022/07/14
1.3K0
记一次 Samba 服务器渗透
本次渗透皆为靶机环境,实则为上一篇靶机 Prime level 1 的后续。文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
HACK学习
2021/06/24
1.7K0
记一次 Samba 服务器渗透
lxd 基本操作指令记录
比如访问 ubuntu的image资源,访问 https://cloud-images.ubuntu.com/releases ; 获取下面的信息:
用户9979000
2023/05/15
1.3K0
Docker 容器的网络连接
通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务。
程序员果果
2019/05/28
1.3K0
配置OpenStack VM启用多张网卡
[这篇文章是由巴拉克·梅里莫维奇撰写的。] 我们已经在之前的文章中广泛讨论了OpenStack网络。在这篇文章中,我想深入讲解一个更高级的OpenStack网络场景。
Techeek
2018/01/11
3.8K0
配置OpenStack VM启用多张网卡
Docker入门(六):操作容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态 ( stopped )的容器重新启动。
传说之下的花儿
2023/10/04
2K0
Docker入门(六):操作容器
Docker容器学习梳理--日常操作总结
使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach to a running container --将终端依附到容器上 1> 运行一个交互型容器 [root@localhost ~]# docker run -i -t centos /bin/bash
洗尽了浮华
2018/01/22
2.3K0
Docker 容器技术使用指南
1.1 Docker 的基本概念 1.2 为什么使用 Docker 1.3 Docker 体系结构简介 1.4 Docker 容器技术的应用场景
杰哥的IT之旅
2021/06/01
2.4K0
Docker 容器技术使用指南
什么?VMware Fusion 也能 docker run 了?
作为最好的虚拟机软件之一,VMware Workstation 是专为 Linux 和 Windows 系统设计的,为了照顾 Mac 平台的用户,VMware 原班人马又打造了 VMware Fusion,与 Workstation 体验基本一致。
米开朗基杨
2020/06/11
2.5K0
什么?VMware Fusion 也能 docker run 了?
相关推荐
Docker容器互访三种方式
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档