编译并在不同的容器中运行
我有一个编译为二进制文件的项目,运行该二进制文件公开了一些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/