Docker
DevOpsツール
Docker
概要
Dockerは、コンテナ技術のパイオニアとして、アプリケーションとその依存関係をコンテナにパッケージ化し、一貫した実行環境を提供するコンテナ化プラットフォームです。
詳細
Docker(ドッカー)は、2013年にSolomon Hykes率いるdotCloudが開発したオープンソースのコンテナ化プラットフォームです。従来の仮想マシンよりも軽量で高速なコンテナ技術により、「どこでも実行できる」アプリケーションの作成、配布、実行を革新しました。Dockerコンテナは、アプリケーションコードと実行に必要なすべての依存関係(ライブラリ、システムツール、設定)を単一のパッケージにまとめ、開発環境から本番環境まで一貫した動作を保証します。Linux Container(LXC)技術をベースとし、namespace、cgroups、Union File Systemを活用してプロセス分離とリソース管理を実現。Docker Hub、Docker Desktop、Docker Composeなど包括的なエコシステムを提供し、現在GitLab、Spotify、ING、PayPalなど多くの企業で採用されています。コンテナ技術の事実上の標準として、DevOps文化の浸透とマイクロサービスアーキテクチャの普及を加速させた革新的なプラットフォームです。
メリット・デメリット
メリット
- 一貫した実行環境: 開発から本番まで「どこでも動く」環境の保証
- 軽量で高速: 仮想マシンより少ないリソースで高速起動
- ポータビリティ: マルチプラットフォーム対応(Linux、Windows、macOS)
- スケーラビリティ: 水平スケーリングが容易
- 豊富なエコシステム: Docker Hub、Compose、Swarmなど充実したツール群
- DevOps統合: CI/CDパイプラインとの親和性が高い
- 依存関係の解決: ライブラリやOS依存を完全に分離
- 開発効率向上: 環境構築時間の大幅短縮
デメリット
- 学習コスト: Dockerfile、ネットワーク、ボリューム管理の習得が必要
- セキュリティ懸念: コンテナ間の分離レベルがVMより低い
- 永続化データ管理: ボリューム設計とバックアップの複雑さ
- モニタリング: コンテナ固有の監視・ログ管理が必要
- ライセンス変更: Docker Desktop有償化による企業での影響
- Linux環境依存: Windows/macOSでは仮想化レイヤーが必要
- オーケストレーション: 大規模環境では別途Kubernetesなどが必要
主要リンク
書き方の例
Hello World
# Dockerfile
FROM alpine:latest
RUN echo "Hello, Docker World!" > /hello.txt
CMD ["cat", "/hello.txt"]
# ビルドと実行
docker build -t hello-world .
docker run hello-world
Webアプリケーションのコンテナ化
# Node.js アプリケーションの例
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
USER node
CMD ["npm", "start"]
# ビルドと実行
docker build -t my-node-app .
docker run -p 3000:3000 my-node-app
マルチステージビルド
# ビルドステージ
FROM golang:1.20-alpine AS builder
WORKDIR /src
COPY . .
RUN go build -o app main.go
# 実行ステージ
FROM alpine:latest
RUN apk --no-cache add ca-certificates
COPY --from=builder /src/app /bin/app
CMD ["/bin/app"]
Docker Compose(マルチコンテナアプリケーション)
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
# Docker Compose実行
docker-compose up -d
docker-compose logs -f web
docker-compose down
ボリュームとネットワーク管理
# ボリューム作成
docker volume create my-data
# カスタムネットワーク作成
docker network create my-network
# ボリュームとネットワーク指定で実行
docker run -d \
--name my-container \
--network my-network \
-v my-data:/data \
nginx:alpine
Docker CLI 基本操作
# イメージ管理
docker images # イメージ一覧
docker pull nginx:alpine # イメージダウンロード
docker rmi nginx:alpine # イメージ削除
# コンテナ管理
docker ps # 実行中コンテナ一覧
docker ps -a # 全コンテナ一覧
docker stop container_name # コンテナ停止
docker rm container_name # コンテナ削除
# デバッグ・監視
docker logs container_name # ログ表示
docker exec -it container_name sh # コンテナ内シェル
docker stats # リソース使用状況
docker inspect container_name # 詳細情報表示