dockerを触ってみる
こちらも合わせてお読みください
namu-r21.hatenablog.com namu-r21.hatenablog.com
動機
サークルで環境設定が面倒くさいと言われたので, dockerで提供することにした. infrastructure as codeをやってみたくて勉強中.
dockerとは
色々なサイトで説明されているので, 詳細はそちらに譲る.
Dockerイメージの理解とコンテナのライフサイクル
docker what is docker? (公式)
Docker入門
2016年版、Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き)
仮想環境界隈におけるdockerの立ち位置についてはDocker入門がかなりわかりやすかった.
dockerの用語解説は2016年版、Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き) が分かりやすい.
僕自身の理解では dockerは,
ホストOSのカーネルを利用して, 仮想環境をホストOS上の1プロセスに見立てて実行するツール
という風にとらえている.
2016年版、Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き) より引用させてもらう.
Dockerは内部的にサーバクライアントで動作している. 仮想環境はDockerサーバ上で動作する. そのため, 仮想環境を立ち上げたり, シャットダウンしたり, 仮想環境内に入ったりするためにはDockerサーバに命令を送らなければならない. これらはDockerコマンドで操作することができる.
イメージとコンテナの違い
「dockerはイメージを基にコンテナを生成し, 仮想環境を提供する. このためコンテナ型仮想環境と呼ばれる. 」とどこのサイトにも書いてあったが初めは意味がわからなかった…
僕のなかでの理解では, 以下のように整理した
- イメージ : 仮想環境の雛形
- コンテナ : イメージから作られた実際の仮想環境
プログラムソース(イメージ)があって実行するとプロセス(コンテナ)が立ち上がる, という風に言い換えるとわかりやすいかもしれない.
そして, イメージは異なる環境上に持っていっても, dockerさえあれば動くようになっている.
つまり, 作成したイメージを異なる環境に渡すことで「環境を移植, 共有」することができる.
イメージとコンテナに関してはDockerイメージの理解とコンテナのライフサイクル が視覚的に説明してくれている(3Dの図すごい).
imageのイメージが湧かない点について
dockerのイメージは「仮想環境の雛形」といった.
docker hubと呼ばれるdockerイメージのホスティングリポジトリにはruby, rails, mysql, nginx, ubuntu, centosなど多くのimageが存在する.
が, とりあえず何らかのosが存在しないと動作のしようがない.
ruby, railsなどのイメージは, 何らかのOS上に名前に対応するパッケージをインストールしたイメージを生成し, 共有してくれているようだ.
勉強したての頃は「なぜOS無しでrubyやnginxが動くんだ!?」と思っていたけど, 当然の結果であった;(
もちろんubuntuやcentosも使えるようだが, dockerではalpineという非常に小さいlinux osを使うことが多いように見受けられた.
おわりに
とりあえず, dockerの概要については理解できた. 次はDockerfileだな….