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を動かした状態 | 温めてお皿に出した料理 |
- Dockerfileを元に、
- Imageを作成(ビルド)し、
- そのImageからContainerを起動して使います。
よく使うコマンド
#Dockerが正しく動くかテストする。
$ docker run hello-world
# 現在動いているコンテナを確認する。
$ docker ps
# 保存されているイメージの一覧を見る。
$ docker imagesDocker Compose
複数のコンテナをまとめて管理・実行するためのツール」です。
「Dockerはアプリを箱(コンテナ)に詰めるもの」とお伝えしましたが、実際の開発では「Webサーバー」「データベース」「キャッシュサーバー」など、複数の箱を連携させて動かすのが一般的です。これらを一つずつ手動で起動するのは大変なため、Docker Composeを使います。
Docker Composeの役割
一言で言うと、**「設計図(YAMLファイル)を元に、ボタン一つで複数のコンテナを立ち上げる司令塔」**です。
- 一括起動・停止: docker-compose up というコマンド一つで、必要なコンテナがすべて立ち上がります。
- ネットワーク設定の自動化: 同じ設計図に書かれたコンテナ同士は、特別な設定なしで名前(サービス名)を使って通信できるようになります。
- 環境のコード化: 構成を docker-compose.yml というファイルに書くため、チーム内で共有すれば全員が同じ多層構造の環境を再現できます。
DockerとDocker Composeの違い(例え話)
料理に例えるとイメージしやすくなります。
- Docker: 「カレーのルー」や「お米」をそれぞれパック(コンテナ)に詰める作業。
- Docker Compose: 「カレーライス定食」のセットメニュー表。ルーを温め、ご飯を盛り、お皿を並べる一連の動作を自動化する仕組み。
基本的な使い方
主に3つのステップで進めます。
- 各アプリのDockerfileを用意する(環境を定義)。
- docker-compose.yml を作成する(どのコンテナをどう繋ぐか定義)。
- 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