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