LXD 2.0 系列(八):LXD中的LXD

这是 LXD 2.0 系列介绍文章的第八篇。

  1. LXD 入门
  2. 安装与配置
  3. 你的第一个 LXD 容器
  4. 资源控制
  5. 镜像管理
  6. 远程主机及容器迁移
  7. LXD 中的 Docker

介绍

在上一篇文章中,我介绍了如何在 LXD 中运行 Docker,这是一个访问由 Docker 提供的应用程序组合的很好方式,同时 Docker 还运行在 LXD 提供的安全环境中。

我提到的一个情况是为你的用户提供一个 LXD 容器,然后让他们使用他们的容器来运行 Docker。那么,如果他们自己想要在其容器中使用 LXD 运行其他 Linux 发行版,或者甚至允许另一组人来访问运行在他们的容器中的 Linux 系统呢?

原来 LXD 使得用户运行嵌套容器变得非常简单。

嵌套 LXD

最简单的情况可以使用 Ubuntu 16.04 镜像来展示。 Ubuntu 16.04 云镜像预装了 LXD。守护进程本身没有运行,因为它是由套接字激活的,所以它不使用任何资源,直到你真正使用它。

让我们启动一个启用了嵌套的 Ubuntu 16.04 容器:


  1. lxc launch ubuntu-daily:16.04 c1 -c security.nesting=true 

你也可以在一个已有的容器上设置 security.nesting:


  1. lxc config set <container name> security.nesting true 

或者对所有的容器使用一个指定的配置文件:


  1. lxc profile set <profile name> security.nesting true 

容器启动后,你可以从容器内部得到一个 shell,配置 LXD 并生成一个容器:


  1. stgraber@dakara:~$ lxc launch ubuntu-daily:16.04 c1 -c security.nesting=true 
  2. Creating c1 
  3. Starting c1 
  4. stgraber@dakara:~$ lxc exec c1 bash 
  5. root@c1:~# lxd init 
  6. Name of the storage backend to use (dir or zfs): dir 
  7. We detected that you are running inside an unprivileged container. 
  8. This means that unless you manually configured your host otherwise, 
  9. you will not have enough uid and gid to allocate to your containers. 
  10. LXD can re-use your container's own allocation to avoid the problem. 
  11. Doing so makes your nested containers slightly less safe as they could 
  12. in theory attack their parent container and gain more privileges than 
  13. they otherwise would. 
  14. Would you like to have your containers share their parent's allocation (yes/no)? yes 
  15. Would you like LXD to be available over the network (yes/no)? no 
  16. Do you want to configure the LXD bridge (yes/no)? yes 
  17. Warning: Stopping lxd.service, but it can still be activated by: 
  18.  lxd.socket 
  19. LXD has been successfully configured. 
  20. root@c1:~# lxc launch ubuntu:14.04 trusty 
  21. Generating a client certificate. This may take a minute... 
  22. If this is your first time using LXD, you should also run: sudo lxd init 
  23. Creating trusty 
  24. Retrieving image: 100% 
  25. Starting trusty 
  26. root@c1:~# lxc list 
  27. +--------+---------+-----------------------+----------------------------------------------+------------+-----------+ 
  28. |  NAME  |  STATE  |         IPV4          |                     IPV6                     |    TYPE    | SNAPSHOTS | 
  29. +--------+---------+-----------------------+----------------------------------------------+------------+-----------+ 
  30. | trusty | RUNNING | 10.153.141.124 (eth0) | fd7:f15d:d1d6:da14:216:3eff:fef1:4002 (eth0) | PERSISTENT | 0         | 
  31. +--------+---------+-----------------------+----------------------------------------------+------------+-----------+ 
  32. root@c1:~# 

就是这样简单。

在线演示服务器

因为这篇文章很短,我想我会花一点时间谈论我们运行中的演示服务器。我们今天早些时候刚刚达到了 10000 个会话!

这个服务器基本上只是一个运行在一个相当强大的虚拟机上的正常的 LXD,一个小型的守护进程实现了我们的网站所使用的 REST API。

当你接受服务条款时,将为你创建一个新的 LXD 容器,并启用 security.nesting,如上所述。接着你就像使用 lxc exec 时一样连接到了那个容器,除了我们使用 websockets 和 javascript 来做这些。

你在此环境中创建的容器都是嵌套的 LXD 容器。如果你想,你可以进一步地嵌套。

我们全范围地使用了 LXD 资源限制,以防止一个用户的行为影响其他用户,并仔细监控服务器的任何滥用迹象。

如果你想运行自己的类似的服务器,你可以获取我们的网站和守护进程的代码:


  1. git clone https://github.com/lxc/linuxcontainers.org 
  2. git clone https://github.com/lxc/lxd-demo-server 

作者:Stéphane Graber

来源:51CTO

时间: 2024-10-22 17:27:30

LXD 2.0 系列(八):LXD中的LXD的相关文章

LXD 2.0 系列(七):LXD中的Docker

这是 LXD 2.0 系列介绍文章的第七篇. LXD 入门 安装与配置 你的第一个 LXD 容器 资源控制 镜像管理 远程主机及容器迁移 为什么在 LXD 中运行 Docker 正如我在系列的第一篇中简要介绍的,LXD 的重点是系统容器,也就是我们在容器中运行一个完全未经修改的 Linux 发行版.LXD 的所有意图和目的并不在乎容器中的负载是什么.它只是设置容器命名空间和安全策略,然后运行 /sbin/init 来生成容器,接着等待容器停止. 应用程序容器,例如由 Docker 或 Rkt 所

