Docker入門:コンテナ技術を基礎から理解する実践ガイド

インフラ・ネットワーク

Dockerとは何か?初心者でも分かるコンテナ技術の基礎

「Dockerって聞くけど、何がそんなに便利なの?」「仮想マシンと何が違うの?」こんな疑問を持っている方も多いのではないでしょうか。本記事では、Docker初心者の方向けに、実際の使用例を交えながら基礎から実践まで分かりやすく解説します。

Dockerが解決する問題

開発現場でよくある「俺の環境では動くのに…」問題。Dockerはまさにこれを解決するツールです。

従来の問題点

  • 開発環境と本番環境の差異によるバグ
  • 新しいメンバーの環境構築に丸一日かかる
  • 「PHP 7.4で動かしてたけど、本番は8.0だった」という事故
  • 複数プロジェクトで異なるバージョンの言語やDBが必要

Dockerがもたらす解決策

  • 環境の完全な再現性:どこでも同じ環境で動作
  • 高速な環境構築:コマンド一つで環境が立ち上がる
  • リソースの効率化:仮想マシンより軽量
  • 環境の使い捨て:不要になったらすぐ削除、クリーンな状態を維持
じゅんち8

初めてDockerを使ったとき、環境構築が30秒で終わって感動しました。それまで新人さんの環境構築に丸一日付き合っていたのが嘘みたいです。今では開発環境は全部Docker化しています。

Dockerの基本概念を理解する

3つの重要な要素

要素 説明 例え
イメージ アプリケーションの設計図 クッキーの型
コンテナ イメージから作られた実行環境 型で作ったクッキー
Dockerfile イメージの作り方を書いたレシピ クッキーのレシピ

Dockerのインストール(各OS別)

macOS

# Homebrewを使用
brew install docker
brew install docker-compose

# Docker Desktopをインストール(GUI付き)
# https://www.docker.com/products/docker-desktop/ からダウンロード

Ubuntu/Debian

# 公式インストールスクリプト
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# ユーザーをdockerグループに追加(sudo不要にする)
sudo usermod -aG docker $USER

# Docker Composeのインストール
sudo apt update
sudo apt install docker-compose-plugin

Windows(WSL2推奨)

# WSL2をインストール後
wsl --install

# Docker Desktop for Windowsをインストール
# https://www.docker.com/products/docker-desktop/ からダウンロード

最初の一歩:Hello Worldを動かす

# Dockerが正しくインストールされているか確認
docker --version

# 初めてのコンテナを実行
docker run hello-world

# nginxサーバーを起動してみる
docker run -d -p 8080:80 nginx

# ブラウザで http://localhost:8080 にアクセス

実践:WordPressを5分で立ち上げる

Docker Composeを使えば、WordPress + MySQLの環境が数分で構築できます。

docker-compose.ymlの作成

version: '3.8'

services:
  db:
    image: mysql:8.0
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wp-content:/var/www/html/wp-content

volumes:
  db_data:

起動コマンド

# docker-compose.ymlがあるディレクトリで実行
docker-compose up -d

# 起動確認
docker-compose ps

# ログを見る
docker-compose logs -f

# 停止
docker-compose down

# データも含めて削除(やり直したいとき)
docker-compose down -v

これだけで http://localhost:8000 でWordPressが使えるようになります。

じゅんち8

昔はWordPressの環境構築にMAMPやXAMPPを使っていましたが、Dockerを使うようになってから圧倒的に楽になりました。特に複数のプロジェクトを並行して開発する時は、ポート番号を変えるだけで済むので便利です。

よく使うDockerコマンド集

イメージ操作

# イメージ一覧
docker images

# イメージをダウンロード
docker pull ubuntu:22.04

# 不要なイメージを削除
docker rmi イメージID

# 使われていないイメージを一括削除
docker image prune -a

コンテナ操作

# 実行中のコンテナ一覧
docker ps

# 停止中も含めた全コンテナ一覧
docker ps -a

# コンテナを起動
docker start コンテナID

# コンテナを停止
docker stop コンテナID

# コンテナに入る(デバッグ時に便利)
docker exec -it コンテナID /bin/bash

# コンテナのログを見る
docker logs -f コンテナID

# 停止中のコンテナを一括削除
docker container prune

Dockerfileの基本:自分だけの環境を作る

Node.jsアプリケーション用のDockerfileの例:

# ベースイメージを指定
FROM node:18-alpine

# 作業ディレクトリを設定
WORKDIR /app

# package.jsonをコピー
COPY package*.json ./

# 依存関係をインストール
RUN npm ci --only=production

# アプリケーションのソースコードをコピー
COPY . .

# アプリケーションが使うポートを公開
EXPOSE 3000

# アプリケーションの起動コマンド
CMD ["node", "index.js"]

ビルドと実行

# イメージをビルド
docker build -t my-node-app .

# コンテナとして実行
docker run -p 3000:3000 my-node-app

開発環境でのDockerベストプラクティス

1. .dockerignoreを使う

# .dockerignore
node_modules
npm-debug.log
.git
.env
.DS_Store
*.log

2. マルチステージビルドで軽量化

# マルチステージビルドの例
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]

3. ボリュームマウントで開発効率UP

# 開発時はソースコードをマウント
docker run -v $(pwd):/app -p 3000:3000 my-app

# docker-compose.ymlでの設定
services:
  app:
    volumes:
      - .:/app
      - /app/node_modules  # node_modulesは除外

トラブルシューティング

よくある問題と解決法

問題 解決法
ポートが既に使用中 lsof -i:ポート番号で確認して停止
ディスク容量不足 docker system prune -aで不要なデータ削除
権限エラー(Linux) ユーザーをdockerグループに追加
コンテナが起動しない docker logs コンテナIDでエラー確認

次のステップ:学習リソース

Dockerの基本を理解したら、以下のトピックを学習することをおすすめします:

  • Docker Compose:複数コンテナの管理(WireGuard + AdGuardHomeの記事でも活用)
  • Kubernetes:本番環境でのコンテナオーケストレーション
  • CI/CD統合:GitHub ActionsやGitLab CIでのDocker活用
  • セキュリティ:コンテナのセキュリティベストプラクティス

まとめ:Dockerで開発効率を劇的に向上させる

Dockerは最初は少し難しく感じるかもしれませんが、一度理解すれば開発効率が劇的に向上します。特に以下のメリットは大きいです:

  1. 環境構築の時間短縠:数時間→数分に
  2. 環境差異によるバグの削減:「動かない」問題がなくなる
  3. チーム開発の効率化:全員が同じ環境で開発
  4. 本番環境との一致:開発と本番の差異を最小化
じゅんち8

Dockerを導入してから、「環境構築で詰まる」ということがほぼなくなりました。特にAlmaLinuxとDebianの比較記事で触れたような、OSレベルの違いも吸収できるのが素晴らしいです。今では必須ツールですね。

まずは簡単なWebサーバーやデータベースをDockerで動かしてみることから始めてみてください。慣れてきたら、自分のプロジェクトをDocker化してみると、その便利さを実感できるはずです。

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