Upgrade to Pro — share decks privately, control downloads, hide ads and more …

docker_and_make

E867c26fd05aed731384496b1facffe2?s=47 kanga333
May 28, 2018
180

 docker_and_make

Container SIG Meet-up 2018 Summer LT資料
https://connpass.com/event/84151/

E867c26fd05aed731384496b1facffe2?s=128

kanga333

May 28, 2018
Tweet

Transcript

  1. Docker とMake kagawa shoichi (@kanga333) 2018/5/28 Container SIG Meet‑up 2018

    Summer LT
  2. 自己紹介 @kanga333( 香川翔一) MicroAd,Inc インフラチー ム 広告配信サー バやデー タ基盤などを構築/ 運用

  3. はじめに Docker とMake のTips についてとりとめなく話します Docker のビルドにMake を使う Make の実行環境としてDocker

    使う
  4. Docker のビルドにMake を使う

  5. docker build コマンド打つの面倒 プライベー トレジストリ使ってるとイメー ジネー ムは長くなる d o c

    k e r b u i l d \ - t r e g i s t r y . e x a m p l e / i n f r a / c o n t a i n e r - s i g : 0 . 0 . 1 d o c k e r p u s h \ r e g i s t r y . e x a m p l e / i n f r a / c o n t a i n e r - s i g : 0 . 0 . 1 複数タグつけたい場合は尚更 e x p o r t R E V I S I O N = ` g i t r e v - p a r s e - - s h o r t H E A D ` d o c k e r b u i l d \ - t r e g i s t r y . e x a m p l e / i n f r a / c o n t a i n e r - s i g : 0 . 0 . 1 - t r e g i s t r y . e x a m p l e / i n f r a / c o n t a i n e r - s i g : p r o d u c t i o n - t r e g i s t r y . e x a m p l e / i n f r a / c o n t a i n e r - s i g : $ R E V I S I O N
  6. Make の出番 こんな感じで複数タグでビルドできます( 抜粋) N A M E : =

    c o n t a i n e r - s i g V E R S I O N : = 0 . 0 . 1 R E V I S I O N : = $ ( s h e l l g i t r e v - p a r s e - - s h o r t H E A D ) T A G S : = p r o d u c t i o n $ ( R E V I S I O N ) $ ( V E R S I O N ) R E G I S T R Y : = r e g i s t r y . e x a m p l e S P A C E : = i n f r a b u i l d : @ d o c k e r b u i l d \ $ ( a d d p r e f i x - t $ ( R E G I S T R Y ) / $ ( U S E R ) / $ ( N A M E ) : , $ ( T A G S ) ) \ . p u s h : @ f o r T A G i n $ ( T A G S ) ; d o \ d o c k e r p u s h $ ( R E G I S T R Y ) / $ ( U S E R ) / $ ( N A M E ) : $ $ T A G ; \ d o n e 実行は m a k e b u i l d と m a k e p u s h だけ
  7. 話変わって皆さんイメー ジにlabel 付けてますか? Docker のイメー ジにメタデー タを付与できる F R O

    M a l p i n e : l a t e s t L A B E L d e s c r i p t i o n = " T h i s i s a l a b e l e d i m a g e " d o c k e r b u i l d - t l a b e l e d . inspect で確認可能 d o c k e r i n s p e c t \ - - f o r m a t " { { i n d e x . C o n f i g . L a b e l s } } " \ l a b e l e d m a p [ d e s c r i p t i o n : T h i s i s a l a b e l e d i m a g e ]
  8. label って何に約立つ? docker のlog‑opt でラベルを指定するとログに出力される git のrevision とか埋めるとデバッグに便利 けどk8s でサポー

    トされてない... っぽい docker に依存したオプションのため https://github.com/kubernetes/kubernetes/issues/1547 8 cAdvisor の/metrics エンドポイントはlabel を出力してくれる container_label_"label 名" という形式で表示される
  9. ‑‑build‑arg と組み合わせてビルド時にlabel 情報を渡す LABEL をARG で定義した変数から渡すようにする F R O M

    a l p i n e : l a t e s t A R G R E V I S I O N = u n k n o w n L A B E L r e v i s i o n = $ R E V I S I O N ビルド時に引数として渡す R E V I S I O N = ` g i t r e v - p a r s e - - s h o r t H E A D ` d o c k e r b u i l d \ - - b u i l d - a r g R E V I S I O N = $ R E V I S I O N \ - t l a b e l e d .
  10. 長くなったbuild コマンドはmake で簡略化 抜粋 b u i l d :

    @ d o c k e r b u i l d \ - - b u i l d - a r g R E V I S I O N = $ ( R E V I S I O N ) \ $ ( a d d p r e f i x - t $ ( R E G I S T R Y ) / $ ( U S E R ) / $ ( N A M E ) : , $ ( T A G S ) ) \ .
  11. Make の実行環境としてDocker 使う

  12. 最近の弊社のリポジトリ構成 File3 兄弟 Dockerfile 本番で使うイメー ジやMake で使う実行環境のイメー ジなど Makefile テストやビルドなどの実行を行うタスクランナー

    Jenkinsfile CI/CD の各フェー ズでMake をキックするパイプラインの設定
  13. Make のタスクをDocker コンテナ内で実行する Makefile 抜粋 D O C K E

    R : = d o c k e r r u n - w / t m p / w o r k - v ` p w d ` : / t m p / w o r k C O N T A I N E R : = $ ( D O C K E R ) $ ( R E G I S T R Y ) / $ ( U S E R ) / $ ( N A M E ) : p r o d u c t i o n b u i l d : @ $ ( C O N T A I N E R ) b u i l d _ c o m m a n d docker run のオプションで プロジェクト直下をマウントする - v pwd : / t m p / w o r k かつworkspace を使う - w / t m p / w o r k
  14. メリット 新メンバー の環境構築が楽(Make とDocker あればよい) 環境差分を抑えられる( 開発者間, ロー カルとCI/CD) CI/CD

    ツー ルやサー バへの依存度を抑えられる Jenkins 側にもMake とDocker があれば良い Docker に対応していれば他のツー ルへの置き換えも楽なはず
  15. まとめ Make を使えばDocker のビルドを簡略化できます Docker を使えばMake の実行環境の移植性が高められます 組織にあった方法で良き開発ライフを