DockerHub + CircleCIを使ったCI環境を作ってみた〜実践編
前日の導入編に続いてです。
DockerHubを使いAutomated buildを使うことで事前にbuildをさせるところまでやりました。今日は昨日の情報を元にCIの高速化や実際に使うとなった際の課題を考えたいと思います。
CIの高速化
serverの構築にchefを使っているので、clientのインストールが必要です。そこは事前に行ってしまって問題ないので、Dockerfileの中でインストールさせます。
RUN curl -L https://www.opscode.com/chef/install.sh | bash
これを書いただけです。ローカルでimageを起動させ、knifeコマンドが使えるか確認します。
$ docker run -i -t krossblack777/dockerhub-test /bin/bash [root@2586bda21c0d /]# which knife /usr/bin/knife
CircleCIサーバへpushしてみます。
git commit --allow-empty -m "test" git push origin master
- 結論から言うとあまり早くなりませんでした。prepareの時間がそもそもそれほどかかっていないというのとdocker pullのイメージがサイズが大きくなった分すこし時間がかかるようになりました。DockerHubを使うよりローカルにいかにキャッシュさせるかを考えたほうが良いみたいです。
細かすぎて伝わらないかもしれない、CircleCIでDockerをごにょごにょするときのスピードアップテク - パラボラアンテナと星の日記
現環境からの移行について
AMIからimageを作る
AMIを利用している場合はそのAMIを利用して、docker imageを作成できます。
cat amazon.tar.gz| sudo docker import - exampleimagelocal:new
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE exampleimagelocal new 4f7118194129 18 hours ago 1.008 GB
base imageがある場合
- 今利用しているディストリビューションのバージョンのbase imageがある場合はそれを元にDockerfileで必要な設定を入れていけばいいと思います。
欲しいbase imageがない場合
- 公式のbase imageがない場合、知らない人のimageはセキュリティの観点から利用ができない場面があるかと思います。その場合は、一から作成することができます。rhel系のimageを作りたい場合はfebootstrapというツールを使います。debian系はdebootstrapというものがあるみたいです。
所感
既存環境からの移行は、最初にしっかりやってしまえばうまくできそうな気がしています。CI環境の改善がメインと思ってますが、各マシン内の環境もdockerをうまく使えるようにすればより開発に集中できるのではと思ってます。Packerを使えばより簡単にimageを作れるかもという情報を聞いたので、今度はそこを試してみたいと思います。あとはもっと公式ドキュメント読もう。。。
参考
- AMIからimageを作る
Docker Meetup Tokyo #2でLTしてきた:「Docker+serverspecで作るconfigspec CI」 #dockerjp | Developers.IO
- カスタムimageを作成する
docker向けRHLE系のbase imageを作る - Qiita
- docker 公式