博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LXD 2.0 系列(八):LXD中的LXD
阅读量:5976 次
发布时间:2019-06-20

本文共 2912 字,大约阅读时间需要 9 分钟。

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

介绍

在上一篇文章中,我介绍了如何在 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

转载地址:http://plpox.baihongyu.com/

你可能感兴趣的文章
CF772E Verifying Kingdom
查看>>
雨林木风U盘装系统综合教程
查看>>
V-by-one
查看>>
让我欲罢不能的node.js
查看>>
python3基础知识学习记录
查看>>
10年.NET老程序员推荐的7个开发类工具
查看>>
C#核心编程结构(2)
查看>>
rename设计思想(Perl版)
查看>>
第二次冲刺 第七天
查看>>
矩阵之矩阵乘法(转载)
查看>>
Python _内置函数3_45
查看>>
cf-Igor In the Museum (dfs)
查看>>
数据之路 Day4 - Python基础4
查看>>
使用openCV打开USB摄像头(UVC 小米micro接口)
查看>>
Luogu P3577 [POI2014]TUR-Tourism
查看>>
Scrapy框架的基本使用
查看>>
ActionResult,PartialViewResult,EmptyResult,ContentResult
查看>>
关于泛型类,泛型接口,泛型函数
查看>>
@pathvariable和@RequestParam的区别
查看>>
测试驱动开发
查看>>