【Docker入門】初心者向け完全ガイド:コンテナ化の基礎からWebアプリ/DB連携環境構築

なぜ今、Dockerが必要なのか?

「私の環境では動いたのに、本番環境ではエラーが出た…」

「新しい開発メンバーが入るたびに、環境構築に丸一日かかってしまう…」

このような開発現場の共通の悩みを解決するのが、Dockerコンテナ技術です。Dockerは、アプリケーションとその実行に必要なすべての環境(ライブラリ、設定ファイルなど)を「コンテナ」と呼ばれる独立したパッケージに隔離することで、どのPCやサーバーでも一貫した動作を保証します。

この記事では、Docker初心者の方に向けて、基本概念からWebアプリケーションを動かすまでの具体的なハンズオンを通じて、Dockerの強力なパワーを体験していただきます。

1. Dockerの基本概念を理解する

Dockerを使い始める前に、特に重要な3つのキーワードを押さえておきましょう。

1-1. コンテナ (Container)

アプリケーションの実行環境全体をパッケージ化した、軽量で独立した実行ユニットです。ホストOSから隔離されているため、異なるコンテナが互いに影響を与え合うことはありません。コンテナは、仮想マシン(VM)とは異なり、ホストOSのカーネルを共有するため、数秒で起動する圧倒的なスピードが魅力です。

1-2. イメージ (Image)

コンテナを作成するための設計図であり、アプリケーションのコード、ランタイム、設定などが含まれる読み取り専用のテンプレートです。イメージは、複数の層(レイヤー)で構成されており、変更があった層だけをダウンロードするため、効率的な配布が可能です。

1-3. Dockerfile

イメージを作成するための手順(ベースOSの指定、パッケージのインストール、ファイルコピーなど)を記述するテキストファイルです。このファイルをチーム内で共有することで、誰でも完全に同じ環境を構築できます。

【内部リンク】 Dockerの歴史や仮想マシンとの詳細な違いについては、「DockerとVMの徹底比較:どちらを選ぶべきか」をご覧ください。

2. Docker入門ハンズオン:最初のコンテナを起動する

まずは、Dockerが正しくインストールされているかを確認し、最もシンプルなコンテナを起動してみましょう。

Step 1: Dockerのインストールとバージョン確認

Docker Desktop(Windows/macOS)またはDocker Engine(Linux)をインストールした後、ターミナルで以下のコマンドを実行します。

Bash

docker --version

バージョン情報が表示されない場合は、Docker公式サイトから最新版をダウンロードしてインストールしてください。

Step 2: Hello Worldコンテナを実行

docker runコマンドは、イメージをダウンロードし(ローカルになければDocker Hubから取得)、コンテナを作成して実行する、Dockerで最も基本となるコマンドです。

Bash

docker run hello-world

実行すると、Dockerが正しく機能していることを示すメッセージが表示され、コンテナはすぐに終了します。

Step 3: Nginx Webサーバーを動かす

次に、実用的な例として、Webサーバーの定番であるNginxをコンテナで起動し、ブラウザからアクセスしてみましょう。

Bash

docker run -d -p 8080:80 --name my-webserver nginx
オプション意味
-dデタッチモード。コンテナをバックグラウンドで実行します。
-p 8080:80ポートマッピング。ホストOSの8080番ポートをコンテナの80番ポートに接続します。
--nameコンテナに任意の名前を付けます。
nginx使用するイメージ名です。

ブラウザで http://localhost:8080 にアクセスし、「Welcome to nginx!」が表示されることを確認してください。

Step 4: コンテナの管理

起動中のコンテナを確認し、停止・削除する方法です。

Bash

# 起動中のコンテナ一覧を表示
docker ps

# コンテナのログを確認(エラー解析などに必須)
docker logs my-webserver

# コンテナを停止
docker stop my-webserver

# 停止したコンテナを削除
docker rm my-webserver

3. Dockerfileでカスタムイメージを作成する(アプリケーションのコンテナ化)

外部から取得したイメージだけでなく、自分のアプリケーションを実行するためのカスタムイメージを作成する手順です。カスタムイメージの作成は、アプリケーションを配布・デプロイする上での基本となります。

Step 1: プロジェクトファイルの準備

以下の内容でファイルを作成します。今回はPythonとFlaskを使います。

/my_flask_app
├── Dockerfile
├── app.py
└── requirements.txt
  • requirements.txt: Flaskを記述。
  • app.py: ポート5000で動作する簡単なFlaskアプリを記述。

Step 2: Dockerfileを記述する

Dockerfileの各命令はレイヤーとして積み重なります。頻繁に変更されない命令(依存関係のインストールなど)を先に記述することで、ビルド時間を短縮できます。

Dockerfile

# Dockerfile

# ベースイメージの指定: 軽量な slim バージョンを選択
FROM python:3.10-slim

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

# 依存関係のコピーとインストール(ここを先に実行しキャッシュを効かせる)
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションコードをコピー
COPY . /app/

# コンテナ起動時に実行するコマンド(ENTRYPOINTとCMDの組み合わせもよく使われます)
CMD ["python", "app.py"]

Step 3: イメージのビルドと実行

Dockerfileがあるディレクトリで実行します。

Bash

# イメージをビルドし、「my-flask-app」というタグを付ける
docker build -t my-flask-app .

# コンテナを実行 (ホストの8000番をコンテナの5000番にマッピング)
docker run -d -p 8000:5000 --name flask-app my-flask-app

http://localhost:8000 にアクセスして、アプリケーションが動いているか確認しましょう。

4. Docker Compose:複数コンテナの環境を一括管理

実際の開発では、Webサーバーとデータベース(例: PostgreSQL, MySQL)など、複数のコンテナを同時に連携させる必要があります。これを実現するのがDocker Composeです。複雑な設定を一つのファイルに集約できます。

Docker Composeの基本構成

ここでは、Webアプリとデータベースのデータをホスト側に保存する(データ永続化)ためのvolumes設定も含めます。

YAML

# docker-compose.yml (WebアプリとDBの連携例)
version: '3.8'

services:
  web:
    build: . # Dockerfileを使用してWebアプリのイメージをビルド
    ports:
      - "8000:5000"
    depends_on:
      - db # dbサービスが起動してからwebサービスを起動する

  db:
    image: postgres:latest # 公式のPostgreSQLイメージを使用
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    # ボリューム設定: db-dataという名前の永続化領域にデータを保存
    volumes:
      - db-data:/var/lib/postgresql/data 

# ボリュームを定義(データの永続化に必須)
volumes:
  db-data:

コマンド

Bash

# サービスの起動(WebアプリとDBが同時に立ち上がり、ネットワークも自動構築される)
docker compose up -d --build

# サービスの一括停止・削除 (ボリュームのデータは残る)
docker compose down

# ボリュームのデータも含めて完全に削除
docker compose down -v

まとめ:Dockerで開発効率を劇的に改善しよう

Dockerは、開発環境の構築にかかる時間と労力を最小限に抑え、再現性の高い安定した環境をチーム全体に提供します。

今回ご紹介した基本のコマンド、Dockerfile、そしてDocker Composeを使いこなせば、あなたの開発プロセスは劇的に改善されるはずです。今日からコンテナ化を進め、開発の品質とスピードを両立させましょう!


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です