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

什么';在docker环境中使用命令行应用程序的最佳方式是什么?,docker,compilation,continuous-integration,docker-compose,Docker,Compilation,Continuous Integration,Docker Compose,对于通过端口(-p 5000:5000)在网络上公开的组合服务,docker提供了各种帮助(例如)。 我要寻找的是一种在docker容器中作为服务提供某些二进制应用程序的方法。例如: 编译器(如gcc) 生成器(例如,用于协议缓冲区) 运行单个命令 我目前的方法是使用一个小型shell脚本来传递参数,并负责映射当前目录: runbox(){ current_dir=${PWD##*/} docker run --rm -it \ -v ${PWD}:/home/dev/${

对于通过端口(
-p 5000:5000
)在网络上公开的组合服务,docker提供了各种帮助(例如)。
我要寻找的是一种在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上运行)


频繁调用命令的开销如何?

只要CI允许您访问docker引擎(通过套接字或端口),它是否在容器中运行就不重要了

如果您正在使用make并从容器中运行项目任务,您可能会对以下内容感兴趣。这是一个为你所描述的东西而设计的工具。您可以定义用于构建项目的图像、容器、挂载等


您可以像运行make目标一样运行每个任务(
dobi
)。对于gcc、protoc、clang等,您可以有一个任务。

只要CI允许您访问docker引擎(通过套接字或端口),它是否在容器中运行就不重要了

如果您正在使用make并从容器中运行项目任务,您可能会对以下内容感兴趣。这是一个为你所描述的东西而设计的工具。您可以定义用于构建项目的图像、容器、挂载等

您可以像运行make目标一样运行每个任务(
dobi
)。对于gcc、protoc、clang等,您可以有一个任务

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