寻找一种方便的方法来启动和停止使用docker-compose的应用程序

时间:2016-08-20 01:24:49

标签: docker docker-compose

对于我的每个项目,我都配置了一个由几个容器组成的docker开发环境。我经常在项目之间切换。这需要停止一组容器并启动另一组容器。我目前这样做:

$ cd project1
$ docker-compose stop
$ cd ../project2
$ docker-compose up -d

所以我需要记住当前正在运行的应用程序cd到其docker-compose.yml所在的目录,停止它,然后记住我要运行的其他项目,cd那里然后开始吧。

有更好的方法吗?就像一个记住我拥有多个容器应用程序的实用程序一样,可以停止当前正在运行的应用程序并运行另一个而无需手动cddocker-compose

(顺便说一下,托管单个应用程序部分的一组容器的正确术语是什么?)

3 个答案:

答案 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

source

使用

只需将project_paths设置为项目的文件夹即可。如果你想要结束它们,请使用CTRL + c

你当然可以超越它,使用一个守护进程并尝试启动/停止其中一些给出“名称”等等,但我想作为脚手架的起点,那应该是enaugh