在docker环境中使用命令行应用程序的最佳方法是什么?

时间:2016-07-25 12:10:31

标签: docker compilation continuous-integration docker-compose

对于通过端口(-p 5000:5000)在网络上公开的作曲服务,docker提供各种帮助(例如docker-compose)。
我正在寻找的是一种在docker容器中提供某些二进制应用程序作为服务的方法。例如:

  • 编译器(例如gcc)
  • 生成器(例如用于协议缓冲区)
  • ...

运行单个命令

我目前的方法是使用一个小的shell脚本来传递参数,并负责映射当前目录:

runbox(){
  current_dir=${PWD##*/}
  docker run --rm -it \
    -v ${PWD}:/home/dev/${current_dir} \
    -w /home/dev/${current_dir} \
    box:latest \
    /bin/bash -c "$@"
}

使用它看起来像这样:

runbox "g++ --version"

与本地运行相比:

g++ --version

组成多个命令

现在假设我已经 n 这样的服务,我如何组合它们所有这些服务都可以在另一个容器中使用(例如在ci上运行) )?

                             Services running
                             in Docker containers
+---------------------+
|                     |       +---------+
| CI Docker Container +-----> |  gcc    |
|                     |       +---------+
|                     |
|     make            +-----> +---------+
|                     |       |  protoc |
|                     |       +---------+
+----------------+----+
                 |            +---------+
                 +----------> |  clang  |
                              +---------+

经常调用命令非常的开销是多少?

1 个答案:

答案 0 :(得分:0)

只要CI允许您访问docker引擎(通过套接字或端口),无论它是否在容器中运行都无关紧要。

如果您正在使用make并运行容器中的项目任务,那么您可能会对dobi感兴趣。它是一个专为你所描述的东西而设计的工具。您可以定义用于构建项目的图像,容器,安装等。

您可以像运行make target(dobi <taskname>)一样运行每个任务。你可以为gcc,protoc,clang等做一个任务。