話題の記事

【狂宴再び】変態ミートアップ、Container build meetup #2に参加してきた #container_build

テーマをギュッと絞って中身が濃すぎる楽しいコンテナビルドの勉強会です。
2019.05.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンテナ大好きな皆さん、こんなマニアックなイベントがあったのをご存知でしょうか?

【docker buildのマニアックすぎる狂宴】Container Build Meetup #1に参加してきた #container_build | DevelopersIO

一種独特の世界観がただよっていたこのイベント、「この人達頭おかしいやろ」と恐れおののいていた自分ですが、ヤバさにひきよせられてしまったのか先日第2回目に参加してしまいました。

Container Build Meetup #2 - connpass

2回めはなぜか神楽坂のど真ん中、閑静な住宅街の古民家での開催となったのですが、そのマニアックさは前回に負けず劣らずヤバイものでした。そんな話題にウキウキする面々を目の当たりにしながら、コンテナに関するあらゆる角度からのマニアックなトークが満載で非常に楽しかったその様子をお届けします。

(祭) ∧ ∧
 Y  ( ゚Д゚)
 Φ[_ソ__y_l〉     コンテナマツリダワッショイ
    |_|_|
    し'´J

神楽坂の古民家が会場

【古民家Kori/神楽坂駅1分】ライブイベントやパーティーに最適な和洋室!~20名規模の会議や研修/セミナー/落語会/子連れOK | スペースマーケット

会場は、あまりエンジニアの勉強会で使われることはないだろう神楽坂の古民家。主催のtoriさんよりツイートで雑に案内があります。

この会場、すごくないすか?

当日イベントのハッシュタグ

当日のハッシュタグはこちらにまとめられています。発表内容への参加者のツッコミや、補完情報もつぶやかれているすげぇ充実したまとめなので、是非こちらもご覧あれ。

イベントアジェンダ

時間 タイトル スピーカー
19:30 - 19:45 開場 & 誰かの大事なドッカーイメージかもって思ったら、私が嫌いだからって捨てることはできないよ @toricls
19:45 - 20:15 環境の一致について考えてみる @Spring_MT
20:15 - 20:45 Container Build; Kaniko and Friends @sakajunquality
20:45 - 20:50 5-min break ---
20:50 - 20:55 Dockerfile AST @po3rin
20:55 - 21:00 役に立たなそうなLT2 dockerignoreの話 @orisano
21:00 - 21:05 そうでもないLT 「軽く」コンテナで色々試す @kaedemalu
21:05 - 21:35 Japan Container Daysで作った公式デモアプリのDockerfileについて(仮) @inductor

「Dockerfile書くときによく聞くBGMと好きなワンライナーの発表」

何故かイベント参加フォームにアンケートがあり、それの結果発表が主催のポジティブな Tori(@toricls)さんよりありました。

  • Dockerfile書くときに好きなBGMは?
  • Docker関連で好きなワンライナーは?

「なんなんだ、この時間は…」と思いながら聞いていると、それはそれはマニアックなこだわりがたくさん。BGMは全体的にアニメやヘビメタが多かった印象。好きなワンライナーは、イメージ一発お掃除系(サブコマンドでイメージ洗い上げるやつとpruneつかうやつ)が主流でした。

「時代はやっぱりpruneだよね。( ・ิω・ิ)」

と謎の盛り上がりをみせ、会場の雰囲気も最高潮!

「環境の一致について考えてみる」

登壇者は、DeNAの春山誠さん(@Spring_MT)

REREPという新規サービスを開発している中ででてきた、「複数環境においてイメージを使い回すために、その環境差異をどこで吸収するのか?」という点を、真正面から取り扱ったセッションでした。

Dockerを使う上で、原理原則として意識しておくのは「同じイメージを極力複数環境で使い回すこと」。そうすることで、開発環境〜検証環境〜本番環境とシームレスに動作確認からリリースができるわけですが、じゃぁ環境依存する設定をどこにもつかは永遠の課題です。

Deep Environment Parityの名のもとに「コード」と「実行環境」と「データ」にわけて、それぞれの取り扱い方をものすごい実践的に解説されていたのが印象的でした。トピックとしては以下の内容です。

  • 実行経路の同一化
  • 設定ファイルの切り替え
  • 時刻処理
  • 設定ファイルと環境変数の使い分け
  • 設定ファイルの管理
  • ビルドにおけるDockerイメージの使い回し方法
  • 環境間差分を吸収するkustomizeの使い方
  • 各種データ(設定、マスター、ユーザー)の保存場所の扱い

内容が濃く刺激が強かったのか、QAも飛び交ってました。恐らく、世の中にあるコンテナワークロードにおいては、アプリケーション種別によって設定ファイルの管理方法のバリエーションは物凄く多いと思いますが、コンテナ運用している現場に参考にできる内容が多いと思います。

「Container Build; Kaniko and Friends」

登壇者は、Jun Skataさん(@sakajunquality)

一貫して、コンテナビルドについてのお話。基本はGoogleが開発したOSSであるKanikoとBuildKitのガチンコ対決でした。

GoogleContainerTools/kaniko: Build Container Images In Kubernetes

自分は、Kanikoの詳細をちゃんと聞いたのは初めてだったので凄い楽しかったです。

  • Docker Daemon不要
  • Imageとして動作
  • レイヤーを各RUNコマンドでキャッシュ

現時点でGoogle Cloud BuildがBuildKitに対応していなかったんですね。AWS CodeBuildは対応してますよ(宣伝)。

そんなGoogle Cloud BuildでもKanikoはサポートしているらしいです。逆にAWS CodeBuildでKanikoも動くは動くらしいです。だれか変態な人はチャレンジしてみてはいかがでしょうか。

また、BuildKit以外のビルドフレンズも紹介されています。

セッション中、何故かやたらBuildKit派をageたりsageたり、会場からもツッコミや合いの手がはいる、なんか殺伐としているのかワイワイしているのかよくわかんない不思議な時間でした。

最後、Dockerメンテなの須田さんから、こういうものがあることも共有されてます!

Tekton  |  Google Cloud

「Dockerfile AST」

登壇者は@po3rinさん。

Dockerfileの抽象構文木(abstract syntax tree)の話です。もう、なんなんすかね。自分AWS環境におけるコンテナ環境インフラ屋としてコンテナと関わることが多いので、話はきいていたけど深く見たことはなかった分野の話だったので、すげぇ面白かったです。

そもそも、「抽象構文木ってなんやねん」って方は、同じく@po3rinさんが書いたこちらの記事が参考になります。

Goを読んでDockerの抽象構文木の構造をサクッと理解する - Qiita

「dockerignoreの話」

登壇者は、おりさの(@orisano)さん。

界隈では、このアカウントIDを見るだけで「また、やばい人がキタ」というオーラを漂わせているおりさのさんですが、非常にわかりやすく、ためになる内容でした。

docker buildがやっていることの解説から始まって、不要なファイルを含めたくない理由、含めてはだめなファイルの例、そこからつながるdockerignoreの話という流れだったので、コンテキストが整理されていて、凄くはらに落ちました。

この勉強会で一番気持ち悪かった(褒め言葉)瞬間がこちら。

これの気持ち悪さと有用さはすべて登壇資料で解説されているので、気になる人はスライド見てみましょう。

「軽くいろいろ試す」

(登壇資料は近日掲載?)

登壇者はTaisei Ito(@kaedemalu)さん。

docker buildの基礎からいろいろ試された話でした。alpineのつらみをみんなで想像しあいながら「ワカリミフカイ」と妙な連帯感を持ったのが今日のハイライト。

「ベストプラクティスに沿って、Dockerfileの可読性とキャッシュ、イメージのサイズの戦略について考えてみた」

登壇者は、@_inductor_さん。

ミートアップの趣旨に反して一番役に立つ話をしてしまったので、一部会場からブーイングが起こるという謎の展開。

Docker buildのお悩みポイント別に、それぞれコンパクトに知見を紹介していく様は、まさに王道そのもの。

  • イメージサイズ
    • ベースイメージ毎の得手不得手紹介
    • multi-stage buildを使おう!
    • dockerignoreを使ったり、ソースコードを排して無駄を省略
  • ビルドの速さ
    • BuildKitを使うがいいさ!
  • 可読性とメンテナンス性
    • ええ感じでかけ!
  • 再現性
    • ええ感じでかけ!
  • セキュリティ
    • 機密情報はちゃんと--mount=type=secretを使おうね

途中、会の趣旨をきちんと振り返ってます。

「Dockerfileの最適化だけを追い求めていくと、可読性が下がったりキャッシュが効きづらくなったり運用がつらくなったりするので、きちんと用法用量を守りましょう!」

というわけで、非常に参考になってしまったセッションでした。改めてDockerfileの痛みや全体を俯瞰しての話だったので、トリを飾るのにふさわしい収まり具合だった思います。

Docker buildに的を絞った濃密で独特な2時間

古民家での開催という非日常感と、参加者の前のめりに楽しんでやろう!という空気感がないまぜになった貴重な時間でした。

前回も思ったんですが、テーマをギュッと絞り込むと、参加者の熱もあがってQAも活発になって楽しいですね。この雰囲気大好きだし、ブログ書きながら講演内容振り返ることでめっちゃ勉強になります。

はてさて、第3回目が開催されるかどうかはわかりませんが、とりあえず気になった方は、commpassのページがありますのでメンバー登録しておきましょう!普段味わえない体験ができると思います。自分も都合がつけば、必ず参加してみようかと。

Container Build Meetup - connpass

それでは、今日はこのへんで。濱田(@hamako9999)でした。