【Docker基礎】Dockerの正体とは

 ここでは「Docker(ドッカー)」とはそもそも何なのか、その“正体”に迫りつつ、なぜ多くの現場で使われるようになったのかを解説します。
 なんとなく「コンテナ技術」や「仮想化」という単語を聞いたことがあるかもしれませんが、詳細はまだモヤモヤしている…という方も多いでしょう。まずはDockerという技術がどんな役割を果たしているのか、ざっくり理解していきましょう。

Dockerとは何か?

Dockerとは一言でいうと、「データやプログラムを隔離できる仕組み」のことです。
 同じサーバー(あるいはパソコン)の中で、複数のプログラムが動いていると、いろいろなトラブルが起こる場合があります。たとえば「Aのプログラムが古いバージョンのライブラリを使っていて、Bのプログラムは新しいバージョンしか動かない…」という“バージョン地獄”を想像してみてください。

 Dockerを使うと、プログラムやデータを「コンテナ(Container)」と呼ばれる独立した環境に隔離し、互いに干渉しないように管理できます。コンテナの中にはアプリケーションだけでなく、それを動かすのに必要なライブラリや設定ファイルなど一式をまとめて詰め込むことができます。

ポイント

  • Dockerは「仮想マシン」のようにOSごとエミュレートするわけではなく、より軽量に“OSっぽいもの”をコンテナごとに作り出す技術です。
  • そのため、少ないリソースで複数コンテナを起動でき、扱いやすいことが魅力の一つです。

Dockerが注目される理由

 Dockerは当初、サーバーエンジニアの開発環境で活用されていましたが、いまでは本番環境やフロントエンジニアの開発環境にも広く取り入れられています。以下のようなメリットがあるため、多方面で注目されているのです。

  1. 開発環境の整備が簡単
    ・プロジェクトごとに異なるバージョンのプログラムやライブラリを用意しやすい。
    ・「動く環境」をそのまま配布できるので、チーム全員が同じ環境を再現できる。
  2. 互いに独立したコンテナ
    ・複数アプリを1台のサーバー上で動かしても、コンテナ同士の干渉を最小化
    ・バージョン違いのライブラリでも衝突しにくい
  3. 軽量かつ高速起動
    ・従来の仮想マシンほど重くなく、コンテナの起動も停止も迅速

コンテナとDocker Engine

 Dockerの中核となる概念が「コンテナ」と「Docker Engine」です。イメージとしては、サーバー上に「物置部屋」をいくつも用意して、その部屋ごとにプログラムをしまっている状態を想像してください。

  • コンテナ (Container)
    ・1つ1つの部屋。ここにアプリケーションやデータを詰め込む。
    ・他のコンテナと隔離された独立空間なので、コンテナ同士の干渉が少ない。
  • Docker Engine
    ・コンテナを作ったり、起動・停止したりするためのソフトウェア
    ・これをサーバーやPCにインストールすることで、Dockerが使えるようになる。

  「Dockerをインストールする」というのは、Docker Engineを導入して、コンテナを扱えるようにすることを指します。

Dockerの基本コマンド

 Dockerを動かすときに最もよく使われるコマンドを表にまとめました。どれもよく登場するので、一度さらっておくと後々便利です。

コマンド説明実行例
docker pull <イメージ>DockerHubなどのリポジトリからイメージを**ダウンロード(取得)**する。
まだローカルに存在しないイメージを使いたいときに使う。
docker pull nginx
(nginxイメージを取得)
docker imagesローカルに存在するDockerイメージの一覧を表示するコマンド。docker images
docker run <イメージ>イメージから新規にコンテナを作成・起動する。
コンテナがなければdocker pullしてくるため、実質“イメージ取得+コンテナ起動”を同時に行うコマンド。
ポートや環境変数も指定可能。
docker run -d -p 80:80 nginx
(バックグラウンドで起動)
docker ps現在稼働中のコンテナを一覧表示するコマンド。
-a オプションを付けると停止中のコンテナを含む全コンテナを表示する。
docker ps -a
docker stop <コンテナID> / <コンテナ名>指定したコンテナを停止するコマンド。docker stop <コンテナ名>
docker rm <コンテナID> / <コンテナ名>コンテナを削除するコマンド。
停止中のコンテナのみ削除できるため、動いている場合は先にdocker stopが必要。
docker rm <コンテナ名>
docker rmi <イメージ名>イメージを削除するコマンド。docker rmi <イメージ名>

ポイント

  • -d オプション:バックグラウンド起動
  • -p オプション:ポートマッピング(ホスト:コンテナ

まとめ

 1台のサーバーやPC上で、いくつもの環境を独立して用意できるのがDockerの強みです。データやプログラム、バージョンなどが互いに干渉しないので、「あれ、前に動いていたのに急に動かなくなった…」といったトラブルを減らせます。また、余計なリソースを使わずにコンテナを増やしたり、動かしたりできるため、サーバー運用にもぴったりです。

 次のコンテンツでは、さらにDockerが具体的にどんなシーンで活躍するのか、そのメリットをいろいろな角度から見ていきましょう。仮想化の専門知識がなくても大丈夫です。Dockerの正体をしっかりつかんで、活用イメージを膨らませてください。