Dockerについて学んだことを書いていきます。
#Dockerってなに?
コンテナ型仮想化技術を実現するために実行される常駐アプリケーションと、
操作するためのコマンドフロントインターフェイスから成るプロダクト。
むむむ。。。
###コンテナ型仮想化技術
仮想化ソフトウェアなしにOSリソースを隔離し、仮想OSとする技術。
この仮想OSをコンテナという。
###CLI(コマンドインターフェイス)
コンピュータやソフトウェアが利用者に情報を提示したり、操作を受け付けたりする方法。
#Dockerを導入すると
- Dockerのセットアップが済んでいれば、数行の構成ファイルとコマンド1つ叩くだけで検証環境が構成できる。
- 環境起因のトラブルを最小限にできる。
- 高速に起動・終了できる。
##なぜそのような恩恵を受けられるのか
Dockerは
Infrastructure as Code
Immutable infrastructure
これら2つの考え方を簡単かつ低コストで実現することができるため。
###Infrastructure as Code(インフラの構成管理)
インストールするライブラリ、ツール等は何かをコードベースで定義しする。
これで手作業を減らし、コード中心にすることで、複数の同じ構築のサーバを再現しやすくなるという利点がある。
DockerではDockfileというfileによって、構成を管理している。
###Immutable infrastructure(不変なインフラ)
ある地点のサーバ状態を保存して、複製可能にする考え方。
サーバに変更を加えたい場合は、
既存のインフラをアップデートではなく、
作り直して新しいサーバのイメージとして保存し、複製できるようにしている。
###構成管理がしやすい
ある程度規模のシステムは複数のアプリケーションやミドルウェアを組み合わせている。そのため、いつかの箱を組み合わせることによってシステムを作成しており、全体の構成管理が必要になってくる。
DockerはDocker Compose
というツールを提供している。
-
Docker Compose
yaml形式の設定ファイルで、
コンテナを定義したり、依存関係を定義して起動順を制御したりできる。 -
Dockerノード
Dockerがインストールされたサーバ -
Docker Swarm
Docker Composeを単一のサーバだけでなく、複数のサーバをまたいで複数のコンテナを管理できるようにしたもの。 -
コンテナオーケストレーション
複数のノードをまたいで多くのコンテナ群を管理する手法。
コンテナオーケストレーションとしてデファクトスタンダードの地位を確率しつつあるのが、Kubernetes(Google社が長年のコンテナ運用で培われてたノウハウを凝縮したOSS)
#Docker基本概念を学んで
環境の構築には1日がかりになることも普通にある。
開発者や機器の違いによって生じる差異をどう埋めるかもとても悩ましい問題だけど
Dockerはそういった問題点の多くを解決できるツールであることが良くわかった。