本文へスキップ
← 記事一覧に戻る

dockerについて

Dockerとは?

Dockerは、アプリの実行に必要な環境(プログラム本体、ライブラリ、設定など)を「コンテナ」という軽量な箱に詰め込んで、どこでも同じように動かせるようにする技術です。 従来の「仮想マシン(Virtual Machine)」との大きな違いは、その軽さにあります。

  • 仮想マシン: PCの中に別のPC(OS)を丸ごと作るイメージ。重くて起動に時間がかかる。
  • Docker: 1つのOSの上で、アプリが動く「部屋(コンテナ)」だけを分けるイメージ。軽くて一瞬で起動する。

なぜDockerを使うのか?(メリット)

「自分の環境では動いたのに!」がなくなる 開発者のPC、テスト環境、本番サーバーでOSや設定が少しでも違うとエラーが起きがちです。Dockerならコンテナごと移動させるため、「どこでも全く同じ条件」で動かせます。

環境構築がコマンド一つで終わる

例えば「MySQL(データベース)」を使いたい時、PCに直接インストールすると設定が大変ですが、Dockerなら専用の命令を1行打つだけで、すぐにクリーンなデータベース環境が手に入ります。

PCを汚さない

アプリを試した後にコンテナを消せば、PCの中身は元の綺麗な状態のままです。

Dockerの3つの基本要素

Dockerを理解するには、以下の3つのステップを覚えるのが近道です。

要素 役割
Dockerfile コンテナの「作り方」を書いたメモ 料理のレシピ
Docker Image 実行に必要なファイル一式(静止状態) レトルトパック(完成品)
Docker Container Imageを動かした状態 温めてお皿に出した料理
  1. Dockerfileを元に、
  2. Imageを作成(ビルド)し、
  3. そのImageからContainerを起動して使います。

よく使うコマンド

#Dockerが正しく動くかテストする。
$ docker run hello-world
# 現在動いているコンテナを確認する。
$ docker ps
# 保存されているイメージの一覧を見る。
$ docker images

Docker Compose

複数のコンテナをまとめて管理・実行するためのツール」です。

「Dockerはアプリを箱(コンテナ)に詰めるもの」とお伝えしましたが、実際の開発では「Webサーバー」「データベース」「キャッシュサーバー」など、複数の箱を連携させて動かすのが一般的です。これらを一つずつ手動で起動するのは大変なため、Docker Composeを使います。

Docker Composeの役割

一言で言うと、**「設計図(YAMLファイル)を元に、ボタン一つで複数のコンテナを立ち上げる司令塔」**です。

  • 一括起動・停止: docker-compose up というコマンド一つで、必要なコンテナがすべて立ち上がります。
  • ネットワーク設定の自動化: 同じ設計図に書かれたコンテナ同士は、特別な設定なしで名前(サービス名)を使って通信できるようになります。
  • 環境のコード化: 構成を docker-compose.yml というファイルに書くため、チーム内で共有すれば全員が同じ多層構造の環境を再現できます。

DockerとDocker Composeの違い(例え話)

料理に例えるとイメージしやすくなります。

  • Docker: 「カレーのルー」や「お米」をそれぞれパック(コンテナ)に詰める作業。
  • Docker Compose: 「カレーライス定食」のセットメニュー表。ルーを温め、ご飯を盛り、お皿を並べる一連の動作を自動化する仕組み。

基本的な使い方

主に3つのステップで進めます。

  1. 各アプリのDockerfileを用意する(環境を定義)。
  2. docker-compose.yml を作成する(どのコンテナをどう繋ぐか定義)。
  3. docker-compose up を実行する。

docker-compose.yml のイメージ

以下のような設定ファイルを1つ作るだけで、WebサーバーとDBが連携した環境が整います。

services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example

よく使うコマンド

# コンテナをバックグラウンドで一括起動する。
$ docker-compose up -d
# コンテナを停止し、作成されたネットワーク等も削除(お掃除)する。
$ docker-compose down
# 現在動いているコンテナの状態を一覧表示する。
$ docker-compose ps
# 動いているコンテナのログ(エラーなど)をリアルタイムで確認する。
$ docker-compose logs -f