【Docker入門】
Dockerの学習を始めたので、基礎的なところを少しアウトプットしていきます。
Dockerとは
コンテナという環境のパッケージ化をする環境仮想化技術のこと。コンテナの作成、実行、配布が簡単に行うことができる。
Docerの特徴
- コンテナ型
- 配布が簡単
コンテナ型は、ホストOS上に直接存在し、それぞれのプロセスごとのゲストOSを必要としない。
ホストOS内のカーネルという技術を使って実現している。つまり、ゲストOSが無く、処理の層もシンプルになる(オーバーヘッドが少ない)ため、処理・起動が速いというメリットがある。また、Dockerfileを用いてインフラのコード化が可能なため、可搬性が高く、非常に使い勝手が良い。一応、コンテナ型のデメリットとしてはホストOSと異なるOSは動かせないという点。
配布が簡単というのは、DockerHubというプラットフォームを使うことによって可能となる。Dockerは環境設定をコード化することができ、DockerHubを使って自分の設定ファイルを世界中の人に配布できたり、世界中の人の環境設定をすぐに自分の環境として作成することができる。
Dockerのコンテナの仕組み
コンテナはホストOSのカーネルという機能を利用した技術で、cgroup・namespace・Capabilityという技術を組み合わせて実現している。
cgroup(controll group)
コンテナが利用するメモリ・CPUなどのリソースの割当てと管理(制限)をしている。割り当てられたリソースを消費しても他のコンテナに影響を与えないように調整してくれている。
namespace
プロセスやネットワーク、アクセスなどそれぞれに関してnamespaceごとに隔離をしている。これも、コンテナごとを隔離して、それぞれ独立的にファイル構造やプロセス空間を持たせる役割を持つ。
Capability
DockerコンテナへホストOSのrootユーザーの権限を制限し、最小限の権限を付与・管理を行なう。
Dockerの使われ方
組織やチームで開発するときに開発環境の作成と共有が簡単にできる。
開発環境と同じ環境をそのまま本番環境でも使うことができる。
環境設定をコード化して、パッケージ化したものを簡単に配布できる。
Docker Image
CentOSやUbuntuなどのOS、NginxやMySQLなどのソフトウェア、RubyやPHPなどの言語といった特定の環境を提供してくれるため、Imageを起動することで環境を再現することができる。docker pullコマンドで、DockerHubから様々なDocker Imageを取得することができる。
Dockerfile
必要なパッケージやアプリなど各種設定を自らコード化し、記述したファイルのこと。Docker ImageはこのDockerfileに基づいて作成されるため、自分に合った環境設定(Docker Image)を作成できる。
このDockerfileからベースイメージを使用してDocker Imageを作成することをビルドという。また、既に起動されたDockerコンテナからDocker Imageとして作成することをコミットという。
終わりに
入門のところで大事そうなところを簡単にまとめてみました。初めは言葉やカタカナの意味が難しくて、今もなんとなくの理解しかできていませんが、仕組みや概念が少しわかってきました。これをアプリにどう取り入れて使うのかまではまだよく分かっていないのでこれからも学習を進めて理解を深めていきたいと思います。