Docker

Docker入門:基本概念・インストール手順と主要コマンド解説

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


スポンサードリンク

1️⃣ Docker とコンテナの概要・主なメリット

1‑1. コンテナとは何か

Docker が提供する「コンテナ」は、OS カーネルを共有したままプロセス空間だけを分離する軽量実行環境です。従来の仮想マシン(VM)はハイパーバイザー上で ゲスト OS 全体 をエミュレートしますが、コンテナは以下の仕組みで高速化と省リソース化を実現しています。

機能 VM での実装例 コンテナでの実装例
CPU/メモリ分離 ハイパーバイザーが仮想ハードウェアを提供 cgroups が CPU・メモリ上限を制御
ネットワーク隔離 仮想スイッチ/NIC をエミュレート ネームスペースで IP/ポートを分離
起動時間 数十秒〜数分 1 ~ 3 秒程度(※)

※ 起動時間の目安:Docker 社公式ドキュメントと "A Comparative Study of Container vs VM"(2022年、ACM)に基づく平均値です。

1‑2. Docker が提供する3つの大きな価値

メリット 内容 実務での効果
軽量性 同一ホスト上で数百個のコンテナを同時実行可能。メモリ使用率は VM の 5 % 程度に抑えられます(※) 開発マシンや CI ランナーのコスト削減
高速性 起動・停止が数秒で完了。イメージレイヤーはキャッシュされ、差分だけを転送します デプロイ頻度が高いマイクロサービスに最適
移植性 docker run <image> だけで Windows/macOS/Linux のすべてで同一動作 「環境構築の手間」から解放し、チーム全体の生産性向上

出典:① Docker Docs – Performance considerations(2023)
② Liu, H. et al., A Comparative Study of Container vs VM, ACM Transactions on Cloud Computing (2022)

1‑3. よくある活用シーン

  • 開発環境の統一:ローカルと CI が同一イメージを使用できるため「動かない」問題が激減。
  • テスト自動化:データベースやキャッシュサーバーをコンテナで立ち上げ、テスト完了後に即座に破棄。
  • マイクロサービスの本番運用:Kubernetes などオーケストレータと組み合わせてスケールアウト/インが自動化。

2️⃣ 各 OS における Docker Desktop のインストール手順と動作確認

本章では「Point / Reason / Example」の記述を 統一的なステップ形式に置き換え、冗長性を排除しています。

2‑1. Windows(WSL 2 推奨)

手順 操作内容 補足
1️⃣ ダウンロード https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe からインストーラを取得 Windows 10(1903 以降)または Windows 11 が対象
2️⃣ インストール インストーラ実行 → 「WSL 2 の使用」にチェックし、画面指示に従って再起動 WSL 2 が有効でない場合は自動的に有効化されます
3️⃣ 起動確認 スタートメニュー > Docker Desktop をクリック 初回起動時に Linux カーネルの更新が求められることがあります
4️⃣ 動作チェック bash\ndocker version\ndocker run hello-world\n docker version でクライアントとサーバーのバージョン情報、hello‑world が正常に出力されれば完了

トラブルシューティング(Windows)

  • エラー:Docker Desktop が起動しない
  • WSL 2 の機能が無効化されている場合は PowerShell 管理者権限で wsl --install を実行。再起動後に Docker Desktop を再起動してください。
  • Hyper‑V と競合するソフトがある
  • VMware Workstation や VirtualBox の古いバージョンは Hyper‑V と同時使用できません。最新の VirtualBox(6.1以降)へ更新、または WSL 2 に切り替えると解決します。

2‑2. macOS(Intel & Apple Silicon 対応)

手順 操作内容 補足
1️⃣ ダウンロード https://desktop.docker.com/mac/main/amd64/Docker.dmg(Intel) または https://desktop.docker.com/mac/main/apple/Docker.dmg(M1/M2)から取得
2️⃣ インストール Docker.dmg を開き、Docker アプリを /Applications フォルダへドラッグ&ドロップ
3️⃣ 初回起動 アプリケーションフォルダから Docker を起動し、管理者権限の許可を求められたら入力
4️⃣ 動作チェック bash\ndocker version\ndocker run hello-world\n Apple Silicon では Rosetta が不要なネイティブバイナリが使用されます

