Dockerコンテナ化入門

Dockerを使ったアプリケーションのコンテナ化について、基本概念から実践的な使い方まで解説します。

|

Dockerコンテナ化入門

Dockerを使ってアプリケーションを効率的にコンテナ化する方法を学びましょう。

Dockerfileの基本

# Node.jsアプリケーションの例
FROM node:18-alpine

WORKDIR /app

# 依存関係をコピー
COPY package*.json ./
RUN npm ci --only=production

# アプリケーションコードをコピー
COPY . .

# ポートを公開
EXPOSE 3000

# 非rootユーザーで実行
USER node

CMD ["npm", "start"]

docker-composeでの開発環境

version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - NODE_ENV=development
    depends_on:
      - database

  database:
    image: postgres:15
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:

基本的なDockerコマンド

# イメージをビルド
docker build -t myapp .

# コンテナを起動
docker run -p 3000:3000 myapp

# バックグラウンドで起動
docker run -d -p 3000:3000 --name myapp-container myapp

# コンテナの状態確認
docker ps

# ログの確認
docker logs myapp-container

# コンテナに入る
docker exec -it myapp-container sh

# docker-composeの使用
docker-compose up -d
docker-compose logs -f
docker-compose down

マルチステージビルド

# ビルドステージ
FROM node:18 AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

# 本番ステージ
FROM node:18-alpine

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

COPY --from=builder /app/dist ./dist

EXPOSE 3000
CMD ["npm", "start"]

Dockerを活用することで、開発から本番まで一貫した環境を構築できます。