Docker入門 | コンテナ技術の基礎から実践まで

公開日:

このセクションでは、 Docker を使ったコンテナ技術の基礎から実践までを解説します。 開発環境の構築、アプリケーションのコンテナ化、Docker Composeによる複数コンテナの管理まで、実際に手を動かしながら学べる内容です。

Docker入門ガイド

このセクションについて

私は普段、以下の環境でDockerを使用しています。

  • 開発環境: M4 Mac mini上のDocker Desktopで開発用コンテナを運用
  • 本番環境: AlmaLinux 10サーバー上でDocker Engineを使用
  • CI/CD: GitHub ActionsでDockerイメージをビルド・デプロイ

このセクションでは、これらの経験をもとに、Dockerの基礎から実践的な使い方まで解説します。

Dockerとは

Dockerは、アプリケーションとその依存関係を「コンテナ」という単位でパッケージ化し、どの環境でも同じように動かせる技術です。

Dockerでできること

  • 環境の統一: 「自分のPCでは動くのに…」を解消
  • 素早いセットアップ: 開発環境を数分で構築
  • 軽量な仮想化: VMより少ないリソースで動作
  • 再現性: 同じ環境を何度でも作成可能
  • スケーラビリティ: 本番環境での水平スケールが容易

具体的なユースケース

ユースケース説明
開発環境の構築Node.js、Python、PHPなどの環境を即座に用意
データベースの起動MySQL、PostgreSQL、MongoDBを手軽に起動
CIでのテストGitHub ActionsなどでテストをDocker内で実行
本番デプロイコンテナイメージをそのまま本番環境にデプロイ
マイクロサービス複数のサービスを個別のコンテナで管理

Dockerと仮想マシン(VM)の違い

Dockerを理解するには、従来の仮想マシン(VM)との違いを知ることが重要です。

観点Docker(コンテナ)仮想マシン(VM)
起動時間数秒数十秒〜数分
リソース消費軽量(MB単位)重い(GB単位)
分離レベルカーネル共有完全分離
OSホストOSのカーネルを共有個別にOSが必要
用途アプリ実行、開発環境OS検証、GUI環境

図解:アーキテクチャの違い

作成予定

Dockerの基本用語

Dockerを使う上で知っておくべき基本用語です。

用語説明
イメージ(Image)コンテナの元となるテンプレート。読み取り専用
コンテナ(Container)イメージから作成された実行環境
Dockerfileイメージを作成するための設計図
Docker Hubイメージを公開・共有するレジストリ
Docker Compose複数コンテナを定義・管理するツール
ボリューム(Volume)コンテナのデータを永続化する仕組み

イメージとコンテナの関係

【イメージ】 → 【コンテナ】
(設計図・テンプレート) (実際に動く環境)
---
nginx:latest → Webサーバーコンテナ
mysql:8.0 → データベースコンテナ
python:3.12 → Python実行環境コンテナ

イメージは「クラス」、コンテナは「インスタンス」と考えるとわかりやすいです。

環境別インストール方法

Mac(Docker Desktop)

Apple Silicon(M1/M2/M3/M4)に対応した記事を執筆予定。

Linux(Docker Engine)

サーバー環境ではDocker Engineを直接インストールします。

ディストリビューションインストール手順
AlmaLinux 10手順
Ubuntu 24.04手順

Windows(Docker Desktop + WSL2)

WSL2と組み合わせて使用する記事を執筆予定。

Dockerの基本操作

よく使うコマンド一覧

コマンド説明
docker runコンテナを作成・起動docker run -d nginx
docker ps実行中のコンテナ一覧docker ps -a
docker stopコンテナを停止docker stop コンテナID
docker rmコンテナを削除docker rm コンテナID
docker imagesイメージ一覧docker images
docker pullイメージをダウンロードdocker pull nginx
docker buildDockerfileからイメージ作成docker build -t myapp .
docker logsコンテナのログを表示docker logs コンテナID
docker execコンテナ内でコマンド実行docker exec -it コンテナID bash

実際に試してみる:Nginxを起動

最も簡単な例として、Webサーバー(Nginx)を起動してみましょう。

Terminal window
# Nginxコンテナを起動(バックグラウンド実行)
docker run -d -p 8080:80 --name my-nginx nginx
# ブラウザで http://localhost:8080 にアクセス
オプション意味
-dバックグラウンドで実行(デタッチモード)
-p 8080:80ホストの8080番ポートをコンテナの80番に転送
--name my-nginxコンテナに名前を付ける

コンテナの停止・削除

Terminal window
# コンテナを停止
docker stop my-nginx
# コンテナを削除
docker rm my-nginx

Docker Compose入門

複数のコンテナを連携させる場合は、Docker Composeを使います。

Docker Composeとは

compose.ymlというファイルに複数のコンテナの設定を記述し、一括で起動・停止できるツールです。

例:WordPressとMySQLの構成

compose.yml
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
MYSQL_ROOT_PASSWORD: rootpassword
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:

起動・停止コマンド

Terminal window
# 起動(バックグラウンド)
docker compose up -d
# 停止
docker compose down
# ログを確認
docker compose logs -f

