2016-04-25 58 views
0

我正在实施一个docker容器来编译(构建)我的C++代码。我的代码支持的平台是Windows,Linux和Mac OSX。将您的应用程序添加到Docker映像

我在我的Mac机上使用clang来编译代码; Linux上的gcc和Windows上的Microsoft编译器(cl)。这个想法是创建一个Docker容器,并在Windows机器本身(Docker容器内)执行构建(包括Linux和Mac),这样我就不必将代码推到git上;然后从我的Mac机器上拉出来,然后建立等等。

我用来执行Mac版本的图像(因为我在Mac OSX上使用clang)是https://hub.docker.com/r/rsmmr/clang/

我想为此测试目的添加一个可执行文件。它被称为'testapp'。

所以图像应该包含以下组件: Base OS + Clang + testapp。

如何添加我的可执行文件'testapp'(比如:application/utlity)到这张图片'rsmmr/clang'(我从dockerhub中提取)?

我是否通过Dockerfile来做到这一点(如何?)? 有没有其他办法可以达到同样的效果?

回答

0

解决此问题的一个简单方法是将您的源代码/二进制测试程序安装到clang图像上。

为了证明这一点,我创建了一个testapp.cc自己和它看起来像这样:

[[email protected] add_application_docker_image]$ cat testapp.cc 
#include <iostream> 

using namespace std; 

int main() 
{ 
    cout << "Hello World!" << endl; 
    return 0; 
} 
[[email protected] add_application_docker_image]$ 

然后,通过我的本地目录到容器加上运行这样的编译命令启动了rsmmr/clang容器:

[[email protected] add_application_docker_image]$ docker run -v $(pwd):/mnt -it rsmmr/clang /opt/llvm/bin/clang++ --std=c++11 --stdlib=libc++ /mnt/testapp.cc -o /mnt/a.out 
[[email protected] add_application_docker_image]$ 

在此之后,a.out将在您的本地目录中(因为它被挂载到容器上)。

[[email protected] add_application_docker_image]$ ls 
a.out testapp.cc 
[[email protected] add_application_docker_image]$ 

如果你想在容器内执行该二进制文件,你也可以这样做。

[[email protected] add_application_docker_image]$ docker run -v $(pwd):/mnt -it rsmmr/clang /mnt/a.out 
Hello World! 
[[email protected] add_application_docker_image]$ 

你也可以用其他编译器做类似的事情。我没有一个Windows机器,但它应该工作:) 是这样的,你想要的东西?

让我知道它是如何去的。

感谢,

  • Anoop
+0

感谢您的投入:) – vintrojan

+0

我想要的是'a.out'成为图像的一部分。我准备好了'a.out'。现在,我想将a.out与此Docker镜像整合在一起;这样,当我将这个图像带到另一台机器上并运行这个图像来创建一个容器时,我在这个容器中有a.out。 – vintrojan

0

如果你愿意,你可以通过创建自己的Dockerfile做到这一点,使自己的形象。

FROM install-clang 

启动Dockerfile然后添加你所需要的。

COPY a.out directoryinthecontainer/ 

如果你需要创建图像的过程中要采取进一步行动,使用

RUN apt-get morepackage && execute mycommand && unpack somefile.tar 

你明白了:这可以是任何操作系统命令你喜欢​​。 如果你想要一个应用程序来运行为你的新形象的核心部分添加

ENTRYPOINT ["directoryinthecontainer/a.out", "-myoptions"] 

CMD ["directoryinthecontainer/a.out", "-myoptions"] 

有细微的差别,当你将使用入口点,RUN或CMD,这将取决于你的用例。

查看Dockerfile Reference找出哪一个可以做你想做的。

编辑:我想我会澄清下一步:“”

使用您的Dockerfile与

docker build -t myrepo/myimage:mytag . 

创建自己的形象,不要忘了, (句点)在命令行的末尾!

从此,您可以使用自己的图像来创建容器,该容器将完成原始CLANG和所有其他功能的所有功能。这是我最喜欢的功能之一! :)

+0

感谢您的输入:)。我会进一步探索。 – vintrojan

相关问题