Docker入門:コンテナ技術の基本から使い方、Kubernetesとの違いまで徹底解説!

「自分のPCでは動いたのに、サーバーにデプロイしたら動かない…」 「開発メンバー間で環境構築の手順が微妙に違って、再現性に悩む…」

ソフトウェア開発やインフラ運用に携わっていると、このような「環境差異」による問題に直面することがあります。こうした悩みを解決する強力なツールとして、近年**Docker(ドッカー)**が広く使われています。

この記事では、月間5万回も検索される注目技術「Docker」について、その概要からメリット、基本的な使い方、簡単なサンプル、そして混同されやすいKubernetesとの関係まで、初心者の方にも分かりやすく解説します。

Dockerを用いたPostgreSQL Citusを構築した記事はこちらからご確認ください。

1. Dockerとは? - コンテナという考え方

Dockerは、「コンテナ」と呼ばれる技術を使って、アプリケーションとその実行環境をパッケージ化し、簡単にデプロイ・実行できるようにするプラットフォームです。

よく「コンテナ船」に例えられます。コンテナ船は、中身(例えば電化製品や食品)に関わらず、規格化されたコンテナに入れてしまえば、同じ方法で積み込み、輸送、荷降ろしができます。

Dockerのコンテナも同様に、アプリケーション、ライブラリ、設定ファイルなど、アプリケーションの実行に必要なものすべてを一つの「コンテナ」にパッケージ化します。これにより、開発環境、テスト環境、本番環境など、どこでも同じようにアプリケーションを動かすことが可能になります。

これは従来の仮想マシン(VM)とは異なり、OS全体を仮想化するのではなく、OSの機能(プロセス、ネットワークなど)を共有しながら、各コンテナを隔離して動作させます。そのため、VMよりも軽量で高速に起動・動作するのが大きな特徴です。

主要な要素:

  • Dockerイメージ (Image): アプリケーション実行に必要なファイルシステムや設定をまとめた「テンプレート」や「設計図」のようなもの。
  • Dockerコンテナ (Container): Dockerイメージを元に作成され、実際にアプリケーションが動作する「インスタンス」。イメージから何個もコンテナを起動できます。
  • Dockerfile: Dockerイメージをどのように作成するかを記述したテキストファイル。OSの指定、必要なソフトウェアのインストール、設定ファイルのコピーなどを手順通りに記述します。
  • Docker Hub/Registry: Dockerイメージを保管・共有するためのリポジトリ(倉庫)。Docker Hubは公式のパブリックリポジトリで、様々なOSやミドルウェアの公式イメージが公開されています。

2. Dockerは何が便利なのか? - 導入のメリット

Dockerを導入することで、以下のような多くのメリットが得られます。

  • 環境構築の簡略化と再現性の向上: Dockerfileを使えば、誰が実行しても同じ環境を確実に構築できます。「私の環境では動いたのに…」という問題が激減します。新しいメンバーが参加した際の環境構築もDockerイメージを渡すだけで済みます。
  • 環境のポータビリティ: 開発用PC(Mac, Windows, Linux)、テストサーバー、本番サーバーなど、Dockerが動作する環境であれば、コンテナをそのまま移動させて同じように動かせます。
  • 軽量・高速: OSを丸ごと起動する仮想マシンと比べて、コンテナはカーネルを共有するため、起動が非常に速く、リソース消費も少ないです。1台のサーバー上でより多くのアプリケーションを動かせます。
  • デプロイの高速化と効率化: イメージ化されているため、アプリケーションのデプロイ作業が「イメージを取得してコンテナを起動する」だけで完了し、大幅に効率化されます。CI/CD(継続的インテグレーション/継続的デリバリー)ツールとの連携も容易です。
  • アプリケーションの分離(アイソレーション): 各コンテナは隔離された環境で動作するため、あるコンテナ内のライブラリバージョンの違いなどが他のコンテナに影響を与えることがありません。
  • マイクロサービスとの親和性: アプリケーションを機能ごとに小さなサービス(マイクロサービス)に分割して開発・デプロイするアーキテクチャと非常に相性が良いです。各サービスを独立したコンテナとして管理できます。

3. Dockerはどうやって使うのか? - 基本的な流れ