コンテンツ一覧

基礎知識

執筆予定

インストール

AlmaLinux 10【最新】Dockerインストール手順|RHEL 10互換
AlmaLinux 10【最新】Dockerインストール手順|RHEL 10互換
最新OS AlmaLinux 10環境にDocker Engineをインストールする手順。Podmanとの競合回避や、最新カーネル環境でのコンテナ構築について解説します。
example.com
Ubuntu 24.04 LTSにDockerをインストールする手順(公式apt・Compose対応)
Ubuntu 24.04 LTSにDockerをインストールする手順(公式apt・Compose対応)
Ubuntu 24.04 LTS(noble)にDocker Engineを公式リポジトリからインストールする手順を解説。GPGキー設定、apt追加、Compose、動作確認、一般ユーザーでの実行、よくあるエラー対策まで完全網羅。
example.com

実践

執筆予定

筆者のおすすめ構成

実際に使ってみた経験から、以下の構成をおすすめします。

ローカル開発環境

Docker Desktopを使うのが最も手軽です。

  • GUIで管理できる
  • Docker Composeが標準で使える
  • Kubernetesも有効化できる(オプション)

本番サーバー

Docker Engine + Docker Composeの構成がシンプルでおすすめです。

  • Docker Desktopは不要(GUIがないため)
  • systemdでDockerサービスを管理
  • 必要に応じてDocker SwarmやKubernetesに移行

学習目的

まずは以下の順序で学ぶことをおすすめします。

  1. Docker基本操作: docker rundocker psなどを習得
  2. Dockerfile: 自分でイメージを作成
  3. Docker Compose: 複数コンテナの連携
  4. ネットワーク・ボリューム: データの永続化と通信

よくある質問(FAQ)

Q. Dockerは無料で使えますか?

Docker Engine(CLI)は完全に無料です。

Docker Desktopは以下の条件で無料です。

  • 個人利用
  • 小規模企業(従業員250人未満、年間売上1,000万ドル未満)
  • 教育機関、オープンソースプロジェクト

大企業での商用利用は有料サブスクリプションが必要です。

Q. DockerとPodmanの違いは?

観点DockerPodman
デーモン必要(dockerd)不要(デーモンレス)
ルート権限通常は必要ルートレスが標準
互換性-Dockerコマンドと互換
提供元Docker社Red Hat

PodmanはDockerの代替として使えますが、エコシステムはDockerの方が充実しています。

Q. Docker DesktopとDocker Engineの違いは?

項目Docker DesktopDocker Engine
GUIありなし
対応OSMac、Windows、LinuxLinuxのみ
用途開発環境サーバー、本番環境
追加機能Kubernetes、拡張機能最小限

Q. コンテナ内のデータはどうなりますか?

コンテナを削除すると、コンテナ内のデータも消えます。データを永続化するにはボリュームを使用します。

Terminal window
# ボリュームを作成してマウント
docker run -v mydata:/data nginx

Q. Dockerが遅いと感じたら?

以下を確認してください。

  • Mac: Docker Desktopのリソース設定(CPU、メモリ)を増やす
  • Windows: WSL2バックエンドを使用しているか確認
  • 全般: 不要なイメージ・コンテナを削除(docker system prune

トラブルシューティング

permission deniedエラー

Got permission denied while trying to connect to the Docker daemon socket

対処法(Linux):

Terminal window
# ユーザーをdockerグループに追加
sudo usermod -aG docker $USER
# 再ログインして反映

ポートが使用中

Bind for 0.0.0.0:8080 failed: port is already allocated

対処法:

Terminal window
# 使用中のポートを確認
lsof -i :8080
# 別のポートを使用
docker run -p 8081:80 nginx

ディスク容量不足

no space left on device

対処法:

Terminal window
# 不要なデータを一括削除
docker system prune -a
# ボリュームも含めて削除
docker system prune -a --volumes

検証環境

マシンアーキテクチャDockerバージョン最終検証日
Mac mini M4 Proaarch64(ARM64)Docker Desktop 4.372025年1月
Almalinux 10.1x86_64Docker Engine 27.x2025年1月

更新履歴

  • 2024-12-25: 初版公開

関連記事

仮想化全般

仮想化技術入門 | VM・コンテナの基礎から実践まで
仮想化技術入門 | VM・コンテナの基礎から実践まで
仮想化技術の基礎知識から、UTM、KVM、Docker、WSLなど各ツールの使い方まで解説。Mac、Linux、Windows環境に対応した仮想環境構築ガイドです。
example.com

Linux環境

AlmaLinux 10 の使い方・インストール手順まとめ|Linux
AlmaLinux 10 の使い方・インストール手順まとめ|Linux
AlmaLinux 10 のインストールから初期設定、DockerやVSCodeなどの環境構築手順を網羅したセットアップガイドです。
example.com
Ubuntu 24.04の使い方・インストール手順まとめ|Linux
Ubuntu 24.04の使い方・インストール手順まとめ|Linux
Ubuntu 24.04 LTS (Noble Numbat) のインストール手順から、日本語化、Docker、VSCodeなどの環境構築までを網羅したセットアップガイドです。
example.com