See the Elephant

1992生まれのプログラマが書くエンジニアブログ

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プロセスに見立てて実行するツール

という風にとらえている.

f:id:namu_r21:20161015123905j:plain
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が動くんだ!?」と思っていたけど, 当然の結果であった;(

もちろんubuntucentosも使えるようだが, dockerではalpineという非常に小さいlinux osを使うことが多いように見受けられた.

おわりに

とりあえず, dockerの概要については理解できた. 次はDockerfileだな….