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)をインポートします。