LoginSignup
40
38

More than 5 years have passed since last update.

dockerをビルド環境として使う

Last updated at Posted at 2015-09-06

dockerコンテナにコンパイラなどを入れ、更にそのコンテナにビルド対象のソースコードをマウントすることで、docker自体をビルド環境として使うことができる。

例えばC#のビルドであれば、monoのコンテナ(monoは.NETのオープンソース実装。monoのmsbuildはxbuildになる)を使って、PATHの通ったところに以下の様なシェルスクリプトを置けば、ビルドコマンドに早変わりする。

/usr/local/bin/xbuild
#!/bin/sh
eval "$(docker-machine env default)"
docker run -it --rm -v `pwd`:/src --workdir=/src --entrypoint=xbuild mono $*

このスクリプトの前提は以下のとおり。

  • docker-machine env defaultが構築済みであること
  • カレントディレクトリをdockerデーモンも参照できる状態にあること
    • WindowsとMacの場合、docker-machine create -d virtualbox defaultで作成すると、それが実現される。

ポイントは以下のとおり。

  • カレントディレクトリをそのままマウントする。
  • --workdirで、カレントディレクトリを指定する。
  • --entrypoint=xbuildで、ビルドコマンドを指定しておく。
  • 最後に$*を付けることで、このシェルスクリプトの引数を、そのまま--entrypointで指定したビルドコマンドの引数にする。
  • -it --rmを付けることで、実行後のコンテナはすぐに削除される。

すると、以下のようにビルドができる。

$ xbuild ./TargetSolution.sln

コンテナ内で使うと、一切他のツールの依存関係を気にせず使えるので、dockerは正義だなと思う。
そのうち、ビルド環境になるコンテナだけを集めたパッケージマネージャが登場するんじゃないかな。

40
38
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
38