#yaml #pod #docker-compose #renamed #applications #develop #apps

已撤回 导体

(即将重命名) 开发和编排多 pod docker-compose 应用

使用旧的 Rust 2015

0.0.15 2016 年 10 月 5 日
0.0.14 2016 年 10 月 4 日
0.0.10 2016 年 9 月 28 日
0.0.1 2016 年 8 月 31 日

#20 in #docker-compose

33 每月下载量

MIT/Apache

170KB
3.5K SLoC

编排大型的多 pod docker-compose 应用

该项目将很快重命名。 请保持关注;如果幸运的话,我们将很快发布实际版本。

Latest version License Build Status

这是一个使用 compose_yml 库正在进行中的工作。它是使用新的 docker-compose.yml 版本 2 格式和 Rust 对我们内部、临时 工具的重新实现。

API 文档

这是做什么用的?

  • 您的应用程序包含多个 docker-compose.yml 文件吗?
  • 您的应用程序包含永久运行和一次性任务的混合容器吗?
  • 您的应用程序在多个机器集群上运行吗?
  • 您的应用程序的各个组件需要它们自己的负载均衡器吗?
  • 在开发模式下运行时,您需要用本地容器替换第三方服务吗?

如果您对这些问题的回答是“是”,那么 conductor 可能适合您。它为复杂的 docker-compose 应用提供开发和部署工具,遵循 约定优于配置 的哲学。

安装

要安装,我们建议使用 rustupcargo

curl https://sh.rustup.rs -sSf | sh
cargo install conductor

我们还为 Mac OS X 和 Linux 提供了 官方二进制发行版。Linux 二进制文件使用 musl-libcrust-musl-builder 静态链接,因此它们应该适用于任何 Linux 发行版,包括常规发行版和像 Alpine 这样的精简发行版。只需解压缩二进制文件并将它们复制到您想要的位置。

由于与 MacPorts 和 OpenSSL 的问题,Mac 二进制文件有些实验性。如果它们无法工作,请提交错误报告并尝试使用 cargo 安装。

尝试使用

使用 conductor 创建新应用程序,并列出相关的 Git 仓库

$ conductor new myapp
$ cd myapp
$ conductor repo list
rails_hello               https://github.com/faradayio/rails_hello.git

在本地上检出镜像的源代码

$ conductor repo clone rails_hello
$ conductor repo list
rails_hello               https://github.com/faradayio/rails_hello.git
  Cloned at src/rails_hello

启动您的应用程序

$ conductor up
Starting myapp_db_1
Starting myapp_web_1

您会注意到 src/rails_hello 目录已挂载到 /usr/src/app,位于 myapp_web_1 pod 内,这样您就可以在本地进行更改并测试它们。

frontend pod的web容器中运行命令以创建数据库

$ conductor exec frontend web rake db:create
Created database 'myapp_development'
Created database 'db/test.sqlite3'

我们还可以将常用命令打包到它们自己的独立“任务”pod中,按需运行

$ conductor run migrate
Creating myapp_migrate_1
Attaching to myapp_migrate_1
myapp_migrate_1 exited with code 0

您应该能够通过https://127.0.0.1:3000/访问您的应用程序。

您可能还会注意到,由于myapp_migrate_1myapp_web_1基于相同的底层Git仓库,因此它也在适当的位置挂载了src/rails_hello。如果您在主机系统上更改源代码,它将自动出现在两个容器中。

我们可以运行特定于容器的单元测试,这些测试由容器指定,这样您就可以调用您选择的任何单元测试框架

$ conductor test frontend web

并且我们可以使用可配置的shell访问单个容器

$ conductor shell frontend web
root@21bbbb41ad4a:/usr/src/app#

testshell这样的顶级便利命令,使得在没有了解单个容器如何工作的前提下执行标准开发任务变得容易得多。

使用方法

要了解如何使用conductor,请运行conductor --help(在开发过程中可能比此README最新)

conductor: Manage large, multi-pod docker-compose apps

Usage:
  conductor [options] new <name>
  conductor [options] build
  conductor [options] pull
  conductor [options] up
  conductor [options] stop
  conductor [options] run <pod>
  conductor [options] exec [exec options] <pod> <service> <command> [--] [<args>..]
  conductor [options] shell [exec options] <pod> <service>
  conductor [options] test <pod> <service>
  conductor [options] repo list
  conductor [options] repo clone <repo>
  conductor (--help | --version)

