编译并在不同的容器中运行

时间:2017-03-31 13:03:44

标签: docker

我有一个编译成二进制文件的项目,并且运行该二进制文件会公开一些REST API。

要编译项目,我需要docker image A,它包含编译器以及生成可执行文件所需的所有库。要运行可执行文件(即托管服务),我可以使用更小的图像B(只需基本的Linux发行版,不需要编译器)。

如何使用docker是这样的情况?

2 个答案:

答案 0 :(得分:1)

我对这种情况的想法是你可以准备两个基本图像:

  • 第一个,包括编译器和用于构建可执行文件的所有库,称之为base-image:build
  • 第二个,作为构建最终图像以进行投放的基本图像,将其称为base-image:runtime

然后将构建过程分为两个步骤:

  • 步骤1:在base-image:build内构建您的可执行文件,然后将您的executable放到某个地方,例如NFS或任何可以提取它以供以后使用的注册表;
  • 第2步:写下Dockerfile FROM base-image:runtime,从第1步生成的任何地方获取工件/可执行文件,docker build您的投放图片,然后docker push到您的注册表发布。

希望这可能会有所帮助: - )

答案 1 :(得分:1)

mkdir local_dir
docker run -dv $PWD/local_dir:/mnt BUILD_CONTAINER

编译代码并将其保存到容器中的/ mnt。它将被写入主机文件系统的local_dir,并在容器被销毁后继续存在。

您现在应该编写一个Dockerfile并在新二进制文件中添加要复制的步骤,然后构建。但举例来说......

docker run -dv $PWD/local_dir:/mnt PROD_CONTAINER 

您的bin以及local_dir中的所有其他内容将位于/mnt/

的容器中