build nginx rpm on Docker
nginxのsrc rpmを取得してrpmbuildするだけのDockerfileを書いてみた。
Docker知ってたら1時間ちょいぐらいあれば出来ると思うのでビルド手段としてはオススメかな。
今回はビルド環境にCentos7を選択し、nginxのバージョンはここにあるものから最新のものを選んできた。
ビルドに必要なもの以外にもいくつかパッケージが入ってるがデバッグ用にvimとか入ってると後々役立ちます。
それに、rpmビルド用コンテナなのでサイズもレイヤーもあまり気にしてません。
RUN yum update -y
RUN yum install -y epel-release; \
yum install -y autoconf automake libtool wget; \
yum install -y git make vim less; \
yum install -y gcc gcc-c++ pkgconfig pcre-devel tcl-devel expat-devel openssl-devel; \
yum install -y perl-devel perl-ExtUtils-Embed GeoIP-devel libxslt-devel gd-devel; \
yum install -y rpm-build ;\
yum clean all
あとは後は作業用のディレクトリを作ってrpmをビルドするだけです。詳細はDockerfile
をみて下さい。
今回は取ってきたSRPMをそのままビルドしているのでDockerfileも20行で收まっています。
Dockerfileが用意できたらあとはdocker build
でコンテナを作って生成されたrpmを取り出すだけです。
最初のビルドはキャッシュにのってないのもあって10~15分ぐらいかかるのでコーヒーでも入れながら待ちましょう。
$ docker build -t ngx .
$ docker run -d --name ngx-tmp -t ngx
$ docker cp ngx-tmp:/root/rpmbuild/RPMS/ target
docker cp
で生成されたrpmファイルを取り出します。取り出したものは別途動作検証なりをしましょう。
rpmの検証etcが終わったらあとはコンテナを停止・削除します。
$ docker stop ngx-tmp; docker rm ngx-tmp
たったこれだけでrpmが出来てしまいました。
ビルドオプションとか変えたい場合はいったんspecファイルを取り出してパッチを当てるなどをする必要があるかと思いますが、それはまた別の機会に。
メモ代わり。
$ docker run -d -v `pwd`/target:/root/rpmbuild/RPMS --name ngx-build -t ngx
$ docker run --rm -i --name ngx-tmp -t ngx /bin/bash
yuokada/nginx-build-docker - Docker Hub
一応、Docker Hubにも登録してみた。