对于我的每个项目,我都配置了一个由几个容器组成的docker开发环境。我经常在项目之间切换。这需要停止一组容器并启动另一组容器。我目前这样做:
$ cd project1
$ docker-compose stop
$ cd ../project2
$ docker-compose up -d
所以我需要记住当前正在运行的应用程序cd
到其docker-compose.yml
所在的目录,停止它,然后记住我要运行的其他项目,cd
那里然后开始吧。
有更好的方法吗?就像一个记住我拥有多个容器应用程序的实用程序一样,可以停止当前正在运行的应用程序并运行另一个而无需手动cd
和docker-compose
?
(顺便说一下,托管单个应用程序部分的一组容器的正确术语是什么?)
答案 0 :(得分:2)
希望docker-compose-ui将帮助您管理应用程序。
答案 1 :(得分:1)
我认为这里的真正问题是:
这需要停止一组容器并启动另一组容器。
您不应该停止一个项目来启动另一个项目。
我根本不会映射到任何端口,而不是映射到相同的主机端口。然后使用脚本查找容器的IP,并直接连接到该容器:
#!/bin/bash
cip=$(docker inspect -f '{{range $key, $value := .NetworkSettings.Networks}} {{ $value.IPAddress}} {{end}}' $1)
这会查找容器ip。将其与命令组合以打开URL:
url=http://cip:8080/
xdg-open $url || open $url
这一切都可以让您运行应用程序而无需映射任何主机端口。当主机端口不存在时,您不必停止其他项目。
答案 2 :(得分:0)
如果你的红宝石证明了一点,你可以使用脚手架。
使用线程的准系统示例(在没有一个进程的情况下启动不同的docker-compose会话,然后将它们全部停在一起)
require 'docker-compose'
threads = []
project_paths = %w(/project/path1 /project/path2 /project/path3 /project/path)
project_paths.each do |path|
threads.push Docker::Compose::Session.new(dir:compose_base_path1)
end
begin
threads.each do |thread|
thread.join
end
rescue SystemExit, Interrupt
threads.each do |thread|
thread.kill
end
rescue Exception => e
handle_exception e
end
使用
只需将project_paths设置为项目的文件夹即可。如果你想要结束它们,请使用CTRL + c
你当然可以超越它,使用一个守护进程并尝试启动/停止其中一些给出“名称”等等,但我想作为脚手架的起点,那应该是enaugh