re:annkara

Web技術を中心に学んだことを書き溜めていきたい。

Dockerメモ

職場でもいよいよDockerの導入が検討され始めたので、本腰入れて学習していくかと思い積読となっていたオライリーのDockerを読みました。

Dockerコマンド周りやDocekrfileの記述方法など、細かいところをまとめていくのはしんどいのでDocker周りの技術を中心にまとめていこうと思います。
Dockerをローカル開発環境だけでなく、オンプレ上の開発環境、本番環境に適用して行く際に、導入・運用に必要となるであろう技術スタックを俯瞰できるようにしておきたいというのがメモの目的なので。

あくまで書籍ベースなので、情報が古い場合もあるのでご注意を。

Dockerのアーキテクチャ

Dockerデーモン

コンテナの生成、実行、モニタリングとともに、イメージの構築と保存を担う。 常駐プロセスとしてサーバなどで稼働しており、Dockerクライアントからのリクエストを受け付ける。

Dockerクライアント

HTTP経由でDockerデーモンに通信するために利用される。
dockerコマンドがクライアントに相当するものだと思うのだけど、HTTPが話せればよいということなので、クライアントライブラリ経由でも可能らしい。
今の所あまり理解できていない気がする。

Dockerレジストリ

イメージの保存と配布を担う。
デフォルトのレジストリはDocker Hubで、ローカルに存在しなければDocker Hubに探しに行く。
もちろん独自のDockerレジストリを立てることも可能。

Dockerの周辺技術

Docker単体のみでサービスを構成することは難しいため、それを補う技術がある。
Dockerが提供するものもあれば、サードパーティ製のものもあり、ユーザはそれを取捨選択することができる。

Dockerが提供するものは以下の通り。

Swarm

Dockerのクラスタリングツール。
Dockerホストが複数立ち上がっている場合、統合して扱うことができる。

Compose

Swarmが分散されたDockerホストを統合するツールであれば、Composeは同一ホスト上で稼働する関連したDockerコンテナ群を統合するためのツール。
docker-compose.ymlファイルに各コンテナの設定を記述することで、複数コンテナの起動や停止を管理できる。

Machine

Dockerホストをローカル、またはリモート上に構築するためのツール。

Kitematic

Mac OS及びWindows向けのDockerコンテナを管理するためのGUIツール。

Docker Trusted Resistry

オンプレミス上でレジストリを構築するためのサービス。
他にもパッケージ経由でインストールできる、Docker Resistryもある。

他にもサードパーティ製のサービスは以下のように大きく分類できる。
ここでは列挙にとどめておく。詳しいことは各分野毎のツールを実際に試してみて、また別の記事としてまとめておきたい。

ネットワーキング
  • Weave
  • Project Calico
サービスディスカバリ
  • etcd
  • SkyDNS
  • Consul
クラスタリング及びオーケストレーション
  • Kubernates
  • Mesos
  • Fleet
コンテナ管理
  • Rancher
  • Clocker
  • Tutum

感想

Docker自体が発展途上の技術であり、それを取り巻く環境も変化が激しい分野だと思います。
他の技術同様、利用することを目的にしてしまうと変化に追いつくだけで疲れてしまうと思うので、Dockerはどんな技術で何を解決するものなのか、
そして自社の環境にどのような形で適用していくことができるのかということを念頭に置かないといけないなと思いました。
そういった意味では今回、そもそもDockerとは、コンテナ技術とは、など基本的なところをまとめていないのでまとめていきたいと思います。

ただコンテナ技術としてのDockerを考えると、アプリケーションとその依存関係をイメージとして固め、docker runすれば簡単にアプリケーションが起動できるという仕組みは非常に便利だとも思います。
要は使い方さえ間違わなければ便利なツールであると。
どうやって利用していくのかという点も引き続き考えていきたいと思います。