2017-03-31 15 views
1

私はバイナリファイルにコンパイルし、そのバイナリファイルを実行するプロジェクトでいくつかのREST APIを公開しています。異なるコンテナでコンパイルと実行

プロジェクトをコンパイルするには、コンパイラと実行可能ファイルを生成するために必要なすべてのライブラリを持つドッカー画像Aが必要です。実行可能ファイル(つまり、サービスをホストする)を実行するには、はるかに小さなイメージB(基本的なLinuxディストリビューション、コンパイラの必要はありません)を手放すことができます。

ドッカーをどのように使っているのですか?

+0

で容器に存在しますそれをビルドしてから実行可能ファイルをコピーしてイメージをビルドしますが、Dockerはそれを一段階で行うことはできません – Julian

+1

ビルドチェーンによって異なります。あなたが他の外部ツールなしでそれを行うなら..私は、ソースコードがあるマウントされたホストボリュームに行くだろう、ビルドを実行し、実行イメージにバイナリをバックアップします。 – opHASnoNAME

答えて

1
このシナリオのための私の考え方は次の2個の基本イメージ準備することができるということです

:として、

  • 第一1、コンパイラが含まれており、あなたの実行可能ファイルを構築するためのすべてのLIBSをbase-image:build
  • 第二1を、それを呼び出します

    base-image:runtime

それを呼び出してから、2つのステップにビルドプロセスを破る、配達にあなたの最終的なイメージを構築するための基本イメージ

  • 手順1:実行可能ファイルをbase-image:build内に作成し、NFSなどの場所や、後で使用するためにフェッチできるレジストリなどの場所にexecutableを置きます。
  • ステップ2:DockerfileFROM base-image:runtime、ステップ1で作成した場所からはdocker build、次にdocker pushはリリース用にレジストリにアーティファクト/実行ファイルを取得します。

これは

1
mkdir local_dir 
docker run -dv $PWD/local_dir:/mnt BUILD_CONTAINER 

コンパイルコード:-)参考にし、容器内の/ mntにそれを救うことができる希望。あなたのホストファイルシステムのlocal_dirに書き込まれ、コンテナが破棄された後も保持されます。

Dockerfileを作成し、新しいバイナリにコピーしてビルドするステップを追加する必要があります。しかし、例の酒...

docker run -dv $PWD/local_dir:/mnt PROD_CONTAINER 

あなたのビン、およびlocal_dirで他のすべてのために、あなたがボリュームにソースコードの入った容器を実行する簡単なスクリプトを使用することができます/mnt/

関連する問題