2016-04-25 49 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

相關問題