2017年10月14日土曜日

Docker道場で修行してきたまとめ



  • Docker=chroot+OverlayFS+カーネルのプロセス分離技術
  • 仮想OSとは概念が違う。仮想OSはBIOSより上をすべて差し替えるけど、Dockerは特定用途に必要なファイルだけ差し替える。下から全てなのか、上から必要最小限なのかの違い
  • 仮想OSぽいこともできるけど、それは狙ったものではないので、失敗することが多い。ネット上の批判はそのあたりに原因がある。
  • ソースコード以外の、たとえばデーモンやライブラリや設定ファイルにバージョン管理の概念を導入したもの
  • 開発環境と本番環境の同一性を保証するような用途に向く。または、使い捨てのアプリでも、親環境を汚さないで済む
  • 基本的にLinux系OSの上に、やりたいことに関連する依存部分すべてををDocker imageとして用意し、基本となるOSの上にDockerで用意した差分を当てることで、特定の用途として使えるようにしたもの
  • 基本Linuxで動く。macOSはUnix系なのでDocket for Macを使うことで動かすことが出来る。Windowsは、仕組みが違いすぎるので、Dicker for Windowsを使うことで、内部的に仮想Linuxを立ち上げることで動かしている
  • 最近はクラスタリングを便利にする方向に進化している
  • 元となるOSからの差分は、OverlayFSを使って、たくさんのレイヤーを重ねることで実現しており、変更はレイヤーごとで管理するので、仮想OS(すべてを一括管理)より入れ替えが楽。これにより開発中のテストや修正などが迅速に行える
  • Docker imageは、レイヤーに相当しており、実際にはファイルやサブディレクトリを含んだ1つの読み取り専用ディレクトリとして実装されている。(OverlayFSの下層レイヤーとして機能する)
  • Docker containerは、実行する度に作られる管理単位で、一つのDocker imageから複数のDocker containerを作ることが出来る
  • Docker containerは、OverlayFSを使っていることもあって、変更された分は最上位レイヤーに差分としてとして管理される。
  • コンテナの実行を終えたとき、最上位レイヤーは破棄されるので、残しておく必要があるときはdocker commitを使って保存しておく必要がある
  • レイヤーは複数重ねることが出来る。これにより基本部分や特定用途など、用途ごとに管理できる
  • レイヤーの層の分、OverlayFSでの重ね合わせが発生する。ファイルを1バイトでも変更すると、ファイル単位のcopy on writeが発生し、これが最大のオーバヘッドとなる。それ以外の部分のオーバヘッドは小さい。
  • Docker containerからは、親となるOSのディレクトリを直接マウントできるので、変化するデータは親のファイルシステムに保存するのが定石(じゃないと、遅くなる)
  • 仮想OSではないので、親のOSのディストリビューションや、バージョンに影響を受ける。基本的には動くように作っているはずだが、現実的には、同じディストリビューションの同じバージョンで動かす方がよい(ディストリビュービューターの努力依存)
  • 元になるOS部分と、一層目のレイヤーの境界線がわかりにくい。要はOS層の中で、マシンが違っても同じ実行を保証するための、共通因子がはっきり定義されてない印象。ただしこれは、元となるOS部分を限りなく薄くして、一層目のレイヤーを厚くすることで吸収するような方向に進化中とのこと
  • どこに使えば使えばいいのか、いまいち解りにくい
  • 市販の本は、既に古くなっている部分が多いのでオススメしない。 Dockerドキュメント日本語化プロジェクトをオススメする。
また、docker利用例としてros2とsagemathを思い出したので紹介しておきます。
  • ros2はRobot Operating System ver2です。ロボット開発にパッケージシステムや共通コンパイル環境を用意することで、車輪の再発明を抑制してみんなハッピー、みたいなものです。ただ、進化スピードが早いのと、周辺システムまで含めると巨大なので、コンパイルを通すのがしんどいです。おそらくそれをdockerを使って解決しているのだと思います。
  • sagemathは数学系の教育補助ソフトに分類されるのかな。jupyter notebookやsageなどを使って数式を書くと、それを解析的に解いてくれたり、グラフに書いてくれたりします。AIやってる人は結構使ってるはず。同様のものが無料のクラウドサービスとして運用されていますが、混むと遅くなるのでこちらでdocker imageも配布されているようです。(なので自分のマシンで立ち上げてもユーザ登録から始まった気がします)