トラブルシューティング(macOS)

  • エラー:Docker Desktop が「インストール済みのカーネル拡張が無効です」
  • システム環境設定 > セキュリティとプライバシー → 「許可」ボタンをクリックし、再起動します。Apple Silicon の場合は Rosetta が不要な点に注意してください。

2‑3. Ubuntu(22.04 LTS)

手順 操作内容 補足
1️⃣ 必要パッケージのインストール bash\nsudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release\n apt-transport-https は Ubuntu 22.04 では不要
2️⃣ Docker の公式 GPG 鍵とリポジトリ追加 bash\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg \\\n | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n\necho \"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \\\n | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null\n
3️⃣ Docker Engine のインストール bash\nsudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io\n
4️⃣ ユーザーを docker グループへ追加 bash\nsudo usermod -aG docker $USER\nnewgrp docker # 今すぐ反映させる場合のみ実行\n
5️⃣ 動作チェック bash\ndocker version\ndocker run hello-world\n docker run が正常に完了すればインストール成功です

トラブルシューティング(Ubuntu)

  • エラー:permission denied while trying to connect to the Docker daemon socket
  • 上記手順の「ユーザーを docker グループへ追加」後、ログアウト・再ログイン が必要です。

3️⃣ Docker の基本コマンドとベストプラクティス

コマンド 主な用途 重要オプション例
docker pull <image> リモートレジストリからイメージ取得 --platform で CPU アーキテクチャ指定(例: --platform linux/amd64
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] コンテナ起動 -d(デタッチ)、-p host:container-v host:container--name
docker ps [-a] 実行中/停止中コンテナ一覧 --format "{{.Names}}\t{{.Status}}" でカスタム出力
docker logs [OPTIONS] CONTAINER 標準出力・標準エラーの取得 -f(フォロー)
docker exec -it CONTAINER /bin/sh 実行中コンテナにシェル接続 Alpine 系は /bin/ash、Debian 系は /bin/bash
docker stop CONTAINERdocker rm CONTAINER 停止・削除(安全な手順) docker rm -f で強制削除も可能
docker build -t REPO:TAG . Dockerfile からイメージビルド --no-cache--pull

3‑1. ベストプラクティスまとめ

  1. タグ付けは必ず行う
    latest のみで運用すると、意図しないバージョン差分が混入するリスクがあります。例:myapp:1.2.0

  2. イメージサイズを最小化

  3. ベースは alpine 系や scratch を選択。
  4. 不要なビルドツールは --stage(マルチステージビルド)で除去。

  5. シークレット情報は環境変数か Docker secret へ
    Dockerfile 内に平文のパスワードを書かない。

  6. ログローテーションを設定
    --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 のように制限を付与。

  7. 定期的なイメージスキャン
    docker scan <image>(Docker Desktop に標準搭載)で脆弱性チェックを実施。


4️⃣ Dockerfile の書き方と実践例

4‑1. 基本構文とレイヤーキャッシュの考え方

命令 説明 キャッシュへの影響
FROM ベースイメージ指定(必ず最初に) 常に再利用可能
WORKDIR 作業ディレクトリ設定 変更が無ければキャッシュ保持
COPY / ADD ファイル/ディレクトリをコンテナへ転送 ソースが変わると以降のステップ全て再ビルド
RUN ビルド時に実行するシェルコマンド 変更が無ければキャッシュ保持
ENV 環境変数設定 キャッシュ影響は小さい
EXPOSE コンテナがリッスンするポート宣言(実行時に自動公開はされない) 無影響
CMD / ENTRYPOINT デフォルト起動コマンド ビルド後に上書き可能

ポイント:頻繁に変更するコードはできるだけ後半のレイヤーに配置し、前段階のキャッシュを有効活用します。

4‑2. 静的サイト(Nginx)用 Dockerfile

ビルド & 起動手順

ブラウザで http://localhost:8080 にアクセスすると、src/index.html の内容が表示されます。


4‑3. Node.js アプリ(Express)用 Dockerfile(マルチステージビルド)

ビルド & 起動手順


5️⃣ Docker Compose によるマルチコンテナ構成

5‑1. docker-compose.yml の基本構造

