giantneco’s blog

技術メモ

Docker Meetup Tokyo #26 に参加してきたメモ

Docker Meetup Tokyo #26

いま参加しているプロジェクトでは Docker を使っているのだが、自分は割と雰囲気で使っているところがあり、 また他のプロジェクトで Docker を使っているところは知らない。

ということで他のところでどういう使い方をしているのか知りたくて、ちょうどやってた Docker Meetup (https://dockerjp.connpass.com/event/106358/) に参加してきた。

スポンサーセッション (@algas)

負荷テストツール LOCUST の紹介。

LOCUST は分散して負荷をかけることができるツールで、同期実行の問題などを解決している。 Python から利用可能で、レポート機能もあり。ただしレコード機能はなく、プロトコルとしては http(s) しか対応していないことに注意。 Google Cloud から使うこともでき、簡単に構築できる。

負荷テストのときの注意点としては、ユーザ数は徐々に大きくし Hatch rate (= ユーザ増加率) は小さくすること。 一度に大きな負荷がかかることを避けることができる。

KubeCon China参加報告 (KubeCon China Recap) Kazuki Suda (@superbrothers)

中国で行われた KubeCon China のレポート。

普段は欧州やサンフランシスコで行われているが、中国でも開催されるようになった。 Alibaba などのコントリビュートは結構多いのにちょっと驚いた。 CNCF (クラウドネイティブな OSS 技術の推進を行う団体。k8s もこの団体がホスティングしている) の3つのサンドボックスプロジェクトが中国企業からの貢献で進められている。

キーノートでの話だと、k8s はすでに多くの企業で本番利用されていて、安心してビジネスに利用できる段階になっているとのこと。

あとセッションでは k8s をコントロールするのに k8s を使うという話が多かったらしい。これはどうなんだろ?わざわざ問題を作り出しているようにも思える。

いま話題のいろいろなコンテナランタイムを比較してみた (Comparison of several container runtimes) Kohei Tokunaga (@TokunagaKohei)

タイトルの通りいろいろなコンテナランタイムを主に性能面で比較した話。

コンテナには高レイヤと低レイヤの2種類がある。 高レイヤコンテナは kubelet からの指示で pod などを作るもので、 低レイヤコンテナは docker から直接作られるものと分類されている。

取り上げられたランタイムは:

  • 高レイヤ: containerd, cri-o, rkt
  • 低レイヤ: rnc, runsc(gVisor), runnc(nabla containers), kata-runtime (Kata containers)

まずコンテナにこれほど種類があるのは知らなかったので勉強になった。

Docker Swarm-mode Kohei Ota (@inductor)

あまり人気のない Docker の Swarm Mode の話。

NW 周りがしょぼい、Docker CE だと CNI (=Container Network Interface)使えないなど制限はあるものの、Docker を普段から使っていれば k8s に比べて Swarm の導入はかなり楽にできる。 なので大規模なコンテナの運用が必要でない場合には、 Swarm mode も検討してみるのがよいのでは、という話をしていた。

Docker v18.09の新機能の紹介 (Docker v18.09 new features) Akihiro Suda (@AkihiroSuda)

Docker 18.09 は 11/8 にリリースされ、BuildKit がの正式採用された。 BuildKit は新しい docker build のコマンドで、並列、早い、便利。

仕組みとして Dockerfile を DAG 付きの中間言語 LLB に変換して、並列実行可能な箇所を検出してくれるらしい。

また新しい Dockerfile のシンタックスが追加された。 これは Dockerfile 先頭に

# syntax = docker/dockefile:1.0-experimental

と書いておけば使えるようになり、RUN が次のようなオプションを持つようになる。

  • RUN --mount=type=cache : ビルド時にキャッシュを使う
  • RUN --mout=type=secret : 鍵を安全における
  • RUN --mout=type=ssh : クライアントの ssh-agent に接続

加えてリモートの Docker ホストに ssh 接続ができるようになった。環境変数を次のように設定する。

export DOCKER_HOST=ssh://user@host`

Docker が動いているホストに ssh で接続するのではなく、Docker 自体に接続するので手元の設定ファイルや認証情報が適用できる利点がある。

Multi-stage Docker Build @orisano

BuildKit 以前の話だが、Docker のビルドの話で、17.05 から導入された multi-stage build の使ったビルドパターンの紹介。 CI でどのようにしたらよいかがあったので、それも参考になった。

ただ BuildKit で結構変わるので、18.09 からまた事情が変わるようである。

感想

k8s の話もあって、インフラ視点寄りの話が多かった。 Docker ビルドの話から、他のところでの Docker の使い方が垣間見えたが、 現プロジェクトはやはりちょっとちがう使い方をしているように思える。 Docker イメージを作る際もスクリプトを通してなんとなくやってしまっているが、 他のところのやり方を聞くのはかなり参考になった。

18.09 の機能は良さそうだs使いたいが、出たばかりだしプロジェクトで使うのは先になりそうなのがちょっと残念。

あとやっぱり中国の勢いすごいな。中国語のドキュメントを読むのもそう遠くないのかも。 なんかまた中国でカンファレンスがあるんだったら近いし行ってみたい。

kubernetes に加えて Docker ももうちょっとまじめに使えるようにしておきたい。