Docker入門:コンテナ技術の基礎から実践まで

Dockerの基本概念から実践的な使い方まで、初心者にもわかりやすく解説します。

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を使ったコンテナオーケストレーションについて解説予定です。

技術ネタ、趣味や備忘録などを書いているブログです
Hugo で構築されています。
テーマ StackJimmy によって設計されています。