【初心者向け】Dockerとは?初心者向けにコンテナの仕組み・VMとの違いをわかりやすく解説

コンテナ仮想化の基本概念、Docker の仕組み、イメージ・コンテナの使い方、仮想マシンとの違いまで初心者に丁寧に解説
2023-08-20
ヒーローイメージ

目次
  1. Docker とは?初心者にもわかる基本概念
  2. Docker のメリット
  3. Docker を構成する5つの重要概念
  4. Docker を初めて学ぶためのロードマップ
  5. 参考情報

Docker とは?初心者にもわかる基本概念

  • Docker(ドッカー)とは、アプリケーションを コンテナ(container) と呼ばれる環境で動かすための技術です。

  • アプリを動作させるために必要なソフト・設定がすべてコンテナの中にまとまっているため、どのパソコンでも同じ条件でアプリを動かすことができます。

  • Dockerfile と呼ばれるファイルに、コンテナを作成するための情報・命令文を記載します。その Dockerfile を配布することで、 誰でも同じ手順でアプリを即座に動作させることができるため、開発やアプリケーションリリースが大幅に楽になります。

コンテナとは何か?

コンテナは、アプリが動作するために必要な環境をひとまとめにしたパッケージです。
例えば、Node.js や Python の実行環境、Nginx、MySQL、PostgreSQL など、必要なミドルウェアをまとめたものです。
VM(仮想マシン)とは違い、OS全体を起動しないため、動作が軽快という特徴があります。

仮想マシンとは?Dockerとの違いは?

Docker(コンテナ)とよく比較されるのが「仮想マシン(Virtual Machine)」です。
違いを一言でいうと「どこまで仮想化するか」です。

仮想マシンとDockerの比較一覧
項目 仮想マシン(VM) Docker(コンテナ)
仮想化の単位 OSごと仮想化 アプリ単位で仮想化
起動速度 数十秒〜数分 数秒で起動
リソース消費 重い(メモリ・CPU多) 軽量(ホストOSを共有)
可搬性 OS依存あり OSを問わず動作
運用例 サーバ仮想化、複数OS検証 開発・デプロイ環境統一

Docker のメリット

開発環境を100%再現

従来方式の開発環境構築
従来の開発環境構築ではPCごとに動作が変わってしまう可能性あり
従来の開発環境構築では、OS のバージョン違いやライブラリ差分が原因で、同じ手順でも動作が変わってしまう問題がありました。
Docker なら、全員が同じコンテナを使うため、そういった環境差異がなくなります。

環境構築の手間が激減

Docker は、環境構築の手順を記述し、その手順を実行することで環境を構築できます。
手順を記述するファイルを Dockerfile と呼びます。

Dockerfile をはじめに準備するだけで、環境構築が自動化されるため、手間が大幅に削減されます。

Dockerfileの記載例
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

軽量・高速

Docker は OS 全体を仮想化せず、アプリ単位で仮想化します。
ホストOSの上に必要な分だけのプロセスを起動することになるため、起動時間は数秒と非常に高速です。

本番環境へ安全にデプロイしやすい

Docker(コンテナ)は、「動く状態がそのままパッケージ化」されます。
つまり、ローカルPCで動いたものは本番でも動くという安心感があります。

Note
これは DevOps や CI/CD の前提であり、Docker が普及した大きな理由です。

Docker を構成する5つの重要概念

Docker の理解を深めるうえで欠かせないのが、Docker のコンポーネント(構成要素)です。
Docker は単なる1つのアプリではなく、複数の仕組みが連携して動作しています。

Dockerは大きく分けて、次の 5つのコンポーネント で構成されています。

  1. Docker イメージ
  2. Docker コンテナ
  3. Dockerfile(イメージを作る設計書)
  4. Docker レジストリ(イメージ置き場)
  5. Docker Engine(Docker の心臓部)

これらが連動することで、アプリケーションをどこでも同じ環境で動かすことができます。
それぞれの役割と関係性を順に見ていきましょう。

Dockerイメージ

