indatus / assembler
使用简单的配置脚本轻松构建和打包Docker容器。
Requires
- php: >=5.4.0
- codegyre/robo: 0.5.*
- guzzlehttp/guzzle: ~5.2
- symfony/config: ~2.6
- symfony/yaml: ~2.6
- toin0u/digitalocean-v2: ~1.0
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.*
- scrutinizer/ocular: ~1.1
This package is not auto-updated.
Last update: 2024-09-14 17:58:53 UTC
README
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.com、mbunch@indatus.com或jlaswell@indatus.com联系,而不是使用问题跟踪器。
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件