そもそもDockerとは何か
🔹 一言で言うと:
アプリを動かすための「環境」を丸ごとパッケージ化する技術。
🔧 背景
普通、アプリを動かすにはいろんなものが必要です:
OS(例:Windows, Linux)
ランタイム(例:Java, Python)
データベース(例:MySQL, PostgreSQL)
ライブラリや設定ファイル
これを手動でインストールすると、
「俺の環境では動くけど、他の人のPCでは動かない💀」
という問題がよく起こります。
🐳 Dockerの仕組み
Dockerは「コンテナ(container)」という軽量な仮想環境を使って、
アプリとその動作環境をまとめて管理します。
イメージ的には👇
通常の開発環境:
| OS |
| ├─ Java
| ├─ MySQL
| ├─ Node.js
Docker使用時:
| Docker Engine(共通)
| ├─ コンテナ① Java環境
| ├─ コンテナ② MySQL環境
| ├─ コンテナ③ Nginx環境
つまり、Dockerさえ入っていれば、どんなPCでも同じ環境を一瞬で再現できる。
docker-composeとは
Dockerには「コンテナ1つ1つを手動で起動」する方法と、
「まとめて管理する方法」の2種類があります。
docker run → 単体でコンテナ起動
docker compose → 複数のコンテナをまとめて起動・停止
docker-compose.yml(設定ファイル)
docker compose は「docker-compose.yml」という設定ファイルを読み取ります。
例
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
このファイルには、
どんなイメージを使うか(例:MySQL、Javaアプリ)
どんなポートで通信するか
どの環境変数を使うか
といった環境定義が書かれています。
docker compose up -d の意味
| コマンド | 意味 |
|---|---|
docker compose |
docker-compose.ymlを使う |
up |
コンテナを起動する(必要なら自動で作成) |
-d |
バックグラウンドで実行する(ターミナルを占領しない) |
🔹 具体的には
docker-compose.yml を読み込む
各サービス(例:app、dbなど)に対応するコンテナを作成
コンテナを起動
-d があるので、ターミナルはそのまま使える
例
docker compose up -d
を実行すると、
「アプリ用のコンテナ」と「DB用のコンテナ」が同時に立ち上がるイメージ👇
Starting app_1 ... done
Starting db_1 ... done
バックグラウンド実行とは
通常の実行
docker compose up
ターミナル(黒い画面)を占有
コンテナの ログがずっと表示され続ける
ターミナルで別の作業ができない
バックグラウンド実行
docker compose up -d
コンテナは起動するが、ターミナルはすぐに返ってくる
他のコマンドを同じターミナルで使える
コンテナは裏で動き続けている