03/27(水) は「Docker Meetup Tokyo #29 (Docker Bday #6)」に参加してきました。
会場は 日本電信電話株式会社 さんの ソフトウェアイノベーションセンタ 。
目次
Docker Meetup Tokyo とは
グループの概要から引用します。
オープンソースの軽量コンテナ Docker のmeetupです.
何故参加したか
なんだかんだ言いつつも、コンテナと言えばDockerだと思いますし、面白いから、ですかね。
タイムテーブル (Time table)
時間 | 内容 | 発表者 (敬称略) |
---|---|---|
18:30 | 開場 (Door open) | |
19:00 | イベントスタート (Event begins) | Akihiro Suda (@AkihiroSuda) |
19:05 | 簡易コンテナを作ってみる | Gorilla (@gorilla0513) |
19:20 | コンテナベースアプリケーションの設計原則と現実 | Kazuki Higashiguchi (@hgsgtk) |
19:35 | Dive into BuildKit LLB | Hiromu Nakamura (@po3rin) |
19:50 | 開発・CI・運用における Docker 戦略(クラシコムの場合) | takeru0757 |
20:05 | スポンサーセッション1 | CREATIONLINE |
20:15 | スポンサーセッション2 | Forkwell (Grooves Inc.) |
20:25 | ネットワーキング (Networking) | 各自 |
21:50 | 撤収開始 (Clean-up) | 有志 |
22:00 | 終了 (Door close) |
内容
Akihiro Suda (@AkihiroSuda) さんによるオープニング。
今回はDocker 誕生から6周年を祝う Birthday イベントも兼ねて行われました。
Docker 社公式Blogでも世界中で Docker 誕生から6周年を祝う Birthday イベント が行われていることが書かれています。(もちろん日本も!)
そしてもう一つ。DockerCon 2019のチケットが 20% OFF になる登録コードが発表されました。DockerCon 2019に参加しようと考えている方は是非利用してください!
dockercon19.smarteventscloud.com
DOCKERBDAY20 です!
Dockerの周辺OSS
Gorilla (@gorilla0513)
Try make a simple container(Docker Meetup Docker #29) - Google スライド
コンテナと仮想化の違いについて
リソースを分離・制限している仕組み、namespace と control groups(cgroup)について
どのように namespaces を使っているか?
system call | 機能 |
---|---|
unshare system call | 現在のプロセスを新しいnamespaceに関連付け |
clone system call | 新しいプロセスを新しいnamespaceに関連付け |
setns system call | 現在のプロセスを既存のnamespaceに関連付け |
どのように control groups を使っているか?
- cgroup-tools(libcgroup) を使用
- cgcreate: 新しい group を作成
- cgdelete: 既存の group を削除
- cgexec: 既存の group 上でコマンドを実行
- cgroupfs によるファイル操作
mkdir /sys/fs/cgroup/cpu/$UUID sudo echo 50000 | sudo tee /sys/fs/cgroup/cpu/$UUID/cpu.cfs_quota_us echo $$ | sudo tee /sys/fs/cgroup/cpu/$UUID/cgroup.procs
コンテナツールとして紹介されていた3つのツール。3つとも日本の方が作成。
MINCS github.com
aqr(AQuaRium) github.com
Haconiwa github.com
まとめ
Gorilla (@gorilla0513) さん作成のツールについてはこちらで。
個人メモ:
- コンテナは Linux カーネルの持つ namespace と control group という仕組みの組み合わせで実現されている。
- System Call とか cgroup とか カーネルランド/ユーザーランド はLinux使いとしては知っていたけど、改めて復習した感じ。
- 仕組みがわかれば bash とgo でコンテナを作成できるというのが面白い。そういう風に使うのか、という驚き。
コンテナベースアプリケーションの設計原則と現実
Kazuki Higashiguchi (@hgsgtk)
トークの概要
1.構成
構成の機能
- "実行時"データ(起動時に必要)
- 環境ごとに異なる
- 多くの値
構成に対する要求
- 階層的に管理する
- 構成をわかりやすくする
- 設定を外部化する
- アプリケーションから設定を取り除く
- 最小限のアクセシビリティ
- 設定にクレデンシャルが含まれている
関連する原則
“Beyond the Twelve-Factor App” の “05.CONFIGURATION, CREDENTIALS, AND CODE”
- 登録をすると Pivotal 社のサイトからpdfファイルをダウンロードできます。
- Beyond the 12 Factor App: Exploring the DNA of Highly Scalable, Resilient Cloud Applications
“Principles of container-based applicationdesign (redhat)” の “IMAGE IMMUTABILITY PRINCIPLE(IIP)”
- 日本語版のPDFファイルを日本のRedHat社のサイトからダウンロードできます。
- コンテナベース・アプリケーションの設計原則
構成:実例
設定:実際の問題
- クラウドベンダが提供する機能に依存
- うまく統合された機能なら、「シンプル」に
- そうでない場合は「複雑」になる場合がある
例:Fargate&Parameter Store
- パラメータストアを外部設定ストアとして使用する例
- プラットフォームバージョン1.3より前と後で異なる
2.ロギング
ロギングに対する要求
- リアルタイム
- 「今起こっていること」を知る
- 可用性 *ログが無い、ということが無い
- 検索中
- 問題の原因の特定を「簡単」にする
関連する原則
“06. LOGS”
- ログをイベントストリームとして扱う
- ファイルシステムに依存しない
- STDOUT / STDERRの「ログ」
- ツールを使用する(例:ElasticSearch、Logstash、Kibana)
- 集約の要件を満たすため
- ログの処理、保管
ロギング:実例
3.アプリケーションの構築
アプリケーションの構築に対する要求
- 依存関係管理 * アプリケーションの依存関係を管理する
- 異なる環境で稼働 * ローカルでの稼働、品質保証、状態、本番稼働
アプリケーションコンポーネント
- ランタイムエンジン
- コード
- 依存関係
- 構成(設定)
コンテナアプリケーション
- コンテナには以下のものを含む
- ランタイムエンジン
- コード
- 依存関係
- 構成(設定)は起動時に注入
関連する原則
- “Beyond the Twelve-Factor App” の “03. DEPENDENCY MANAGEMENT”
- “Beyond the Twelve-Factor App” の “04. DESIGN, BUILD, RELEASE, RUN”
アプリケーションを構築する:本当の問題
- ベストプラクティス:同じコンテナがすべての環境を提供
- しかし、ローカル環境では、開発効率も重要
自分たちに合ったバランスを見つける
- Docker for local
- メリットを弱める
- 開発者を強化する
- 適切なバランスを見つける必要性
4.モニタリング
モニタリングに対する要求
- 健康状態をチェックする * モニタリングするアプリの健康
- メトリクスを見続ける * メトリクスを見続ける
関連する原則
- “Principles of container-based applicationdesign (redhat)” の “HIGH OBSERVABILITY PRINCIPLE (HOP)”
HIGH OBSERVABILITY PRINCIPLE (HOP)
Health endpoint パターン
- アプリケーション監視パターンの一つ
- アプリケーションにHTTPエンドポイントを提供する * アプリケーションの健康状態を伝える
- こちらも参照:“Practical Monitoring—Effective Strategies for the Real World"
Mackerel Container Agen
個人メモ:
- 最後のモニタリングの部分、Health endpoint パターンとか聞き覚えがあると思ったら先週参加した Rancher Meetupで @songmu さんが話していた内容だった。
*「Practical Monitoring」は 日本語版は「入門監視」ですね。
- 作者: Mike Julian,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- これだけの内容を話すにはもっと時間が必要ですね、と内容を読み直してこれを書きながら思いました。
Dive into BuildKit LLB
Hiromu Nakamura (@po3rin)
Buildkitの内部の仕組みなどについての内容。
Moby とは
- コンテナシステムを組み立てるためのオープンフレームワーク
BuildKit とは
LLB(Low-Level intermediate build format)
- BuildKitはローレベル中間ビルドフォーマット(LLB:Low-Level intermediate build format)を採用し、ビルドの実行パスを依存グラフ構造で表現できるようにした。
- BuildKitがビルド高速化を可能にした立役者。
- 命令間の依存関係をDAG(Directed Acyclic Graph)として表現することで、命令の並列実行と正確なキャッシュ判定を実現
llb2dot
- DockerfileをLLBとして解析しDOT言語に変換するツール
llb2dotについての発表資料も見つけたので貼っておきます。
DAG(directed acyclic graph) in LLB
LLBは任意の入力を変換して生成。最終的に build deamon がビルド成果物を指定されたexporterの形式で出力
LLBの構造の仕様
Function to convert Dockerfile to LLB
Dockerfile2LLB は内部でDockerfileをASTに変換しているので、DockerfileのLinterも作成可能
ビルドフローを見ると、LLBさえ生成できれば、Frontendは何を使っても良いことになる
オリジナルの BuildKit LLB frontendの例
カスタムフロントエンドを作成する簡単な方法
[w500]
個人メモ:
- LLBというのを初めて知った。
- llb2dotを使うとDockerfileのビルドを可視化できる。これは面白い。
- 面白そうなので引き続きLLBについてはウォッチしていきたい。
開発・CI・運用における Docker 戦略(クラシコムの場合)
takeru0757
クラシコムの ”北欧、暮らしの道具店” のコンテナ化を紹介。
技術スタック
- PHP + Laravel x 3 (商品ページ、決済ページ、管理画面)
- ミドルウェア
- RDS (MySQL)
- ElastiCache (Redis)
- GitHub → CircleCI → AWS OpsWorks (Chef) でデプロイ
課題
- アプリケーションが細分化されている
- 連携する複数アプリケーション・ミドルウェア(※マイクロサービスではない)
- Opsworksでデプロイ
- Chefのコードが肥大化していて秘伝のタレみたいな状態に。
コンテナ(Docker)化で達成したいこと
- エンジニア間における開発環境の統一
- 自分用につくった docker-compose.yml + Dockerfile を独立したリポジトリとして社内で共有。
- → エンジニア間での開発環境は統一できつつある ☺
- 開発とCIにおける環境の統一(進行中)
- プロダクションと開発・CIにおける環境の統一(進行中)
- 本番環境のコンテナ化。
- 昨年、アプリケーションの1つを全面的に書き換えを行い、それに併せてKubernetesを導入しようとしたが挫折
- 現在はAWS ECSを導入する方向で進んでいる。(将来的にはKubernetesに再チャレンジしたい)
クラシコムさんのコンテナ化についてはこちらも参照してください。
個人メモ:
- 条件分岐をできるようにすると結局複雑化して秘伝のタレ、みたいになる気がしなくもない。
- どうしても参加したいから登壇した、というところが凄い。
- 会場の反応を見る限り、コンテナ化をする時に悩むポイントはあまり変わらないのかな、と思った。
スポンサーセッション1
CREATIONLINE
Happy birthday! #dockertokyo #dockerbday pic.twitter.com/qAsv3eS6Fe
— kabukawa (@kabukawa) 2019年3月27日
クリエーションラインさんの提供するDocker, Chef, などなど。k8s のサービスとトレーニング
DockerやKubernetesに対応するコンテナイメージ共有ソフトウェア「Beiran」
スポンサーセッション2
Forkwell (Grooves Inc.)
また出たな、Forkwell!
— kabukawa (@kabukawa) 2019年3月27日
また来てね、Forkwell!
そんなバリエーションあったんか。。。(笑)
#dockertokyo #dockerbday
懇親会
ケーキがあると盛り上がりますね!しかも今回はお寿司もあって豪華!
ケーキもお寿司もとても美味しかったです! 去年に引き続き、Tシャツもいただきました!ありがとうございます!
まとめ
最近抽選から外れたり、他の勉強会と日程が重なって参加できなかったりしたので、今回はだいぶ久しぶりでの参加でした。 でも、去年に引き続きBirthdayイベントに参加できたのは本当に幸運だったと思います。
話されている内容も、どれも内容が濃くて勉強になることがたくさんありました。 1年経って、勢いは未だ衰えず。スピーカーや参加者、そしてスタッフの方々の熱気が本当に凄いなと感じました。 (その感じがこの記事を通して読んでいる人に伝わるといいなと思います)
スピーカー、スタッフ、参加者の皆様、ありがとうございました!