0

C++ のコードをコンパイル (ビルド) するために docker コンテナーを実装しています。私のコードでサポートされているプラ​​ットフォームは、Windows、Linux、および Mac OSX です。

Mac マシンで clang を使用してコードをコンパイルしています。Linux では gcc、Windows では Microsoft コンパイラ (cl)。アイデアは、コードを git にプッシュする必要がないように、Docker コンテナーを作成し、Windows マシン自体 (Docker コンテナー内) で (Linux と Mac の両方の) ビルドを実行することです。次に、Mac マシンからプルしてビルドします。

Mac ビルドを実行するために使用しているイメージ (Mac OSX で clang を使用しているため) はhttps://hub.docker.com/r/rsmmr/clang/です。

テスト目的で、このイメージに実行可能ファイルを追加したいと考えています。これは「testapp」と呼ばれます。

したがって、イメージには次のコンポーネントが含まれている必要があります: ベース OS + Clang + testapp。

実行可能「testapp」(たとえば、アプリケーション/ユーティリティ) をこのイメージ「rsmmr/clang」(dockerhub から取得) に追加するにはどうすればよいですか?

これは Dockerfile 経由で行うのですか (どのように?)? 同じことを達成する他の方法はありますか?

4

2 に答える 2

0

これを解決する簡単な方法の 1 つは、ソース/バイナリ 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 に答える
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 のすべてに加えて追加機能を実行するコンテナーを作成できます。これは私のお気に入りの機能の 1 つです。:)

于 2016-04-25T08:12:47.880 に答える