LoginSignup
5
5

More than 5 years have passed since last update.

OSS版 drone.io 用の docker イメージをビルドする

Last updated at Posted at 2015-07-10

ハマったのでメモ。

問題

https://github.com/drone/images に build 用の Dockerfile などがおいてあるので、それをいじってビルドするのがてっとり早いようだ。

例えば ruby 2.1.1 のコンテナをビルドするには次のようにする

git clone https://github.com/drone/images
cd image
sudo docker build --rm -t bradrydzewski/ruby:2.1.1  builder/ruby/ruby_2.1.1/

ruby 2.2.2 の docker コンテナが欲しかったので、

cp -a builder/ruby/ruby_2.1.1 builder/ruby/ruby_2.2.2
sed -i 's/2.1.1/2.2.2/g' builder/ruby/ruby_2.2.2/rbenv.sh
sed -i 's/2.1.1/2.2.2/g' builder/ruby/ruby_2.2.2/Dockerfile

して、

sudo docker build --rm -t sonots/ruby:2.2.2  builder/ruby/ruby_2.2.2
docker push sonots/ruby:2.2.2

とやったらすんなりできた。と思ったら、ハマった

原因と対処

どうも drone 内部で、bradrydzewski もしくは drone プレフィックスのついた docker コンテナの場合は、ubuntu ユーザとしてコマンドを実行するが、それ以外の場合は root ユーザとしてコマンドを実行するようで、期待通りの動作をせずにエラーになってしまった。

なので、sonots/ruby ではなく bradrydzewski/ruby という名前にすれば良いらしい.もちろんその名前では docker push できないが、ローカルにはイメージが残るのでそのまま drone からご利用頂ける。docker build し直しても良いが、sonots/ruby で docker pull して、docker tag で名前をつけるだけにするとよさそう。

というわけで docker push から続けて以下のコマンドを打って利用することにした。

sudo docker tag sonots/ruby:2.2.2 bradrydzewski/ruby:2.2.2

その他

https://github.com/drone/images に依存せずに自前で root 前提の image を作る手もありそう。ただ、Drone - サービスコンテナへのポートフォワーディングをどうしているのか読んでみたの記事にあるように socat がどうとかこうとかあるので、drone 内部をちゃんと把握してないと難しそう。

drone の変更に追随するメンテナンスコストもかかりそうだ。

おわりに

image

とのことで将来的には全部 root で動かすようになって、結果ネームスペースの制限もなくなるとのこと。たぶん、0.3 じゃなくて 0.4 の話だと思うけど。

それまでは設定もできないとのこと。カスタムビルドすればいいんかなー。

5
5
0

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
5
5