やろうとしていること
docker を使って flask を動かして、dicom ファイルが見れないかと思いました。
現段階で内視鏡画像(.jpg)を dicom ファイルに変換するのは簡単なのですが、dcm4chee にインポートしようとするとエラーになります。
おそらく、SOPInstanceUID などの設定が必要なのでしょう。
しかし、それはいずれ解決できると思っています。
インポートできるような dicom ファイルが作れればそれを dcm4chee にインポートして、dcm4chee でも十分閲覧できるわけですが、私が以前から感じていたのは、データベースがクラッシュしたらどうするんだろう?、ということでした。
dcm4chee 全体をバックアップしようしたことがありますが、dcm4chee はデータベースが巨大すぎて、バックアップが簡単にはできないようです。
データベースがクラッシュすることはないのかもしれませんが、それを動かしているコンピュータがクラッシュすることはありうることです。その時は、バックアップがないと相当面倒なことになります。
私がやろうとしているのは、サーバー内の python に dicom ファイルのタグ情報を読ませてデータベースとファイル構造を作成し、クライアントの flask からアクセスして、閲覧したい dicom ファイルをクライアントにダウンロードして weasis で閲覧するというものです。
これは pacs とは呼べない代物ですが、感覚的には pacs より簡単で、実際にほとんど同じように動きます。
データベースは、基本的に何でもいいと思いますが、テーブルは1個しかないシンプルなもので mysql にしています。
ファイルサイズは極端に小さいためエクスポート、バックアップがとても簡単です。
テーブルはこんな感じです。実際には氏名もあります。

ネットワーク構造
現在、病院のネットワーク構造は以下のようになっています。
(これは dicom 関連だけです。内視鏡や検査データのネットワークは別にあります。)

現在、linux mint から windows 7 の dcm4chee を使って dicom ファイルを閲覧できています。
DS718+ の virtualmachine に linux mint がインストールされており、その中で python が放射線科の dicom ファイルの中から順番に処理をして、そのタグ情報をデータベースに記録して、新しいファイル構造を DS718+ の HDD に蓄積しています。
ローカルの linux mint に flask を設定して、DS 718+ の mysql にアクセスしデータ一覧を表示して、検査IDなどを選ぶと dicom ファイルが linux mint にダウンロードされて weasis が起動します。
これは自宅ではできているのですが、病院ではまだできていません。
コンピュータがネット接続されていないことや、設定がやや面倒なためです。
でも、docker 内に flask を設定できるのであれば、自宅で設定しておいて、その docker file を病院の linux mint に簡単に持っていけるのではないかと考えました。
docker + flask で hello world
例によって、hello world から。
ここを参考にしました。
構造
~/test
└── docker
└── flask
├── Dockerfile
└── app
├── index.py
└── templates
├── index.html
└── test.html
FROM python:alpine
WORKDIR /app
COPY ./app /app
RUN pip install Flask
CMD ["python", "index.py"]
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
values = { "name": "Taro"}
return render_template('index.html', data=values)
@app.route("/test")
def test():
values = { "message":"Hello! This is test page." }
return render_template('test.html', data=values)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=80, debug=True)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Flask</title>
</head>
<body>
<h1>Welcome to Flask!</h1>
<p>Hello, {{ data.name }}</p>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<h1>Test Page</h1>
<p>{{ data.message }}</p>
</body>
</html>
Dockerコンテナイメージをビルドする
cd ~/test/docker/flask/
docker image build -t flask .
コンテナを起動する
docker run -p 5000:80 -v ${PWD}/app:/app -d flask
ブラウザからコンテナにアクセス
ブラウザのアドレスバーに「http://localhost:5000/」と打ち込むと、

ブラウザのアドレスバーに「http://localhost:5000/test」と打ち込むと、

docker のコマンド
docker 一覧(停止しているものを含む)。
docker ps -a
起動している docker リスト。
docker ps
image リスト。
docker images
docker 起動。
docker start 0b5aad08487b
docker の停止。
docker stop 0b5aad08487b
コンテナ削除。
docker rm -f 0b5aad08487b
イメージ削除。
docker rmi 0b5aad08487b
コンテナ一括削除。
docker system prune
イメージ一括削除。
docker images -aq | xargs docker rmi
docker コンテナ内部に入ります。(コンテナは起動している必要があります。)
docker container exec -it ubuntu1804 bash
コンテナからイメージを作成。
docker commit ubuntu1804 ubu01
イメージからコンテナを作成して入る。
docker container run -it ubu01
permission denied
sudo docker としないと permission denied になります。
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
docker.sock の変更をします。
cd /var/run
sudo chown user:user docker.sock