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

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

为了编译这个项目,我需要docker image A,它包含编译器和生成可执行文件所需的所有库。 要运行可执行文件(即主机服务),我可以得到一个更小的图像B(只需基本的Linux发行版,不需要编译器)。

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

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

  • 第一个包含编译器和用于构build可执行文件的所有库,称之为base-image:build
  • 第二个作为构build最终映像的基础映像,将其称为base-image:runtime

然后将构build过程分成两步:

  • 第1步:在base-image:build内build立你的可执行文件,然后把你的executable放到某个地方,比如NFS或者任何registry,以便以后使用。
  • 第2步:编写你的Dockerfile ,其中FROM base-image:runtime ,获取您的工件/可执行文件从步骤1生成的任何地方, docker build您的交付图像,然后docker push送到您的registry发布。

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

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

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

你现在应该写一个Dockerfile并添加一个步骤来复制新的二进制文件,然后构build。 但是,例如,为了…

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

你的bin和local_dir中的所有东西都会驻留在/mnt/