Docker イメージとは、 アプリを動かすために必要な環境を丸ごと詰め込んだ“完成品”テンプレート のことです。
具体的には、以下が含まれます。

  • OS の最小セット(Alpine など)
  • プログラミング言語(Node.js / Python / Java など)
  • ライブラリ・依存関係
  • アプリケーション本体

Docker イメージは、読み取り専用であり変更されることはありませんので、誰が実行しても同じ環境を再現できます。

Dockerコンテナ

DockerイメージとDockerコンテナ
Docker コンテナは、イメージを実行した“動いている実体” です。
イメージとコンテナの関係を例えるならば、以下のとおりです。

  • イメージ=料理のレシピ
  • コンテナ=レシピから実際に作った料理

コンテナの特徴は、主に以下の3つです。

  • 軽量で高速(起動は数秒)
  • 必要なくなれば削除すれば OK(作り直しも簡単)
  • アプリごとに隔離した環境を作れる

「コンテナを起動する」=アプリを既定の環境で動かす、ということです。

Dockerfile(イメージを作る設計書)

Dockerfile は イメージを自動生成するための手順書 です。

Dockerfileの記載例
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]

Dockerfile に書かれた手順をもとに Docker がイメージをビルドします。

Dockerfile があることのメリットは、以下のとおりです。

  • 手作業の環境構築がゼロになる
  • 誰がビルドしても同じイメージが作れる
  • 再現性が非常に高まる

初心者が「まず理解すべきポイント」のひとつです。

Docker レジストリ(イメージ置き場)

Docker レジストリは、Docker イメージを保存しておく場所 です。 有名なレジストリとしては、以下があります。

  • Docker Hub(公式)
    Docker Hub について

    Docker Hub は Docker Inc. が提供するパブリックなDockerレジストリです。

    Docker Hub

  • GitHub Container Registry
  • Google Container Registry (GCR)
  • Amazon ECR(Elastic Container Registry)
    Amazon ECR について

    Amazon ECR は AWS が提供するプライベートなレジストリです。
    AWSのコンテナサービス(ECS や EKS など)と連携して利用可能です。

    Amazon Elastic Container Registry(ECR)

Docker Engine(Docker の心臓部)

DockerイメージとDockerコンテナ

Docker の中核部分であり、コンテナを作成・管理するための実行環境そのものです。
Docker Engine は2つの主要コンポーネントで構成されています。

  • Docker Daemon (dockerd)
  • Docker CLI (docker)

Docker Daemon (dockerd)

Docker Daemon (デーモン) は、 コンテナやイメージを実際に管理するバックグラウンドサービス です。
Docker Daemon の役割は、以下のとおりです。

  • コンテナの起動・停止
  • イメージの管理
  • ボリュームやネットワークの管理
  • Docker CLI からのリクエスト処理

Docker Daemon は、OS 上で常駐するプロセスで、名前は dockerd です。

Docker CLI(dockerコマンド)

Docker CLI は、コマンドラインからDocker Engineとやり取りするためのユーザーインターフェースです。
コマンドを使用してイメージのビルド、コンテナの起動、停止、削除などの操作を行います。

Docker CLI で以下のようなコマンドを打つと、

docker run nginx

バックグラウンドでは、Docker CLI が Docker Daemon に命令を送り、コンテナを起動します。

Docker を初めて学ぶためのロードマップ

本ページを読んで、Docker の基本概念を学んだ方々に、
Docker を最短で習得したい方向けに効率的な学習ステップを提示します。

STEP1:自分のPCに Docker をインストールし、実際にコンテナを動かして Docker の動きを体感します。

STEP2:Docker で利用できるコマンド操作を習得します。

STEP3:自分のアプリを Dockerfile 化してみます。

STEP4:Docker Compose を利用して、複数コンテナの管理方法を習得します。

STEP5:CI/CD や Kubernetes を利用して、さらに高度な活用に進めます。

参考情報

Docker: Accelerated Container Application Development
Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.
www.docker.com
リンクカード
Docker Hub Container Image Library | App Containerization
Docker Hub is the world's largest library and community for container images. Browse over 100,000 container images from software vendors, open-source ...
hub.docker.com
リンクカード

コメント


Palette Codeなるべく丁寧にプログラミング関連技術を解説するサイト