私はC++プロジェクトのビルドをドッカーのイメージに移動する作業を進めています。イメージはJenkinsの仕事によって構築され、プッシュされます。ドッカーになる前に、私はジェンキンスのビルドをスピードアップするためにccacheを多用しました。特にビルドの場合はほとんど変更がありませんでした。ドッカーの問題は、ビルドが分離された環境で実行されるため、もはやccacheのメリットがないことです。一時的なコンテナの内部にccacheを利用しながらビルドする方法はありますか?ドッカーの内部にビルドするときのccacheの使用
3
A
答えて
4
引き続き、ccacheをビルドと組み合わせて使用できます。
データは、次のコマンドを使用してビルド/コンパイル間で保持できるようにするためにData Volumeを作成します。
$ docker create -v /mnt/ccache:/ccache --name ccache debian
は、その後、あなたのコンテナを作成する「マウント」--volumes-from
コマンドラインオプションを使用して、上記で作成したデータコンテナ。
$ docker run -e CCACHE_DIR=/ccache --volumes-from ccache -it debian
今、あなたは、Debianのコンテナの殻になるだろうし、必要なアプリケーションやテストccacheをインストールすることができます。
[email protected]:/# apt-get update && apt-get install -y gcc ccache
は今、この時点で、あなたはキャッシュをチェックすることができ、それは次のようになります
[email protected]:/# ccache -s
cache directory /ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 1.0 Gbytes
データボリュームは維持されるため、コンテナが終了してもキャッシュはそのまま残ります。ボリュームをマウントする(および-e ENV変数を指定する)将来のビルドでは、キャッシュが利用されます。
は次に、簡単なアプリを作成し、それを実行し、再度キャッシュをチェック:
[email protected]:/# cat > foo.c << __EOF__
int main(int argc, char **argv)
{
return 0;
}
__EOF__
[email protected]:/# PATH=/usr/lib/ccache:$PATH gcc -o foo.o -c foo.c
[email protected]:/# ccache -s
cache directory /ccache
cache hit (direct) 1
cache hit (preprocessed) 0
cache miss 1
files in cache 2
cache size 8 Kbytes
max cache size 1.0 Gbytes
あなたはキャッシュが今移入され見ることができ、さらにそれのためにパフォーマンスが向上します構築します。
データ量は維持されるため、コンテナが終了した後もキャッシュはまだ存在します。ボリュームをマウントする(そして-e ENV
変数を指定する)将来のビルドでは、キャッシュが利用されます。
関連する問題
- 1. CMake(distcc、ccache)でのコンパイラプレフィックスコマンドの使用
- 2. ドッカーの内部構造/アーキテクチャ
- 3. makeでccacheを使用
- 4. Sonatype Nexus3ドッカーの画像 - 内部ドッカーのリポジトリを設定する方法
- 5. TFSビルドからのドッカー画像のビルドと実行
- 6. ドッカー:コンテナの内部でプロセスを再起動するには?
- 7. ドッカー用のウィンドウを使用してボリュームをマウントするときに空のディレクトリ
- 8. どのキャッシュアルゴリズムがccacheで使用されていますか?
- 9. プッシュイメージとシステムそのものをビルドする、ドッカー
- 10. 内部テスト用にビルドを選択できません
- 11. boost spiritを使用しているときの内部コンパイルエラーx12
- 12. バーチャルボックス内のドッカー
- 13. spotify mavenプラグインとドッカーで使用したときのフィットネスエラー
- 14. ディレクトリの作成時にWindowsドッカー画像のビルドがハングアップする
- 15. ビルド時のドッカーの名前とその取得方法
- 16. ドッカー内のmysqlに接続
- 17. ドッカーのビルドが遅い理由
- 18. 外部リダイレクトと内部書き換えを使用したmod_rewrite
- 19. 500 .htaccessでmod_rewriteを使用したときの内部エラー
- 20. ドッカー内のリモートマシンでPyCharmのリモートデバッガを使用
- 21. ドッカー・コンテナ内のDockerfileを使用したcronジョブの作成
- 22. iPadアプリの内部使用
- 23. レポートの内部キャンペーンと外部キャンペーンのプロパティを使用
- 24. ドッカーの.envファイル内で環境変数を使用するには?
- 25. jqueryを使用しているときにjavascriptの内部メソッド呼び出し
- 26. IntelliJを使用して.jarをビルドするときのエラー?
- 27. シングルトンサービスの内部でNgZoneを使用することはできますか?
- 28. .NETプロジェクトをビルドするときに外部ファイルをマージする
- 29. なぜドッカーは、私は(Boot2Docker付き)MacOSXの上ドッカーを使用してい
- 30. ビルドを共有する名前付きドッカーのボリュームが更新されない
トラブルがある(と私はちょうど誤解される可能性があります)、私は私のビルドの結果としてイメージを作成したいのです:
このブログの記事は、それを説明するのは良い仕事をしていません。この方法では、コンテナ内でccacheを使用できますが、ドッキング・ビルド・コマンドでは使用できません。 –
'ROCK'コマンドを使ってDockerfileに' ccache'を追加するか、Docker Composeを使って 'docker-compose build'の間にボリュームをマウント&使用することができます。 'docker commit'を使ってコンテナを画像に保存することもできます。 –
ええ、私は上記の「ドッカーコミット」を組み合わせるのがおそらく最善のルートだと思います。ありがとうございました。 –