LINEで現役エンジニアに直接質問してみよう!登録無料

【入門】Dockerとは?使い方やコンテナの仕組みをわかりやすく解説

この記事ではDockerについての

  1. Docker使うことで得られるメリット
  2. Dockerの特徴と仕組み
  3. Dockerコンテナの実行例
  4. DockerとVirtualBoxとVagrantの違い

を中心に解説していきます。

  • Dockerを使ってみたいけど、どういうものか分からない🤔
  • 仮想環境は理解できなくてつらい😇
  • Docker使うの怖い 👻

このような疑問を持っている初心者向けの内容です。

Dockerとは

Dockerとは、アプリケーションの動く環境を「コンテナ」という単位にパッケージングして、Dockerがインストールされている環境ならどこでも動くようにしたソフトウェアの事です。dockerコマンドを使い、コンテナの作成、配布、実行まで行えます。

「仮想環境」といえば、「VirtualBox」が有名で、WindowsやMac上でUbuntuを動かす時によく使われますが、これとはこれとは仕組みや構築方法が違う所もあります。

使い勝手としては、Dockerの方が高く、今までよりも素早く開発環境を構築できます。

Dockerを使わない今までのWebサービス環境の問題とは

Dockerを使わない場合、今までのWebサービス開発現場では様々な問題ががありました。

  • 複数のプログラミング言語を共存させるのが激むずでつらい
  • プログラムをサーバーにデプロイしてみたら動かなかった
  • 開発環境と本番環境で言語やライブラリのバージョンが違う!
  • 環境変数がプログラムで利用されているのか不明
  • サーバーを移行できない(ロックイン状態)

このような問題をDockerを使えばすべて解決することができます。

更に、Dockerを使うことで下記のようなメリットも受けられます。

Dockerを使うメリット1: ロールバックが出来る

Dockerの「コンテナ」1つ1つにはGitのように固有のIDが割り振られ、管理することもできます。

そのため、Gitのように失敗した時点でロールバックしてやり直すことができます。依存関係やバージョンアップに失敗しても、前のバージョンに戻して実行出来るわけです。

また、すべてのコンテナは差分保存されているいます。

Dockerを使うメリット2: アプリケーションを動かす環境に依存しない

Dockerコンテナは動かす環境によって「動く・動かない」が左右されません。1回ビルドすれば、Ubuntu、CentOS、Amazon Linuxなど、どんな環境でも動かすことができます。

「そのため、特定PCでしか動かない!」といった依存問題を回避することができます。

Dockerを使うメリット3: 1サーバーにDockerで複数の環境を構築可能

RubyやPythonを使っていると、プログラミング言語やライブラリのバージョンがサーバー1台単位で固定されてしまいます。

そうなると、複数のバージョンの言語を動かそうとしても、互いに干渉しあってしまい、大抵の場合正しく動作しまんせん。

しかし、Dockerコンテナに環境をパッケージングしてしまえば、その中内部だけの依存関係に収まるので、1台の物理サーバー内部で複数のプログラミング言語・ライブラリを入れることが可能になります。

Dockerを使うメリット4: DockerfileさえあればノートPCでも再現可能

Dockerfileさえあれば、環境をノートPCでも再現することが可能です。これがどんな役に立つのかというと、「案件ごとに、微妙に環境が異なる場合」に使えます。

案件って、それぞれで微妙に環境が異なる場合はよくあります。たとえば、

  • 環境変数
  • ミドルウェアやインフラの導入
  • 言語、ツール

などです。

しかし、ソフトウェアの中にはサーバー内部でしか動かないものも多く、1人1人の開発環境を持つ事が難しい場合も多く、開発作業がはかどらない場合がありました。

Dockerfileを使えば、

  • 案件ごとに異なる環境を構築可能
  • ミドルウェア導入や新インフラの導入が容易
  • 言語やツールのバージョンアップが容易
  • チームメンバー全員各自のPCでデバッグが可能

など、様々なメリットを受けられます。

Dockerの特徴と仕組み

Dockerは、どのように使っていけばいいのかイメージしやすくなるために、Dockerの特徴や仕組みについて解説します。

Dockerを理解するには、5つの知識が必要です。

  1. Dockerコンテナ
  2. Dockerイメージ
  3. Dockerクライアント
  4. Dockerエンジン
  5. Docker Hub(レジストリ)

Dockerコンテナとは?

LinuxやWindowsにはディレクトリ構造が存在します。

このディレクトリ構造の何処かにRubyやPythonなどのプログラミング言語やミドルウェア、MySQLなどのソフトウェアのすべてがインストールされます。

このインストールディレクトリ(場所)は、マイナーバージョン程度であればインストールされる場所は同じです。

