Dockerにおけるデータ永続化とイメージ構築の実践

Dockerのデータ永続化手法

Dockerではホストからコンテナへデータをマウントする主要な3つの方法を提供します:

ボリューム管理

Dockerが管理するホストファイルシステムの一部(/var/lib/docker/volumes)に保存されます。データ保存に最適な方法です。

バインドマウント

ホスト上の任意のファイルやディレクトリをコンテナ内にマウントします。

tmpfs

ホストのメモリ上にマウントされ、ファイルシステムには書き込まれません。一時的なデータ保存に適し、コンテナの書き込み層への負荷を軽減します。

ボリューム操作コマンド

docker volume ls  // ボリューム一覧表示
docker volume create volume_name  // 新規ボリューム作成
docker run -d -v volume_name:container_dir image_name  // ボリュームマウント
docker volume inspect volume_name  // ボリューム詳細確認

バインドマウントの注意点

  • ホスト側のファイル/ディレクトリが事前に存在する必要がある
  • ホストの内容がコンテナ内の既存データを上書きする

Dockerfileの基本構造

命令用途
FROMベースイメージの指定
LABELメタデータ付与
RUNコマンド実行
COPYファイル転送
ENV環境変数設定
USER実行ユーザー指定
EXPOSEポート公開宣言
WORKDIR作業ディレクトリ設定
ENTRYPOINTコンテナ実行コマンド
VOLUME永続化領域設定
CMDデフォルト実行コマンド

Dockerfile作成のベストプラクティス

  • 軽量なベースイメージ(例: alpine)の採用
  • 複数RUNコマンドの連結によるレイヤー削減
  • ビルド後の不要ファイル削除

Nginxイメージ構築例

FROM centos:7
RUN yum install -y gcc gcc-c++ make openssl-devel pcre-devel && \
    wget http://nginx.org/download/nginx-1.18.0.tar.gz && \
    tar zxvf nginx-1.18.0.tar.gz && \
    cd nginx-1.18.0 && \
    ./configure --prefix=/usr/local/nginx && \
    make && make install
COPY nginx.conf /usr/local/nginx/conf/
EXPOSE 80
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

コンテナ監視システム構築

cAdvisorセットアップ

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  gcr.io/cadvisor/cadvisor:v0.39.0

Prometheus設定

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['cadvisor_host:8080']

Grafana連携

docker run -d --name=grafana -p 3000:3000 grafana/grafana

GrafanaダッシュボードでデータソースとしてPrometheusを追加し、コンテナ監視用テンプレート(ID:193)をインポートします。

タグ: Docker データ永続化 ボリューム バインドマウント tmpfs

6月18日 18:51 投稿