⑥Docker・コンテナ

Dockerとは何か?仮想化とコンテナの違いをわかりやすく解説【初心者入門】

⑥Docker・コンテナ
記事内に広告が含まれています。

「Dockerってよく聞くけど何?」「仮想マシンとどう違うの?」「なぜエンジニアはみんなDockerを使うの?」この記事ではDockerの基本概念から実際の使いどころまで、初心者にもわかりやすく丁寧に解説します。

Dockerとは何か?

Dockerとは、アプリケーションをコンテナと呼ばれる軽量な実行環境にパッケージ化して動かす仕組みです。

一言で表すと「どの環境でも同じように動く箱を作る技術」です。

開発現場でよくある悩みとして、「自分のPCでは動くのに、本番サーバーに乗せたら動かない」という問題があります。原因はOSのバージョン違い、ライブラリのバージョン違い、設定ファイルの差異などさまざまです。Dockerはこの問題を根本から解決します。アプリに必要なOS・ライブラリ・設定ファイルをすべてまとめて「コンテナ」という箱に入れてしまうため、どの環境に持っていっても同じように動きます。

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

Dockerを理解するうえで、従来の仮想マシン(VM)との違いを押さえておくことが重要です。

仮想マシン(VM)の仕組み

仮想マシンは、ホストOSの上にハイパーバイザー(VirtualBoxやVMwareなど)をインストールし、その上に完全なゲストOSを立ち上げます。ゲストOSはホストOSとは完全に独立しており、自分専用のカーネルを持ちます。

メリットとしては完全な環境分離ができる点ですが、デメリットとしてゲストOS分のリソース(CPU・メモリ・ディスク)を常に消費するため重く、起動も数分かかります。

コンテナ(Docker)の仕組み

Dockerのコンテナは、ホストOSのカーネルを共有しながら、プロセスやファイルシステムだけを分離します。ゲストOSを丸ごと立ち上げる必要がないため、起動は数秒で完了し、サイズも数十MB〜数百MBと軽量です。

比較項目仮想マシン(VM)コンテナ(Docker)
起動時間数分数秒
イメージサイズ数GB〜数十GB数十MB〜数百MB
OSカーネルゲストOSを含むホストOSを共有
リソース消費大きい小さい
分離レベル完全分離プロセス・ファイル分離
主な用途完全な環境分離が必要な場合アプリの実行環境分離
代表ツールVirtualBox、VMware、Hyper-VDocker、Podman

Dockerの主要な構成要素

Dockerを使いこなすために、まず以下の4つの概念を理解しましょう。

① イメージ(Image)

コンテナの設計図(テンプレート)です。読み取り専用で、OSやアプリ・ライブラリの構成が記録されています。たとえば「Ubuntu 22.04 + Python 3.11 + Flaskがインストールされた環境」をイメージとして保存できます。

イメージは自分で作成することも、Docker Hubから公式のものをダウンロードして使うこともできます。

② コンテナ(Container)

イメージから起動した実際に動いているプロセスです。1つのイメージから複数のコンテナを起動できます。コンテナを停止・削除してもイメージは残るため、いつでも同じ環境を再現できます。

③ Dockerfile

イメージを作成するための手順書です。テキストファイルに「どのベースイメージを使うか」「どのコマンドを実行するか」「どのファイルをコピーするか」などを記述します。

# Dockerfileの例
FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3 python3-pip
COPY app.py /app/app.py
WORKDIR /app
CMD ["python3", "app.py"]



④ Docker Hub

Dockerイメージを公開・共有するためのクラウドレジストリです。GitHubのDocker版と思えばわかりやすいです。Ubuntu・Nginx・MySQL・Pythonなど公式イメージが無料で公開されており、docker pullコマンド一発でダウンロードできます。

⑤ Docker Compose

複数のコンテナをまとめて定義・起動するためのツールです。たとえば「WebサーバーコンテナとDBコンテナを同時に起動してネットワークでつなぐ」という構成をYAMLファイルに書いておき、docker compose upコマンド一発で環境を再現できます。

Dockerが使われる主な場面

① 開発環境の統一

チーム全員が同じDockerイメージを使うことで「自分のPCでは動くのに他の人のPCでは動かない」という問題をなくせます。新メンバーのオンボーディングもdocker compose up一発で完了します。

② CI/CDパイプライン

GitHub ActionsなどのCI/CDツールと組み合わせることで、コードをプッシュしたら自動でビルド・テスト・デプロイが走る仕組みを構築できます。テスト環境・本番環境を同じイメージで動かせるため、環境差異によるバグを防げます。

③ マイクロサービスの運用

大規模なシステムを複数の小さなサービスに分割するマイクロサービスアーキテクチャでは、各サービスをコンテナとして独立させて運用するのが一般的です。KubernetesなどのコンテナオーケストレーションツールもDockerと組み合わせて使われます。

④ サーバーの効率化

1台のサーバーに複数のコンテナを立ち上げることで、リソースを効率的に使えます。VMのように各環境でゲストOSを動かす必要がないため、同じスペックのサーバーでより多くのアプリを動かせます。

Dockerのインストール方法(Ubuntu)

UbuntuへのDockerインストールは以下のコマンドで行います。

# 既存パッケージを更新
sudo apt-get update
# 必要なパッケージをインストール
sudo apt-get install -y ca-certificates curl gnupg
# DockerのGPGキーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# Dockerリポジトリを追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Dockerをインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# バージョン確認
docker --version



sudoなしでdockerコマンドを使えるようにする

# 現在のユーザーをdockerグループに追加
sudo usermod -aG docker $USER
# 一度ログアウトして再ログインすると反映される
# 確認コマンド
docker run hello-world



よく使うDockerコマンド一覧

コマンド説明
docker pull <イメージ名>Docker Hubからイメージをダウンロード
docker imagesローカルのイメージ一覧を表示
docker run <イメージ名>コンテナを起動
docker ps起動中のコンテナ一覧を表示
docker ps -a停止中も含む全コンテナを表示
docker stop <コンテナID>コンテナを停止
docker rm <コンテナID>コンテナを削除
docker rmi <イメージ名>イメージを削除
docker build -t <名前> .Dockerfileからイメージをビルド
docker exec -it <ID> bash起動中のコンテナにシェルで入る

まとめ

  • Dockerはアプリをコンテナにパッケージ化してどの環境でも同じように動かす仕組み
  • 仮想マシンより軽量・高速で開発効率が大幅に向上する
  • イメージ・コンテナ・Dockerfile・Docker Hubの4概念を押さえるのが最初の一歩
  • 開発環境の統一・CI/CD・マイクロサービスなど幅広い場面で活用されている
  • UbuntuへのインストールはDockerの公式リポジトリから行うのが推奨

次の記事ではDockerをUbuntuに実際にインストールして、コンテナを起動するところまで手を動かしながら解説します。

コメント

タイトルとURLをコピーしました