如何使用 cloud-init 来预配置 LXD 容器

当你正在创建 LXD 容器的时候,你希望它们能被预先配置好。例如在容器一启动就自动执行 apt update来安装一些软件包,或者运行一些命令。

-- Simos Xenitellis

致谢

编译自 | https://blog.simos.info/how-to-preconfigure-lxd-containers-with-cloud-init/

作者 | Simos Xenitellis

译者 | Kane Gong (kaneg) 共计翻译:1篇 贡献时间:2 天

当你正在创建 LXD 容器的时候,你希望它们能被预先配置好。例如在容器一启动就自动执行 来安装一些软件包,或者运行一些命令。

这篇文章将讲述如何用cloud-init

[1]

来对LXD 容器进行进行早期初始化

[2]

接下来,我们将创建一个包含cloud-init指令的LXD profile,然后启动一个新的容器来使用这个profile。

如何创建一个新的 LXD profile

查看已经存在的 profile:

我们把名叫 的 profile 复制一份,然后在其内添加新的指令:

我们就得到了一个新的 profile: 。下面是它的详情:

注意这几个部分: 、 、 、 和 ,当你修改这些内容的时候注意不要搞错缩进。(LCTT 译注:因为这些内容是 YAML 格式的,缩进是语法的一部分)

如何把 cloud-init 添加到 LXD profile 里

cloud-init

[1]

可以添加到 LXD profile 的 里。当这些指令将被传递给容器后,会在容器第一次启动的时候执行。

下面是用在示例中的指令:

是指当容器第一次被启动时,我们想要 运行 。 列出了我们想要自动安装的软件。然后我们设置了 和 。在 Ubuntu 容器的镜像里,root 用户默认的 是 ,而 用户则是 。此外,我们把时区设置为 。最后,我们展示了如何使用 runcmd 来运行一个 Unix 命令

[3]

我们需要关注如何将 指令插入 LXD profile。

我首选的方法是:

它会打开一个文本编辑器,以便你将指令粘贴进去。结果应该是这样的

[4]

如何使用 LXD profile 启动一个容器

使用 profile 来启动一个新容器:

然后访问该容器来查看我们的指令是否生效:

如果我们连接得够快,通过 将能够看到系统正在更新软件。我们可以从 看到完整的日志:

以上可以看出 已经被更改了。root 用户还是保持默认的 ,只有非 root 用户 使用了新的 设置。

以上是安装软件包之前执行的 。

以上是在执行 和安装软件包。

以上是我们安装 软件包的指令。

执行的结果如何?

可见它已经生效了!

结论

当我们启动 LXD 容器的时候,我们常常需要默认启用一些配置,并且希望能够避免重复工作。通常解决这个问题的方法是创建 LXD profile,然后把需要的配置添加进去。最后,当我们启动新的容器时,只需要应用该 LXD profile 即可。

via:https://blog.simos.info/how-to-preconfigure-lxd-containers-with-cloud-init/

作者:Simos Xenitellis

[6]

译者:kaneg校对:wxy

本文由LCTT原创编译,Linux中国荣誉推出

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180225B0EOHG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券