Dockerとは
Dockerは、アプリケーションをコンテナという単位でパッケージ化し、どの環境でも同じように動作させることができる技術です。
なぜDockerが必要なのか
1. 環境依存の問題を解決
「私の環境では動くのに…」という問題を解決します。開発環境、テスト環境、本番環境で同じコンテナを使用することで、環境差異による問題を最小化できます。
2. 軽量で高速
仮想マシンと比較して:
- 起動が速い(数秒)
- リソース消費が少ない
- 同じホストで多数のコンテナを実行可能
基本的なDockerコマンド
イメージの操作
1
2
3
4
5
6
7
8
| # イメージの検索
docker search nginx
# イメージのダウンロード
docker pull nginx:latest
# ローカルのイメージ一覧
docker images
|
コンテナの操作
1
2
3
4
5
6
7
8
9
10
11
| # コンテナの起動
docker run -d -p 8080:80 --name my-nginx nginx
# 実行中のコンテナ確認
docker ps
# コンテナの停止
docker stop my-nginx
# コンテナの削除
docker rm my-nginx
|
Dockerfileの基本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # ベースイメージの指定
FROM node:18-alpine
# 作業ディレクトリの設定
WORKDIR /app
# 依存関係ファイルのコピー
COPY package*.json ./
# 依存関係のインストール
RUN npm ci --only=production
# アプリケーションファイルのコピー
COPY . .
# ポートの公開
EXPOSE 3000
# アプリケーションの起動
CMD ["node", "server.js"]
|
Docker Composeで複数コンテナを管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
db:
image: postgres:14
environment:
- POSTGRES_DB=myapp
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
|
ベストプラクティス
1. マルチステージビルドの活用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # ビルドステージ
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 実行ステージ
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]
|
2. .dockerignoreの活用
1
2
3
4
5
6
7
| node_modules
npm-debug.log
.git
.gitignore
README.md
.env
.vscode
|
トラブルシューティング
ディスク容量の問題
1
2
3
4
5
6
7
| # 未使用のリソースを一括削除
docker system prune -a
# 個別に削除
docker image prune
docker container prune
docker volume prune
|
ログの確認
1
2
3
4
5
| # コンテナログの確認
docker logs my-container
# リアルタイムでログを追跡
docker logs -f my-container
|
まとめ
Dockerは現代のアプリケーション開発において欠かせないツールとなっています。基本的なコマンドから始めて、徐々に複雑な構成にチャレンジしていくことで、効率的な開発環境を構築できます。
次回は、Kubernetesを使ったコンテナオーケストレーションについて解説予定です。