Dockerとは
Docker はアプリケーション実行に必要なものを イメージ にまとめ、 そこから起動する コンテナ として動かします。 仮想マシン(VM)ほど重くなく、OSのカーネルを共有するため起動が速いのが特徴です。
- 環境を丸ごと共有:依存関係や設定も含めて再現
- 手順をコード化:Dockerfile / Composeで構築を自動化
- ローカル〜サーバーまで一貫:同じイメージで動作
Docker は「アプリ+依存関係+設定」を コンテナ という単位にまとめ、 どこでも同じように動かすための仕組みです。環境構築のブレを消し、開発〜本番の流れを速くします。
Docker はアプリケーション実行に必要なものを イメージ にまとめ、 そこから起動する コンテナ として動かします。 仮想マシン(VM)ほど重くなく、OSのカーネルを共有するため起動が速いのが特徴です。
たとえば「Nodeのバージョンが違う」「DBの設定が違う」みたいな事故を、 コンテナを配ることで根本から消せます。
「動く人・動かない人」を減らし、再現性が上がる。
VMより軽く、必要なプロセスだけが動く。
Dockerfile/Compose がそのまま設計書になる。
Docker は「コンテナを作って動かす」ための仕組み。Kubernetes(K8s)は 「コンテナを大量に、安定して、賢く運用する」仕組みです。
| 項目 | Docker | Kubernetes |
|---|---|---|
| 役割 | コンテナ作成・実行 | コンテナ群の運用・自動化 |
| スケール | 手動中心 | 自動スケール/分散 |
| 復旧 | 手動対応が多い | 落ちたら再起動/再配置 |
| 対象 | 個人〜小規模 | 中〜大規模(クラスタ) |
※現在は「Dockerが直接K8sで使われる」というより、K8sは containerd などのランタイムを使う構成が一般的です。
いいえ、違います。NAS はネットワーク上のストレージ(Network Attached Storage)。 Docker はアプリを動かす “実行環境の箱” です。
docker --version
docker images
docker ps
docker ps -a
# 例:nginx を起動(バックグラウンド)
docker run -d --name mynginx -p 8080:80 nginx:latest
# コンテナのログ
docker logs -f mynginx
# コンテナに入る(bashが無い場合は sh)
docker exec -it mynginx /bin/sh
# 停止・削除
docker stop mynginx
docker rm mynginx
# 使ってないイメージ掃除(注意)
docker system prune
docker exec -it で中に入って確認-p でポート公開(例:8080:80)Dockerfile は「この環境をこう作る」というレシピです。 例として、Nodeアプリを動かす最低限のパターン。
FROM node:20-alpine
WORKDIR /app
# 依存関係を先に入れる(キャッシュが効く)
COPY package*.json ./
RUN npm ci
# アプリ本体
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# ビルド
docker build -t myapp:dev .
# 起動
docker run --rm -p 3000:3000 myapp:dev
Web + DB のような構成は Compose が楽です。起動は docker compose up -d だけ。
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DB_HOST=db
- DB_USER=root
- DB_PASS=example
depends_on:
- db
db:
image: mysql:8
environment:
- MYSQL_ROOT_PASSWORD=example
- MYSQL_DATABASE=appdb
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
# 起動
docker compose up -d
# ログ
docker compose logs -f
# 停止(コンテナ停止)
docker compose down
# 停止+ボリューム削除(DB消えるので注意)
docker compose down -v
コンテナを消すと中のデータも消えます。DBは必ず Volume を使って永続化します。
package.json など依存関係を先に COPY して RUN するとキャッシュが効きます。
同じポートを別プロセスが使っている可能性。-p 3001:3000 のようにホスト側を変えます。