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

为了编写通过端口通过networking暴露的服务( -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 

组成多个命令

现在让我们说,我有这样的服务,我怎么把它们组合起来,使它们都可以在另一个容器中使用(例如在一个ci上运行)?

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

那么经常调用一个命令的开销呢?

只要configuration项允许你访问docker引擎(通过套接字或端口),它是否应该在容器中运行也不重要。

如果您正在使用容器制作和运行项目任务,则可能对dobi感兴趣。 这是一个devise来像你所描述的东西的工具。 您可以定义用于构build项目的图像,容器,坐骑等。

你可以像运行一个make目标一样运行每个任务( dobi <taskname> )。 你可以有一个任务gcc,protoc,铛等