Commands:
  new               Create a directory containing a new sample project
  build             Build images for the containers associated with this project
  pull              Pull Docker images used by project
  up                Run project
  stop              Stop all containers associated with project
  run               Run a specific pod as a one-shot task
  exec              Run a command inside a container
  shell             Run an interactive shell inside a running container
  test              Run the tests associated with a service, if any
  repo list         List all git repository aliases and URLs
  repo clone        Clone a git repository using its short alias and mount it
                    into the containers that use it

Arguments:
  <name>            The name of the project directory to create
  <repo>            Short alias for a repo (see `repo list`)
  <pod>             The name of a pod specified in `pods/`
  <service>         The name of a service in a pod

Exec options:
  -d                Run command detached in background
  --privileged      Run a command with elevated privileges
  --user <user>     User as which to run a command
  -T                Do not allocate a TTY when running a command

General options:
  -h, --help        Show this message
  --version         Show the version of conductor
  -p, --project-name <project_name>
                    The name of this project.  Defaults to the current
                    directory name.
  --override=<override>
                    Use overrides from the specified subdirectory of
                    `pods/overrides` [default: development]
  --default-tags=<tag_file>
                    A list of tagged image names, one per line, to
                    be used as defaults for images

Run conductor in a directory containing a `pods` subdirectory.  For more
information, see https://github.com/faradayio/conductor.

什么是pod?

"pod"是一组紧密相连的容器,它们总是一起部署。Kubernetes将

pod(如鲸鱼群或豌豆荚)是一组一个或多个容器(例如Docker容器)、这些容器的共享存储以及有关如何运行容器的选项。Pod总是位于同一位置、共同调度,并在共享上下文中运行。Pod代表特定应用程序的“逻辑主机”——它包含一个或多个相对紧密耦合的应用程序容器——在容器之前的世界中,它们将运行在相同的物理或虚拟机上。

如果您使用Amazon的ECS,pod对应于ECS的“任务”或“服务”。如果您使用Docker Swarm,pod对应于一个包含多个服务并且您总是作为一个单元启动的docker-compose.yml文件。

Pod通常使用常规DNS查找或服务发现与其他Pod通信。如果一个Pod接受外部网络连接,它通常会通过负载均衡器来完成。

项目格式

有关完整示例,请参阅examples/hello

hello
└── pods
    ├── common.env
    ├── frontend.yml
    └── overrides
        ├── development
        │   └── common.env
        ├── production
        │   ├── common.env
        │   └── frontend.yml
        └── test
            └── common.env

开发注意事项

欢迎提交拉取请求!如果您不确定您的想法是否符合项目的愿景,请随时提交一个问题并询问我们。

设置工具

在处理此代码时,我们建议安装以下支持工具

cargo install rustfmt
cargo install cargo-watch

我们还建议安装夜间Rust,它提供更好的错误消息,并支持使用Clippy提供的额外警告

rustup update nightly
rustup override set nightly

如果nightly生成构建错误,您可能需要将编译器和库更新到最新版本

rustup update nightly
cargo update

如果仍然不起作用,请尝试使用stable

rustup override set stable

如果您正在使用nightly,请在编辑时在终端中运行以下命令

cargo watch "test --no-default-features --features unstable --color=always" \
    "build --no-default-features --features unstable --color=always"

如果您正在使用stable,请省略--no-default-features --features unstable

cargo watch "test --color=always" "build --color=always"

在提交代码之前,请运行

cargo fmt

这将自动根据项目的约定重新格式化您的代码。我们使用Travis CI来验证是否已运行cargo fmt,并且项目无警告构建。如果失败,不要担心——只需继续修复您的拉取请求,或者向我们寻求帮助。

官方版本

要发布官方版本,您需要是维护者,并且需要拥有 cargo publish 权限。如果是这种情况,首先编辑 Cargo.toml 来增加版本号,然后使用以下命令重新生成 Cargo.lock

cargo build

使用以下格式的提交信息提交版本:

v<VERSION>: <SUMMARY>

<RELEASE NOTES>

然后运行

git tag v$VERSION
git push; git push --tags
cargo publish

这将使用 Travis CI 重新构建官方二进制文件,并将新版本的 crate 上传到 crates.io

依赖项

约 16MB
约 342K SLoC