使用旧的 Rust 2015
0.0.15 |
|
---|---|
0.0.14 |
|
0.0.10 |
|
0.0.1 |
|
#20 in #docker-compose
33 每月下载量
170KB
3.5K SLoC
编排大型的多 pod docker-compose 应用
该项目将很快重命名。 请保持关注;如果幸运的话,我们将很快发布实际版本。
这是一个使用 compose_yml
库正在进行中的工作。它是使用新的 docker-compose.yml
版本 2 格式和 Rust 对我们内部、临时 工具的重新实现。
这是做什么用的?
- 您的应用程序包含多个
docker-compose.yml
文件吗? - 您的应用程序包含永久运行和一次性任务的混合容器吗?
- 您的应用程序在多个机器集群上运行吗?
- 您的应用程序的各个组件需要它们自己的负载均衡器吗?
- 在开发模式下运行时,您需要用本地容器替换第三方服务吗?
如果您对这些问题的回答是“是”,那么 conductor
可能适合您。它为复杂的 docker-compose
应用提供开发和部署工具,遵循 约定优于配置 的哲学。
安装
要安装,我们建议使用 rustup
和 cargo
curl https://sh.rustup.rs -sSf | sh
cargo install conductor
我们还为 Mac OS X 和 Linux 提供了 官方二进制发行版。Linux 二进制文件使用 musl-libc 和 rust-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_1
与myapp_web_1
基于相同的底层Git仓库,因此它也在适当的位置挂载了src/rails_hello
。如果您在主机系统上更改源代码,它将自动出现在两个容器中。
我们可以运行特定于容器的单元测试,这些测试由容器指定,这样您就可以调用您选择的任何单元测试框架
$ conductor test frontend web
并且我们可以使用可配置的shell访问单个容器
$ conductor shell frontend web
root@21bbbb41ad4a:/usr/src/app#
像test
和shell
这样的顶级便利命令,使得在没有了解单个容器如何工作的前提下执行标准开发任务变得容易得多。
使用方法
要了解如何使用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对应于一个包含多个服务并且您总是作为一个单元启动的 Pod通常使用常规DNS查找或服务发现与其他Pod通信。如果一个Pod接受外部网络连接,它通常会通过负载均衡器来完成。 有关完整示例,请参阅 欢迎提交拉取请求!如果您不确定您的想法是否符合项目的愿景,请随时提交一个问题并询问我们。 在处理此代码时,我们建议安装以下支持工具 我们还建议安装夜间Rust,它提供更好的错误消息,并支持使用Clippy提供的额外警告 如果 如果仍然不起作用,请尝试使用 如果您正在使用 如果您正在使用 在提交代码之前,请运行 这将自动根据项目的约定重新格式化您的代码。我们使用Travis CI来验证是否已运行 要发布官方版本,您需要是维护者,并且需要拥有 使用以下格式的提交信息提交版本: 然后运行 这将使用 Travis CI 重新构建官方二进制文件,并将新版本的 crate 上传到 crates.io。
docker-compose.yml
文件。项目格式
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
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
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
依赖项
约 16MB
约 342K SLoC