0

我正在实现一个 docker 容器来编译(构建)我的 C++ 代码。我的代码支持的平台是 Windows、Linux 和 Mac OSX。

我在我的 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/

我想为此图像添加一个可执行文件,用于测试目的。它被称为“测试应用程序”。

所以镜像应该有以下组件:Base OS + Clang + testapp。

如何将我的可执行文件“testapp”(比如:应用程序/实用程序)添加到这个图像“rsmmr/clang”(我从 dockerhub 中提取)?

我是否通过 Dockerfile 执行此操作(如何?)?有没有其他方法可以完成同样的事情?

4

2 回答 2

0

如果您愿意,您可以通过创建自己的 Dockerfile 并制作自己的映像来做到这一点。

启动你的 Dockerfile

FROM install-clang

然后添加您需要的内容。

COPY a.out directoryinthecontainer/

如果您需要在创建映像期间采取进一步措施,请使用

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

你明白了:这些可以是你喜欢的任何操作系统命令。如果您希望该应用程序作为新图像的核心部分运行,请添加

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

或者

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

使用 ENTRYPOINT、RUN 或 CMD 时存在细微差别,这取决于您的用例。

请参阅Dockerfile 参考以了解哪一个可以满足您的需求。

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

使用你的 Dockerfile 创建你自己的镜像

docker build -t myrepo/myimage:mytag .

不要忘记那个'。(句点)在命令行的末尾!

从那时起,您可以使用自己的映像创建一个容器,该容器将完成原始 CLANG 的所有操作以及您的附加功能。这是我最喜欢的功能之一!:)

于 2016-04-25T08:12:47.880 回答
0

解决此问题的一种简单方法是将您的源/二进制 testapp 安装到clang图像上。

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

[anovil@ubuntu-anovil add_application_docker_image]$ cat testapp.cc 
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}
[anovil@ubuntu-anovil add_application_docker_image]$ 

然后,rsmmr/clang通过将我的本地目录传递给容器并运行如下编译命令来启动容器:

[anovil@ubuntu-anovil 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
[anovil@ubuntu-anovil add_application_docker_image]$ 

在此之后,a.out将在您的本地目录中(因为它已安装到容器中)。

[anovil@ubuntu-anovil add_application_docker_image]$ ls
a.out  testapp.cc
[anovil@ubuntu-anovil add_application_docker_image]$ 

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

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

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

让我知道情况如何。

谢谢,

  • 阿努普
于 2016-04-25T07:52:37.843 回答