LXD 2.0 系列(十一):LXD 和 OpenStack

这是 LXD 2.0 系列介绍文章的第十一篇. LXD 入门 安装与配置 你的第一个 LXD 容器 资源控制 镜像管理 远程主机及容器迁移 LXD 中的 Docker LXD 中的 LXD 实时迁移 LXD 和 Juju 介绍 首先对这次的延期抱歉.为了让一切正常我花了很长时间.我第一次尝试是使用 devstack 时遇到了一些必须解决问题. 然而即使这样,我还是不能够使网络正常. 我终于放弃了 devstack,并使用用户友好的 Juju 尝试使用 "conjure-up" 部署完整

LXD 2.0 系列(七):LXD 中的 Docker

为什么在 LXD 中运行 Docker 正如我在系列的第一篇中简要介绍的,LXD 的重点是系统容器,也就是我们在容器中运行一个完全未经修改的 Linux 发行版.LXD 的所有意图和目的并不在乎容器中的负载是什么.它只是设置容器命名空间和安全策略,然后运行 /sbin/init 来生成容器,接着等待容器停止. 应用程序容器,例如由 Docker 或 Rkt 所实现的应用程序容器是非常不同的,因为它们用于分发应用程序,通常在它们内部运行单个主进程,并且比 LXD 容器生命期更短暂. 这两种容器类型

LXD 2.0 系列(十):LXD 和 Juju

介绍 Juju 是 Canonical 的服务建模和部署工具. 它支持非常广泛的云服务提供商,使您能够轻松地在任何云上部署任何您想要的服务. 此外,Juju 2.0 还支持 LXD,既适用于本地部署,也适合开发,并且可以在云实例或物理机上共同协作. 本篇文章将关注本地使用,通过一个没有任何Juju经验的LXD用户来体验. 要求 本篇文章假设你已经安装了 LXD 2.0 并且配置完毕(看前面的文章),并且是在 Ubuntu 16.04 LTS 上运行的. 设置 Juju 第一件事是在 Ubuntu

LXD 2.0 系列(一):LXD 入门

关于 LXD 几个常见问题 什么是 LXD ? 简单地说, LXD 就是一个提供了 REST API 的 LXC 容器管理器. LXD 最主要的目标就是使用 Linux 容器而不是硬件虚拟化向用户提供一种接近虚拟机的使用体验. LXD 和 Docker/Rkt 又有什么关系呢 ? 这是一个最常被问起的问题,现在就让我们直接指出其中的不同吧. LXD 聚焦于系统容器,通常也被称为架构容器.这就是说 LXD 容器实际上如在裸机或虚拟机上运行一般运行了一个完整的 Linux 操作系统. 这些容器一般基

LXD 2.0系列之二:LXD安装和配置

本文讲的是LXD 2.0系列之二:LXD安装和配置,[编者的话]第三方调查报告显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关LXD连载博文的第二篇. [LXD 2.0系列开篇:是时候讨论LXD的一切了][LXD 2.0系列之一:LXD简介][LXD 2.0系列之二:LXD安装和配置][LXD 2.0系列之三:你的第一个LXD容器][LXD 2.0系列之四:资源管理][LXD 2.0系列之五:镜像管理][LXD 2.0系列

LXD 2.0系列之开篇:是时候讨论LXD的一切了

本文讲的是LXD 2.0系列之开篇:是时候讨论LXD的一切了,[编者的话]第三方调查报告显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关LXD连载博文的开篇. 我们一年半前开始这个项目,当越来越接近LXC,LXD和LXCFS 2.0的最终版本时,我想,是时候讨论一下LXD的一切. 这将是一个连载博文,和很多年前我写的"LXC 1.0我做了什么"系列类似,内容包括: [LXD 2.0系列开篇:是时候讨论LXD的一切

LXD 2.0系列之一:LXD简介

本文讲的是LXD 2.0系列之一:LXD简介,[编者的话]第三方调查报告显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关LXD连载博文的第一篇. [LXD 2.0系列开篇:是时候讨论LXD的一切了][LXD 2.0系列之一:LXD简介][LXD 2.0系列之二:LXD安装和配置][LXD 2.0系列之三:你的第一个LXD容器][LXD 2.0系列之四:资源管理][LXD 2.0系列之五:镜像管理][LXD 2.0系列之六:

LXD 2.0系列之三:你的第一个LXD容器

本文讲的是LXD 2.0系列之三:你的第一个LXD容器,[编者的话]第三方调查报告显示LXD有潜质成为一款受欢迎的第三方容器管理工具.本文是LXD核心维护者.加拿大程序员Stéphane Graber有关LXD连载博文的第三篇. [LXD 2.0系列开篇:是时候讨论LXD的一切了][LXD 2.0系列之一:LXD简介][LXD 2.0系列之二:LXD安装和配置][LXD 2.0系列之三:你的第一个LXD容器][LXD 2.0系列之四:资源管理][LXD 2.0系列之五:镜像管理][LXD 2.0