そして、そのインストールされたライブラリを使うためには、環境変数を制御しなくてはいけません。環境変数とは、Rubyなどのライブラリの場所を伝えるものです。

この環境変数は、あなたが使うアプリケーションだけではなく、システムやライブラリ内部でも使われていることがあり、容易に変更できるものではありません。

しかし、Dockerを使うと、下記のように1つのPCの中に複数のPCが入ったような構造になります。

このようなシステムを「仮想環境」と言います。仮想環境を使えば、1つのアプリケーションのことだけについて考えればよくなり、その他のアプリケーションが動くかどうか心配する必要は無くなります

Dockerで作る仮想環境の事を「Docker」コンテナと言います。

Dockerコンテナ内部には、独立したLinux環境やWindows環境が動いています。

Dockerイメージとは?

ところで、Dockerコンテナ内部にはLinuxなどがあると言う事は、そのような環境を作る元となったデータが存在するはずです。というか、コンテナはどうやって作られるのでしょうか?

この正体こそ、「Dockerイメージ」と呼ばれるものです。

「Dockerイメージ」には、Linux環境とアプリケーションがセットになって入っています。そのため、Dockerイメージさえあれば、Mac、Linux、Windowsなどどんな環境でも同じように動作させることが可能です。

意識するのは、その環境にDockerがインストールされているかだけで良くなります。

Dockerクライアントとは?

DockerイメージからDockerコンテナを作成するには、何処かから「このDockerイメージからDockerコンテナを作れ!」と指示する必要があります。この指示するツールの事を「Dockerクライアント」と言います。

Dockerエンジンとは?

Dockerコンテナはどういうものかは、なんとなく理解できたとおもいます。しかし、Dockerがどのように動いているのかはまだ理解できていないと思いますので、これから解説します。

Dockerコンテナを動かしているプログラムの事を「Dockerエンジン」といいます。

Docker Hub(レジストリ)とは?

「Dockerイメージ」があれば、どのような環境でもDockerコンテナを作ることができ、環境を再現出来ることを解説しました。

その「Dockerイメージ」をネットワーク上で管理する場所の事を「Dockerレジストリ」と言います。

その中でも、「Docker社」が管理しているDockerレジストリを「Docker Hub」と言います。

Docker環境構築の歴史

Dockerには、このように様々な役割を果たすプログラムが存在するための、その1つ1つをインストールしていたのでは管理が大変です。そのため、手元もPCでDockerを簡単に動作させるためのツールが提供されていました。

dockerを動作させる環境には、歴史的な経緯から

  • boot2docker
  • Docker Toolbox
  • Docker for Mac / Windows

など、様々なツールが提供されていました。しかし、使われなくなったツールも多く、ネットの検索で昔の情報に混乱してしまう事も多いので解説していきます。

boot2docker: 非推奨(2015年8月11日以前)

Dockerの提供が始まり、Mac ProでDockerを動かすためにVirtualBoxの上に「boot2docker-vm」という仮想マシンを作り、その上でDockerを動かす環境構築ツールが提供されていました。

しかし「Docker Machine」の登場で使われなくなりました。

Docker Toolbox: 非推奨(2015年8月12日〜2016年8月1日)

boot2dockerの後継として作られたツールです。

  • Docker クライアント
  • Docker Machine (virtualBox操作ツール)
  • Docker Compose (Dockerコンテナ連携ツール)
  • Docker Kitematic (Docker GUI可視化ツール)

など、様々なツールを1つのまとめたパッケージです。

Docker MachineはVirtualBoxが前提となっているため、事前にインストールが必要でした。

また、Linux仮想環境を作っているために、動作が重く、メモリ少ないPCでは動作させるのがつらい面もありました。

Docker for Mac / Windows: 推奨

今、現行のツールです。VirtualBoxの依存は無くなり、Mac上のAPIを直接叩けるようになったため、動作が高速になり軽快に動作させることが可能になりました。

環境構築も、公式サイトからアプリをダウンロードしてインストールするだけで良くなったので、非常に楽になりました。

まとめ

ここまでで、Dockerを使うメリット・特徴・仕組みなどを解説してきましたが、最後にDockerのメリットについてまとめます。

  • ロールバックが出来る
  • アプリケーションを動かす環境に依存しない
  • 1サーバーにDockerで複数の環境を構築可能
  • DockerfileさえあればノートPCでも再現可能

Dockerイメージさえあれば、誰でも何処でも同じ環境を再現できます。Dockerfileを見れば、環境変数など、サーバーそれぞれで使っている重要な値も一目瞭然です。

もちろん、Dockerのような仮想環境はVirtualBoxと似たような部分もありますが、動作が軽快で環境の設定ファイル(Dockerifle)が見れる部分が一番便利です。

ぜひ、Dockerをインストールして、実際に動かしてみてくださいね。

この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。