概要
Linuxカーネルが持つLXC (Linux Container)という機能(以下コンテナ機能)を使って、あたかも他のプロセスやコンテナから独立したPC上でアプリケーションが動いているかのようにする技術。
仮想環境と比較したメリット
- プロセスを管理するようなコストで管理できる
- 余計なオーバーヘッドがない1
- リソースも関係あるものに絞ることができる
コンテナ機能:LXC (Linux Container)
名前空間の隔離機能
リソースの隔離機能
詳しくは俺はLinuxコンテナについてなんにも解っていなかった~haconiwaで学ぶLinuxコンテナ(1)~から色々調べるとちゃんと理解できるかも。
Dockerの中身
DockerはDocker APIを使って外部からコンテナ機能を実行できるようにする。この状態のシステムをまとめてDockerホストと呼ぶ。DockerホストはDockerイメージをもとにアプリケーションを操作する。
Dockerイメージ
アプリケーションとその実行環境、展開・操作方法等をまとめて1つのパッケージとして保存、配布される。そのパッケージのこと。
公式のリポジトリ2で配布されているものもあれば、自作することもできる。
また、履歴管理を備えている。基本的にイメージ内のファイルシステムは全て書き込み禁止となっており、書き込まれた内容は差分として保存される。このレイヤー内容を「コミット」することで新しいイメージとして保存できる。
Dockerfile(スクリプト機能)
Dockerイメージに含まれる。イメージに対してどのように展開/操作するかといった指示を記述できる。それによって、既存のイメージに対して追加でインストール等を行った結果を新たな環境として保存することができる。
Dockerの使い方
基本的にこれだけでOKらしい
$ docker run imageName
これによって、もしローカルにimageName(Dockerイメージ)がなければ自動的にダウンロードされ、実行される。
その他基本的な操作に必要なコマンド
役割 | コマンド |
---|---|
イメージの入手 |
docker search docker pull
|
イメージの確認 | docker images |
イメージの起動 | docker run |
コンテナの状態確認 | docker ps |
外部と通信させる | docker port |
新しいイメージとして保存 | docker commit |
ディスクイメージ3の削除 | docker rm |
イメージそのものの削除 | docker rmi |
他にもいろいろコマンドはあるので、あとは必要に応じて…。
Dockerfileの書き方
上記したようにスクリプトを使って環境構築作業を常に同じ手順で再現できる。Dockerfileをbuild
することでDockerイメージを作成する。
FROMやCMD等INSTRUCTIONについては記事がごちゃごちゃするので別記事で。
Dockerfileの書き方
その他関係するもの
- Docker Swarm
- 複数のコンテナを実行するホストを1つのクラスタとして管理する機能。規模が大きい実行環境で使われる。
- Docker for Windows
- Windows OS上でもDocker環境を構築できるツール。
Get started with Docker for Windows
まとめ
思っていたよりも簡単そうなのでとりあえず実際に触ってみようと思います。実際に使ってみて何か追記するかもしれません。
-
最終的なアプリケーションはOS上の1プロセスとして実行されるため ↩
-
https://hub.docker.com/ の中の、"OFFICIAL"に[OK]がついているものが公式イメージ ↩
-
通常、一度実行したコンテナは終了後もイメージとして残るので、消したい場合は明示的に削除する必要がある。残ることで、次回素早く起動することができる。 ↩