我有一个编译成二进制文件的项目,并且运行该二进制文件会公开一些REST API。
要编译项目,我需要docker image A,它包含编译器以及生成可执行文件所需的所有库。要运行可执行文件(即托管服务),我可以使用更小的图像B(只需基本的Linux发行版,不需要编译器)。
如何使用docker是这样的情况?
答案 0 :(得分:1)
我对这种情况的想法是你可以准备两个基本图像:
base-image:build
base-image:runtime
然后将构建过程分为两个步骤:
base-image:build
内构建您的可执行文件,然后将您的executable
放到某个地方,例如NFS或任何可以提取它以供以后使用的注册表; 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/