我有一个编译为二进制文件的项目,运行该二进制文件公开了一些REST API。编译并运行在不同的容器
要编译项目,我需要docker image A,它有编译器和生成可执行文件所需的所有库。要运行可执行文件(即托管服务),我可以使用更小的映像B(只需基本的Linux发行版,不需要编译器)。
如何使用码头工人是这样的情况?
我有一个编译为二进制文件的项目,运行该二进制文件公开了一些REST API。编译并运行在不同的容器
要编译项目,我需要docker image A,它有编译器和生成可执行文件所需的所有库。要运行可执行文件(即托管服务),我可以使用更小的映像B(只需基本的Linux发行版,不需要编译器)。
如何使用码头工人是这样的情况?
我对这种情况下的想法是,你可以准备两个基本的图像:
base-image:build
base-image:runtime
然后打破你的构建过程分为两个步骤:
base-image:build
内部构建您的可执行文件,然后将您的executable
放到某个位置,例如NFS或任何注册表,以便以后使用它们;Dockerfile
其中FROM base-image:runtime
,从您的投递图像生成的任何地方获取您的神器/可执行文件,然后将docker push
发送到您的注册表以供发布。希望这可帮助:-)
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/
居于容器中您可以使用运行的源代码容器的容积一个简单的脚本构建它,然后复制可执行文件并构建映像,但Docker无法在一步之内完成此操作。 – Julian
取决于您的构建链。如果你没有使用任何其他外部工具,我会使用源代码所在的主机卷,运行构建并将二进制文件备份到运行映像中。 – opHASnoNAME