使用 LXD 容器时如何自动化应用程序部署?
How to automate application deployment when using LXD containers?
在 LXD 容器中应如何 scripted/automatically 部署应用程序?
例如,在 LXD 容器中部署应用程序的最佳方式是使用 bash 脚本(部署应用程序)?如何通过在主机上执行命令在容器内执行这个bash脚本?
是否有任何 tools/methods 以类似于 Docker 食谱的方式做到这一点?
就我而言,我使用 Ansible 来:
- 构建 LXD 容器(例如 Web、数据库、redis)。
- 连接到容器并部署所需的服务和代码。
例如,您可以使用已部署的服务 and/or 代码构建自己的镜像,并从该镜像构建特定的容器。
我在 LXD 有 Ansible 支持(Ansible 2.2)之前就开始这样做了,当我连接到容器进行部署时,我更喜欢使用 ssh 而不是 lxd 连接 services/code。他们附带了一个配置文件,我在其中设置了我的 ssh public 密钥(通过密钥直接进行 ssh 连接......没有密码)
看看我在 bitbucket 上的开源项目 devops_lxd_containers 它包括:
- 用于构建 lxd 图像模板的脚本,包括 Apache、tomcat、haproxy。
- 用于演示自定义应用程序映像构建的脚本,例如 Apache 托管和 key/value 内容以及配置为路由器的 haproxy。
- 启动容器和映射端口的代码,以便更大的网络可以访问它们
- 将 haproxy 配置为第 7 层代理以根据 uri 前缀路由在框和容器之间路由 http 请求的代码。基于之前部署和映射端口的位置。
- 在更高级别,它接受数据驱动器规范,并将部署由分布在许多主机上的许多容器组成的整个环境,并通过第 7 层代理将它们连接起来充当一个整体。
- 大量文档显示 how I accomplished each major step 在自动化之前使用代码片段。
- 支持零中断升级的代码,使用 layer7 能力优雅地释放旧连接,同时在新层接受新连接。
整个系统建立在图像构建最好分层进行的前提下。我们构建更新的 Ubuntu 图像。我们从中构建了一个强化的 Ubuntu 图像。我们从中构建了一个基本的 Apache 映像。我们从中构建一个特定于应用程序的映像,例如我们的 apacheKV 示例。目标是永远不会重建超过一次,并重新使用基本 JDK 等通用功能作为所有 JDK 依赖图像的来源,这样我们就可以避免在任何位置出现重复代码。我努力将图像或模板创建与部署和端口映射完全分开。唯一的例外是,在我们了解其他映像的映射方式之前,我无法完成第 7 层路由映像的创建。
我一直在使用 Hashicorp Packer 和 ansible
provisioner 使用 ansible_connection = lxd
- 的一些注释
当遍历主机系统上的 local
文件时,您 可能 需要使用 ansible_connection = local
(例如 stat
& 朋友)
在 ansible 中使用 local_action
与 lxd
连接仍然是
使用 stat
时容器内的操作(但不使用文件的 include_vars
和 lookup
函数)
在 Ansible 中使用大量 debug
消息有助于了解 ansible 实际在哪个 local
环境中运行。
在 LXD 容器中应如何 scripted/automatically 部署应用程序?
例如,在 LXD 容器中部署应用程序的最佳方式是使用 bash 脚本(部署应用程序)?如何通过在主机上执行命令在容器内执行这个bash脚本?
是否有任何 tools/methods 以类似于 Docker 食谱的方式做到这一点?
就我而言,我使用 Ansible 来:
- 构建 LXD 容器(例如 Web、数据库、redis)。
- 连接到容器并部署所需的服务和代码。
例如,您可以使用已部署的服务 and/or 代码构建自己的镜像,并从该镜像构建特定的容器。
我在 LXD 有 Ansible 支持(Ansible 2.2)之前就开始这样做了,当我连接到容器进行部署时,我更喜欢使用 ssh 而不是 lxd 连接 services/code。他们附带了一个配置文件,我在其中设置了我的 ssh public 密钥(通过密钥直接进行 ssh 连接......没有密码)
看看我在 bitbucket 上的开源项目 devops_lxd_containers 它包括:
- 用于构建 lxd 图像模板的脚本,包括 Apache、tomcat、haproxy。
- 用于演示自定义应用程序映像构建的脚本,例如 Apache 托管和 key/value 内容以及配置为路由器的 haproxy。
- 启动容器和映射端口的代码,以便更大的网络可以访问它们
- 将 haproxy 配置为第 7 层代理以根据 uri 前缀路由在框和容器之间路由 http 请求的代码。基于之前部署和映射端口的位置。
- 在更高级别,它接受数据驱动器规范,并将部署由分布在许多主机上的许多容器组成的整个环境,并通过第 7 层代理将它们连接起来充当一个整体。
- 大量文档显示 how I accomplished each major step 在自动化之前使用代码片段。
- 支持零中断升级的代码,使用 layer7 能力优雅地释放旧连接,同时在新层接受新连接。
整个系统建立在图像构建最好分层进行的前提下。我们构建更新的 Ubuntu 图像。我们从中构建了一个强化的 Ubuntu 图像。我们从中构建了一个基本的 Apache 映像。我们从中构建一个特定于应用程序的映像,例如我们的 apacheKV 示例。目标是永远不会重建超过一次,并重新使用基本 JDK 等通用功能作为所有 JDK 依赖图像的来源,这样我们就可以避免在任何位置出现重复代码。我努力将图像或模板创建与部署和端口映射完全分开。唯一的例外是,在我们了解其他映像的映射方式之前,我无法完成第 7 层路由映像的创建。
我一直在使用 Hashicorp Packer 和 ansible
provisioner 使用 ansible_connection = lxd
- 的一些注释
当遍历主机系统上的
local
文件时,您 可能 需要使用ansible_connection = local
(例如stat
& 朋友)在 ansible 中使用
local_action
与lxd
连接仍然是 使用stat
时容器内的操作(但不使用文件的include_vars
和lookup
函数)在 Ansible 中使用大量
debug
消息有助于了解 ansible 实际在哪个local
环境中运行。