Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

【Docker入門①】そもそも『Docker』とは…?

この記事では、《Docker や コンテナ》について、
業務を通して学習した内容をまとめています。

  • 『Docker』とは…?
  • 『Docker』って何が良いの…?
  • 『Docker』のアーキテクチャ(構成)

こういった疑問についてまとめています。

※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。

『Docker』とは…?

docker.jpg

『Docker』とは・・・

Linux上でコンテナを作成・管理・実行するためのプラットフォームです。

Docker社(旧dotCloud社)によって、2013年3月に初版がリリースされ、現在ではインフラ関係やDevOps界隈で注目されている技術の一つです。

Windowでも・・・
Windows Server 2016 からはWindowsコンテナが利用できるようになりました。
※Windowsコンテナは、Windows上でのみ実行可能です

『Docker』を利用すると何がメリットなの…?

『Docker』はLinuxのコンテナ技術を使ったもので、よく『仮想マシン』と比較されます。

なので、まずは・・・

『仮想マシン』と『コンテナ』の違い

について簡単に見ていきましょう。

『仮想マシン』と『コンテナ』について

virtual_machine_and_container.png

『仮想マシン』は・・・

ホストOS上で『VirtualBox』や『VMware』などの仮想化ソフトウェアを利用して仮想マシンを作成し、その仮想マシンのゲストOS上でアプリやミドルウェアを動かします。

【余談】
サーバー仮想化は、利用する仮想化ソフトウェアによって『ホスト型』『ハイパーバイザー型』の2種類の手法に分類され、上記は『ホスト型』に該当します。
『ハイパーバイザー型』についても知りたい方は、ググってみてください。

そのため・・・

起動に時間がかかるというデメリットがあります。
(もちろん、完璧に環境を分離できるというメリットもありますが…)

それに対し、『Docker』は・・・

ホストOSのみの使用でプロセスやユーザなどを隔離することで、ホストOS上にあたかも別のマシンが動いているかのような環境を作ります。

そのため・・・

軽量で、且つ高速に起動・停止することが可能になります。

『Docker』を利用するメリット【5つ紹介】

point-1.jpg

『Docker』では、開発環境の構築(ミドルウェアのインストールや各種環境設定)をコード化して管理します。

そのため・・・

『Docker』を利用することで、以下のようなメリットがあります。

  • コード化して管理することで、
    誰でも、どこでも同じ開発環境が構築できる
  • 構築した開発環境を簡単に配布できる

例えば・・・

"開発環境(Windows上)では正常に動作したけど、Linuxでは動作しなかった"

なんて経験がある方もいるかと思いますが…

このケースの場合、開発工程から『Docker』を利用することで防ぐことができます。

さらには・・・

『開発工程の中で使っていた環境をそのまま本番環境に持っていく』

なんてことも可能なので、差分の発生がなくなり、環境差分によるトラブルも防ぐことができます。

また・・・

作成したDocker イメージは他の開発メンバーにも渡せるので、それを使ってもらうことで…

  • メンバー間での開発環境のバージョンずれ防止
  • 準備時間(開発環境を準備する時間)の短縮

にもつながります。

実際・・・

"資料の不備や手順ミスが原因で、開発環境の準備に丸一日かかってしまった"

なんて経験がある方も多いんではないでしょうか…苦笑

そんなところで、メリットをまとめると下記の5つのようなモノが挙げられます。

  1. 起動が速い
  2. コード化して管理することで、
     誰でも、どこでも同じ開発環境が構築できる
  3. 構築した開発環境を簡単に配布できる
  4. メンバー間での開発環境のバージョンずれ防止
  5. 準備時間(開発環境を準備する時間)を短縮できる

※あくまで一部なので、他にもたくさんあると思います

『Docker』のアーキテクチャ(構成)

shells_script_3.jpg

『Docker』のシステム構成に関してのお話で、要は…

『コンテナをどうやって動かすか』

ってことについてです。

具体的には、『Docker』は下記の4つで構成され、サービスを提供しています。

  1. Docker デーモン
  2. Docker クライアント
  3. Docker イメージ
  4. Docker コンテナ

それでは、ひとつずつ見ていきましょう。

①:Docker デーモン

docker_daemon.png

Docker デーモンは・・・

コンテナの管理・実行を行います。

Docker デーモンはイメージからコンテナを作成したり、実行したりするだけの存在なので・・・

実際は、Docker デーモンに対して指示を出すシステムが必要です。

それが、お次に紹介する『Docker クライアント』です。

②:Docker クライアント

docker_client.png

Docker クライアントは・・・

『Docker』を操作するためのアプリケーションです。

管理者からのコマンドを受け付けたら、その先にあるDocker デーモンへ指示を飛ばし、それによってコンテナが動いたり止まったりする訳です。

③:Docker イメージ

docker_image.png

Docker イメージは・・・

コンテナの元になるひな形で、Docker レジストリに保管されます。

Docker レジストリとしては、Docker Hubと呼ばれるオンラインサービスが提供されており、そこではイメージの共有やダウンロードが可能です。

④:Docker コンテナ

docker_container.png

Docker コンテナは・・・

Docker イメージを元にして実行されたプロセスです。

各コンテナは分離されているので、独立したホストの同じように扱うことが可能です。

まとめ・感想

surfing-1.jpg

『Docker』に関しても『業務のなかでもやってみたい!』と思ってますが、なかなかチャンスがなさそう…。
(待っててもチャンス来ないので、行動するしかないですね笑)

今後は…

『Dockernのセットアップやコンテナの起動方法』

についてもまとめる予定です。

<次のお話>
【Docker入門②】『Docker』のセットアップと基本操作

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?