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

docker_and_make

kanga333
May 28, 2018
340

 docker_and_make

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

kanga333

May 28, 2018
Tweet

Transcript

  1. 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
  2. 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 だけ
  3. 話変わって皆さんイメー ジに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 ]
  4. label って何に約立つ? docker のlog‑opt でラベルを指定するとログに出力される git のrevision とか埋めるとデバッグに便利 けどk8s でサポー

    トされてない... っぽい docker に依存したオプションのため https://github.com/kubernetes/kubernetes/issues/1547 8 cAdvisor の/metrics エンドポイントはlabel を出力してくれる container_label_"label 名" という形式で表示される
  5. ‑‑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 .
  6. 長くなった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 ) ) \ .
  7. 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
  8. メリット 新メンバー の環境構築が楽(Make とDocker あればよい) 環境差分を抑えられる( 開発者間, ロー カルとCI/CD) CI/CD

    ツー ルやサー バへの依存度を抑えられる Jenkins 側にもMake とDocker があれば良い Docker に対応していれば他のツー ルへの置き換えも楽なはず