LoginSignup
5
8

More than 5 years have passed since last update.

Vagrant + Chefを使っている自分が、Dockerを使ってみる前の下調べ

Last updated at Posted at 2016-01-30

Dockerは何を解決するのか?

Dockerとはオープンソースの次世代仮想化技術で、アプリケーションを「コンテナ」にパッケージングして、デプロイ、実行できます。
Go言語で書かれていてLinuxカーネルのみに依存する

ポイント

  • コンテナにアプリをパッケージングして、デプロイ、実行までできる
  • 1度ビルドすればどこでも動く
  • Dockefileさえあれば、いつでも再現可能
  • Go言語で書かれている

つまり

DockerfileにOSのスクラッチイメージからライブラリ、環境変数などのパッケージングするものを書きます。それをビルドして実行してテストしてデプロイするだけで、手元で動いていたものをプロダクション環境にそのまま持って行って動かすことができる

端的に言うと、

デプロイの作業が簡単になる
Docerfileによってインフラをコード化。(この点はVagnrantと類似している。)
Dockerはコンテナ型仮想化
仮想化なのでプラットフォームやハードウェアからは隔離された環境
すべてのコンテナには固有のIDがあります。
Dockerfileの1行ごとにコンテナとコンテナIDが作られ、コンテナは親からの差分を保存していく。例えば一番ベースとなるコンテナからapt-getなどをすると、その差分だけを保存することになります。何かに失敗したらgitのように失敗する前に戻すことが可能
Docker Vagrant
コンテナ型仮想化 ホスト型仮想化
物理マシンのLinuxカーネルは共有して、別々のユーザー空間を作り出すというアプローチ 物理マシンの上の仮想空間に独自のLinuxカーネルやOSなどを作成(インストール)する
ビルドもデプロイも高速、オーバーヘッドも少ないので動作が軽い 逆に重い(左記に比べて)

サーバ側の設定

DBインストールとかもろもろのアプリのインストール、サーバー側の設定については以下のとおり。

Docker Vagrant
Dockerfile シェル or Chef in Vagrantfile

※Dockerでコンテナをして、Chefでサーバー設定も可能だが、Dockerfile自体がサーバーの設定を記述して自動化する機能を提供しているためあまり意味がない。

Docker Vagrant with Chef
プロセス内でその仮想環境が構築され、そのプロセスを消すと仮想環境自体もなくなるため基本的には毎回一からDockerfileを使って仮想環境を構築する chefのメリットのひとつに冪等性があるが、それはすでにサーバーの設定が入っているところに何度も実行しても環境が同じであることを保証したいするため

VM(仮想マシン)とコンテナの違い

dockerkiso06.jpg

VMではVMごとにゲストOSがあって、その上にライブラリとアプリが乗っている。
コンテナではホストOSのうえにDockerエンジンがいて、そこに各種ライブラリがいる。
要は、コンテナが同じライブラリを共有しているので少ディスクスペースかつ少メモリ、それでいて隔離されている環境を実現できる。

上記を踏まえてDockerでまずは環境構築をしてみる。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8