Dockerを活用したアプリケーションコンテナ化の実践手法

Docker環境の構築

CentOSベースのシステムにDockerをインストールする際の手順です。パッケージリポジトリを最適化し、高速なミラーを利用する設定を行います。

# 必要な依存パッケージをインストール
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 公式リポジトリの追加(東京リージョン向けミラー)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Dockerエンジンのインストール
sudo yum makecache
sudo yum install -y docker-ce

# サービスの有効化と基本動作確認
sudo systemctl enable docker
sudo systemctl start docker
sudo docker run --rm hello-world

レジストリ設定の最適化

公式リポジトリに加え、地域に近いミラーサイトを利用することでプル速度を改善できます。社内環境ではプライベートレジストリを設定するケースが一般的です。

# ミラー設定ファイルの作成
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
  "insecure-registries": ["registry.internal:5000"]
}
EOF

# 設定の反映
sudo systemctl daemon-reload
sudo systemctl restart docker

イメージ管理の実践テクニック

コンテナイメージの取得・管理には以下のコマンド群を使用します。バージョン管理を意識した命名規則が重要です。

# イメージの取得(例: Nginxの特定バージョン)
docker pull nginx:1.25-alpine

# ローカルイメージの一覧表示
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"

# イメージのエクスポート/インポート
docker save -o app-image.tar my-app:2.1
docker load -i app-image.tar

# タグの再付与
docker tag 3a7d4cb7fd12 production/app:3.0

コンテナ操作の実用例

実際の運用で頻繁に使用する操作を紹介します。デーモンモード実行とポートマッピングは必須知識です。

# 背景実行コンテナの起動
docker run -d -p 8081:8080 --name web-app \
  -v /app/logs:/var/log/app \
  my-app:3.0

# コンテナ状態の確認
docker ps -a --filter "name=web-*"

# ログのリアルタイム監視
docker logs -f web-app --tail 50

# コンテナ内へのインタラクティブ接続
docker exec -it web-app sh

# 一括停止と削除
docker stop $(docker ps -aq --filter status=running)
docker rm $(docker ps -aq)

データボリュームの活用

永続化ストレージが必要な場合、ボリュームマウントが有効です。ホストとコンテナ間のファイル同期を自動化できます。

# ボリュームの作成と確認
docker volume create app-data
docker volume inspect app-data

# コンテナ起動時のマウント例
docker run -d \
  -v app-data:/var/lib/database \
  -v ./config:/app/config:ro \
  database-server:4.2

カスタムイメージの構築

Dockerfileを用いた独自イメージ作成は標準的な手法です。レイヤー最適化とセキュリティ考慮が重要です。

# Dockerfile例(Pythonアプリ)
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]
# イメージのビルド
docker build -t my-python-app:1.2 .

Docker Composeによる複合システム管理

複数コンテナを連携させる場合、Composeファイルによる一元管理が効率的です。環境依存設定を分離できます。

# docker-compose.yml例
version: '3.8'
services:
  web:
    image: my-python-app:1.2
    ports:
      - "8000:8000"
    volumes:
      - static-data:/app/static
    depends_on:
      - db

  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secure_pass
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  static-data:
  db-data:
# サービスの操作
docker compose up -d
docker compose logs -f web
docker compose down
# カスタムビルドを含む起動
docker compose up -d --build

タグ: Docker docker-compose containerization MySQL Tomcat

7月7日 02:01 投稿