Dockerを利用する基本的な流れは以下のようになります。

  1. Dockerのインストール: お使いのOS(Windows, Mac, Linux)に対応したDocker DesktopやDocker Engineを公式サイトからダウンロードしてインストールします。
  2. Dockerfileの作成: アプリケーションの実行環境を定義するDockerfileを作成します。どのOSイメージをベースにするか、どのファイルをコピーするか、どのコマンドを実行するかなどを記述します。
  3. Dockerイメージのビルド (docker build): Dockerfileを元に、docker buildコマンドを実行してDockerイメージを作成します。 Bashdocker build -t <イメージ名>:<タグ> <Dockerfileのあるディレクトリパス> # 例: docker build -t my-web-app:1.0 .
  4. Dockerコンテナの実行 (docker run): 作成したDockerイメージからdocker runコマンドを使ってDockerコンテナを起動します。ポートの指定や環境変数の設定などもここで行います。 Bashdocker run [オプション] <イメージ名>:<タグ> [コンテナ内で実行するコマンド] # 例: docker run -d -p 8080:80 my-web-app:1.0 # (-d: バックグラウンド実行, -p ホスト側ポート:コンテナ側ポート)
  5. コンテナの管理:
    • docker ps: 実行中のコンテナ一覧表示
    • docker stop <コンテナID or コンテナ名>: コンテナの停止
    • docker rm <コンテナID or コンテナ名>: コンテナの削除
    • docker images: ローカルにあるイメージ一覧表示
    • docker rmi <イメージID or イメージ名>: イメージの削除
    • docker exec -it <コンテナID or コンテナ名> <コマンド>: 実行中のコンテナ内でコマンドを実行

4. 簡単なサンプル:Nginx Webサーバーを動かす

例として、Webサーバー「Nginx」をDockerコンテナで動かしてみましょう。

1. 簡単なHTMLファイルを作成: index.html という名前で、好きな内容のHTMLファイルを作成します。(例: <h1>Hello Docker!</h1>

2. Dockerfileを作成: Dockerfile という名前のファイルを同じディレクトリに作成し、以下の内容を記述します。

Dockerfile

# ベースとなるイメージを指定 (公式のNginxイメージを利用)
FROM nginx:alpine

# ローカルのindex.htmlをコンテナ内のNginx公開ディレクトリにコピー
COPY index.html /usr/share/nginx/html/index.html

# (今回は不要ですが) コンテナ起動時に実行するコマンドを指定する場合
# CMD ["nginx", "-g", "daemon off;"]

3. Dockerイメージをビルド: ターミナル(コマンドプロンプト)で、Dockerfileindex.htmlがあるディレクトリに移動し、以下のコマンドを実行します。

Bash

docker build -t my-nginx-image .


(my-nginx-imageという名前でイメージが作成されます)

4. Dockerコンテナを実行: 以下のコマンドでコンテナを起動します。

Bash

docker run -d -p 8080:80 --name my-nginx-container my-nginx-image

  • -d: バックグラウンドで実行
  • -p 8080:80: ホストPCの8080番ポートをコンテナの80番ポートに接続
  • --name my-nginx-container: コンテナに名前をつける

5. ブラウザで確認: Webブラウザを開き、 http://localhost:8080 にアクセスします。作成したindex.htmlの内容が表示されれば成功です!

6. コンテナの停止と削除:

Bash

docker stop my-nginx-container
docker rm my-nginx-container

このように、数ステップでWebサーバー環境を構築・実行できました。

5. DockerとKubernetesの関係 - どう違う?どう連携する?

Dockerと共によく名前を聞く技術に**Kubernetes(クバネティス、K8s)**があります。これらは混同されやすいですが、役割が異なります。

  • Docker: 個々のコンテナを作成し、実行するための技術(エンジン)。コンテナのライフサイクル管理が主。
  • Kubernetes: 多数のコンテナを管理・運用(オーケストレーション)するためのプラットフォーム。複数のサーバー(ノード)にまたがるコンテナ群のデプロイ、スケーリング(増減)、ヘルスチェック(監視・自動復旧)などを自動化する。

関係性:

  • Kubernetesは、Docker(などのコンテナランタイム)によって作成されたコンテナを管理対象とします。
  • Docker単体でもアプリケーションは動かせますが、本番環境で多数のコンテナを安定稼働させるには、スケーリングや障害時の自動復旧など、Kubernetesのようなオーケストレーションツールが必要になることが多いです。
  • 小規模なアプリケーションや、単一ホストで複数のコンテナを連携させる場合は、Docker ComposeというDocker公式のツールも便利です。

まとめると:

  • 船(コンテナ)を作るのがDocker
  • その船(コンテナ)をたくさん効率よく管理・運航するのがKubernetes

というイメージです。

6. まとめ

Dockerは、コンテナ技術を用いてアプリケーションの実行環境をパッケージ化し、環境差異の問題を解消する画期的なプラットフォームです。開発効率の向上、デプロイの高速化、リソースの有効活用など、多くのメリットをもたらします。

基本的な使い方をマスターすれば、開発プロセスが劇的に改善される可能性があります。今回紹介した内容はDockerの入口にすぎませんが、この記事がDockerの世界への第一歩となれば幸いです。

ぜひ、実際に手を動かしてDockerの便利さを体験してみてください!

© 2025 サプリスト通信