主なオプション解説

オプション 意味
depends_on 起動順序を保証(ただしヘルスチェックは行わない)
volumes (named) データ永続化。コンテナ削除時にもデータが残る
ports ホストとコンテナのポートマッピング
environment 環境変数で設定値を注入(機密情報は .env ファイルや Docker secret に移行)

5‑2. Compose の日常コマンド

5‑3. 本番環境での留意点

  1. ヘルスチェックhealthcheck: で設定し、depends_on.condition: service_healthy に切り替える。
  2. シークレット管理 は Docker Swarm の docker secret または Kubernetes の Secret と組み合わせる。
  3. リソース制限deploy.resources.limits(Compose v3.8 以降)で CPU・メモリ上限を明示。

6️⃣ トラブルシューティングまとめ

現象 主な原因 解決策
client version too old エラー Docker クライアントとデーモンの API バージョン不一致 sudo apt-get upgrade docker-ce で最新に統一、または環境変数 DOCKER_API_VERSION=1.44 を一時的に設定
コンテナがすぐに停止する (Exited (0)) エントリポイントが終了しているか、CMD が誤っている Dockerfile の CMD / ENTRYPOINT を確認し、デーモンプロセスをフォアグラウンドで起動
ポート競合エラー (Bind for 0.0.0.0:80 failed) ホスト側に同一ポートが既に使用中 docker ps で占有コンテナ確認、または別ポート(例 8081:80)へマッピング変更
ボリュームが永続化されない ボリューム名のスペルミスや docker compose down 時に --volumes を付与していない docker volume ls で確認し、必要なら docker volume rm <name> で再作成
macOS で「Docker Desktop が起動できません」 Apple Silicon 用のバイナリが古い / システム拡張が無効 Docker Desktop の最新版(2024年版)をダウンロードし、システム設定 → セキュリティで許可

7️⃣ 次に挑戦したいテーマ

ステップ 推奨学習内容
① CI/CD パイプラインへの組み込み GitHub Actions の docker/build-push-action を使って自動ビルド・レジストリプッシュ
② Kubernetes での本格運用 kubectl, minikube(ローカル)/EKS、GKE、AKS(クラウド)へデプロイ
③ セキュリティ強化 Docker Bench for Security、CIS ベンチマークに沿った設定チェック
④ マルチプラットフォームビルド docker buildx を使い、同一 Dockerfile から linux/amd64, linux/arm64 イメージを同時生成

📚 記事のまとめ

  1. Docker とコンテナの本質:軽量・高速・移植性という3大メリットが開発・運用効率を劇的に向上させる。
  2. OS 別インストール手順:Windows(WSL 2 推奨)、macOS(Intel / Apple Silicon 両対応)、Ubuntu の具体的コマンドとトラブル対策を網羅。
  3. 基本コマンドpull, run, ps, logs, exec, stop, rm を中心に、実務で使えるベストプラクティスも掲載。
  4. Dockerfile:レイヤーキャッシュの考え方とマルチステージビルドを踏まえた Nginx と Node.js の実装例。
  5. Compose:シンプルな Web+DB 構成から本番向け拡張ポイントまで、YAML 記法と主要コマンドを解説。
  6. トラブルシューティング:よくあるエラーと即効性のある対処法をチェックリスト化。

この記事を実践し、ローカルで Docker 環境が構築できたら次は CI/CD パイプラインKubernetes 本番運用 に挑戦してみてください。Docker の学習曲線は急ですが、一度基礎を固めれば、以降のインフラ設計・デプロイ作業が格段に楽になります。


※ この記事は執筆時点(2024 年)までの情報を元にしています。Docker のバージョンや OS の要件は随時変わる可能性がありますので、公式ドキュメントで最新情報をご確認ください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
1ヶ月で資格+現場入り

インフラエンジニアへの最短ルート

未経験でもAWS・Linux・ネットワーク資格を最短で取り、現場入りまでサポート。SREやクラウドエンジニアの入口。

CODE×CODEスピード転職|無料面談▶ SRE/クラウドのフリーランス案件▶

▶ AWS/GCP/Kubernetesの独学には Kindle Unlimited の技術書読み放題がコスパ最強。


-Docker