概要
Dockerは、コンテナ内のプロセスを分離するための柔軟なツールでオシャレな都会のエンジニアはみんな使っています。福岡の田舎っぺ学生エンジニアすら注目しているので多分、相当に人気があるのだと思います。そんな、Dockerのファイルの変更監視をしてみたいと思います。
ファイルの変更監視
コンテナ内のファイルを元のイメージと比較して作成、変更、削除したファイルを知ることができる~。
$docker run --name my_container --detach ubuntu sleep 3000
実行されているか確認せよ!!!
$docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4577d24ac658 ubuntu "sleep 3000" About a minute ago Up About a minute my_container
sleep 3000が実行されていることが分かるけん次に変更確認をします。
変更確認
次にファイルが変更されていないことを確認してみましょう。
$ docker diff my_container
ファイル作成
次にファイルの作成を行います。
$sudo docker exec my_container touch /tmp/nwiizo
diffで変更の差分を見てみます。
$docker diff my_container C /tmp A /tmp/nwiizo
コピー
docker cpを使ってホストにコピーしてみましょう。
$docker cp my_container:tmp/nwiizo ./nwiizo $ls nwiizo
ファイルをコピーできました。やったね♥
手動で行うのはばり面倒やけんこのプロセスはできれば自動化したいっちゃん。定期的にdiffをとってシェル芸を回すという手段もあるけんがバリダサい!!!-vで共有ボリュームを使ったほうがN倍マシやな!!!
監視したい!!!
pyinotifyとは
既存のおしゃれツールを使いましょう!!!pyinotifyとは、ファイルなどの変更を監視するためのPythonモジュールです。しかし、pyinotifyはinotifyと呼ばれるLinuxカーネル機能に依存しています。inotifyに関しては任意のおページを見て確認してくれ!!!
Linuxでの監視は以下を参照してください!!!
インストール
$sudo pip3 install pyinotify
はい、簡単()。
では、pyinotifyスクリプトで共有ボリュームにあるファイルを監視しましょう。
-vオプションについて少し説明しておくとまぁ共有ボリュームを作成するオプションです。Dockerはすぐにデータがどっかーんと消えてしまうので共有ボリュームを使って少しはマシにしましょうねという話です。
$sudo docker run --name watch_container --detach -v "$(pwd)/paipai:/app" ubuntu sleep 3000
$(pwd)は現在のディレクトリでその下に/paipaiというディレクトリを作成しコンテナ内の/appというディレクトリと共有ボリュームを持つという意味です。
監視用のスクリプトを以下に示す。後でGithubとかにもあげておきます。
追記: モジュール名と監視対象のパスの誤記を修正しました。このスクリプトはpaipaiの親ディレクトリで起動します。前半の例と名前が重ならないよう、監視用コンテナはwatch_containerとしています。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pyinotify
import subprocess
# 監視したいローカルのディレクトリです。
watch_dir = './paipai'
def Change_file(ev):
cmd = ['/bin/echo', 'File', ev.pathname, 'changed']
subprocess.Popen(cmd).communicate()
wm = pyinotify.WatchManager()
wm.add_watch(watch_dir, pyinotify.IN_CLOSE_WRITE, Change_file)
notifier = pyinotify.Notifier(wm)
notifier.loop()
別窓を開いて監視用のスクリプトを回してみましょう
$python3 watch.py
そしたらばファイルを追加してみましょう!!!
$docker exec -it watch_container touch /app/oppai $ls paipai/ oppai
共有ボリュームなのでpaipaiの下にファイルがあることが確認できます。
以下は当時掲載した出力です。今回の修正後に再実行した記録ではありません。
$python3 File /home/nwiizo/docker/paipai/oppai changed
任意のファイルが作成されていることが分かります。監視できてるね!!!後は煮るなり焼くなり自由なり!!!
最後に
やったゾ!!!ファイルの作成が検出できました。既存のファイルの変更にも対応しているので大丈夫です。 Dockerのネットワークの取り組みは面白くその他にも遊べるものがたくさんあります。