indatus/assembler

使用简单的配置脚本轻松构建和打包Docker容器。

v1.3.0 2015-05-13 17:43 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:58:53 UTC


README

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

Assembler 允许您使用现有的配置脚本轻松构建和打包Docker容器。目前您只能使用saltstack构建容器,但计划添加使用任何配置管理工具(如puppet、chef和ansible)部署的能力。

需求

  • Docker
  • PHP 5.4+
  • Salt

安装

通过Composer

$ composer create-project indatus/assembler

使用方法

Assembler 使用 Robo 在命令行上运行任务。这允许Assembler包装docker命令,因此您需要在任何运行它的位置安装docker。本仓库根目录中有一个vagrant文件,用于使用docker和php5引导ubuntu/trusty64,这将允许您运行assembler。另外,您需要通过以下方式配置ssh转发代理

vi ~/.ssh/config

然后追加

host 172.17.8.150
    ForwardAgent yes

然后运行,如果您还没有id_rsa密钥

ssh-add

然后只需调用 vagrant up

如果一切顺利,您应该能够开始运行assembler。

术语

该项目将制造业的隐喻扩展到构建和部署应用程序。Docker容器基于在产品线中指定的设置进行库存制造加载包装

产品线

产品线只是一个yaml文件,指定了您的产品运行所需的原始商品或基础服务。

考虑以下示例

raw_goods:
  - mysql:
    - user: root
    - password: password
  - php
suppliers:
  - git@github.com:saltstack-formulas/mysql.git
  - git@github.com:saltstack-formulas/php.git
userData: config/provision.sh # optional

上面的yaml表示一个产品线,告诉assembler您想要一个具有root用户和密码为password的mysql容器的容器。此外,它还告诉assembler在何处可以找到这些原始商品作为供应商。您将需要为要部署到Docker容器上的每个原始商品提供salt states。

库存

通过运行 assembler:stock 并指定要库存的产品线来库存商品,例如以下所示

$ robo assembler:stock my_webserver --goods-path=./goods

上述命令将找到my_webserver.yml文件,git克隆原始商品,并自动生成一个top.sls文件供salt使用

制造

您可以根据基于docker文件的基镜像制造容器

$ robo assembler:fabricate /path/to/dockerfile/ mybaseimagename

上述命令将基于指定的docker文件构建基镜像。

加载

您可以通过以下方式加载容器,其中包含您在生产线中指定的原始商品,例如

$ robo assembler:load mybaseimagename /path/to/goods/

上述命令将从指定的路径加载所有商品。'/path/to/goods' 将与在stock任务中指定的 --goods-path 相同。

包装

您可以对已库存、制造和加载的容器进行包装。例如

$ robo assembler:package somecontainerid myrepo/name

这将提交指定的容器id到docker镜像,如果指定了 --push 标志,则包装命令实际上会将提交的镜像推送到myrepo/name。要推送,您需要指定要推送到的dockerregistry的用户名、密码和电子邮件。

制造

make命令将一次执行所有操作。例如

$ robo assembler:make my_base_product

将库存、制造、加载和包装您的容器

运输

ship命令将通过SSH登录到Docker主机服务器并拉取Docker镜像并运行容器实例。

robo ship leftyhitchens/mysql:5.2 192.168.1.100 --ports="3306:3306" --remote_command="mysqld_safe" --sudo

上述命令将通过SSH登录到服务器192.168.1.100,并以sudo身份执行以下命令

sudo docker pull leftyhitchens/mysql:5.2
sudo docker run -d --name leftyhitchens_mysql_5.2_<unit_timestamp> -p 3306:3306 mysqld_safe

配置

配置

您可以通过provisioning.yaml文件指定assembly器需要将容器发送到哪个云提供商。在这里,您将保留各个提供商的公共API令牌,以及您希望在新建的虚拟机中安装的任何默认SSH密钥。在config目录中有一个示例文件,或者您可以查看下面的示例。

provider: digitalocean
tokens:
   digitalocean: yoursuperlongapitoken111
ssh:
  keys:
    - 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
userData: config/provision.sh # optional

userData键提供了一个指向DigitalOcean云配置脚本的路径。这将在您的Droplet创建期间执行,并可用于配置。

运行

您可以使用以下'provision'命令在DigitalOcean上配置服务器

robo provision myhostname

上述操作将使用您的配置文件中的信息在DigitalOcean上创建一个Droplet,指定的主机名为'my_host_name'。将创建一个以形式<.machine文件,形式为.machinemyhostname,并包含有关创建的机器的数据。以下是一个示例:

id: 5083234
hostname: myhostname
region: nyc3
size: 512mb
image: docker
backups: false
ipv6: false
privatenetworking: false

您可以使用以下'destroy'命令销毁云服务器

robo destroy .machinemyhostname

其中,.machinemyhostname是之前配置的机器文件的路径

测试

$ phpunit

贡献

有关详细信息,请参阅CONTRIBUTING

安全

如果您发现任何与安全相关的问题,请通过电子邮件tbell@indatus.commbunch@indatus.comjlaswell@indatus.com联系,而不是使用问题跟踪器。

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件