スキップしてメイン コンテンツに移動

DockerでDICOMサーバを使いまわす

DCM4CHEEがだいぶ前からDocker対応しているので、その手順をメモします。

基本的には、このページに記載の通りです。
https://github.com/dcm4che/dcm4chee-arc-light/wiki/Running-on-Docker

一番シンプルな構築方法でいきます。
https://github.com/dcm4che/dcm4chee-arc-light/wiki/Run-minimum-set-of-archive-services-on-a-single-host

あくまでもテストケースですが、今回は仮想OSを立てて、その中にDockerを入れて、サーバーのホストにします。以下のようにしてみました。

大元のPCでの作業

  1. VirtualBox(またはHyper-V)を用意する
  2. Ubuntu19.04を最小構成で仮想化する(メモリは4GB, 割り当て仮想保存容量127GBなど)。
  3. (インストール時にイメージを再起動できない場合はPC本体を再起動するとよいことがあります)
  4. Ubuntu19.04を起動する。

Ubuntuで行う作業

Ubuntuをインストールしたら行うお決まりのコマンドを打つ

  • sudo -i
  • apt-get update
  • apt-get upgrade

vimを入れておく 

  • apt install vim

UbuntuにJavaを入れておく。(JDK9以上)

  • apt install openjdk-12-jre-headless

Dockerをインストールする

  • apt install docker.io

DCM4CHEE関連のイメージを取得する(一行ずつ実行)

  • docker pull dcm4che/slapd-dcm4chee:2.4.44-19.0
  • docker pull dcm4che/postgres-dcm4chee:12.0-19
  • docker pull dcm4che/dcm4chee-arc-psql:5.19.0
  • docker pull dcm4che/keycloak:7.0.0
  • docker pull dcm4che/keycloak-gatekeeper:7.0.0
  • docker pull dcm4che/logstash-dcm4chee:7.2.0-9
  • docker pull dcm4che/dcm4che-tools:5.19.0

「:」以降はタグなので、その都度最新バージョンを確認する。

データボリュームを共有するために必要なフォルダを先に作っておく

  • cd /var/local
  • mkdir dcm4chee-arc
  • cd dcm4chee-arc
  • mkdir ldap
  • mkdir slapd.d
  • mkdir db
  • mkdir wildfly

DCM4CHEEを起動する

最初にdockerのネットワークを作っておく。LDAPとDBなどのリンク用。
$ docker network create dcm4chee_default
LDAPサーバーを起動
$ docker run --network=dcm4chee_default --name ldap \
           -p 389:389 \
           -v /etc/localtime:/etc/localtime:ro \
           -v /etc/timezone:/etc/timezone:ro \
           -v /var/local/dcm4chee-arc/ldap:/var/lib/ldap \
           -v /var/local/dcm4chee-arc/slapd.d:/etc/ldap/slapd.d \
           -d dcm4che/slapd-dcm4chee:2.4.44-19.0
389はLDAPポート。

PostgreSQLサーバーを起動
$ docker run --network=dcm4chee_default --name db \
           -p 5432:5432 \
           -e POSTGRES_DB=pacsdb \
           -e POSTGRES_USER=pacs \
           -e POSTGRES_PASSWORD=pacs \
           -v /etc/localtime:/etc/localtime:ro \
           -v /etc/timezone:/etc/timezone:ro \
           -v /var/local/dcm4chee-arc/db:/var/lib/postgresql/data \
           -d dcm4che/postgres-dcm4chee:12.0-19
アプリケーションサーバのWildFlyを起動
$ docker run --network=dcm4chee_default --name arc \
           -p 8080:8080 \
           -p 8443:8443 \
           -p 9990:9990 \
           -p 9993:9993 \
           -p 11112:11112 \
           -p 2575:2575 \
           -e POSTGRES_DB=pacsdb \
           -e POSTGRES_USER=pacs \
           -e POSTGRES_PASSWORD=pacs \
           -e WILDFLY_WAIT_FOR="ldap:389 db:5432" \
           -v /etc/localtime:/etc/localtime:ro \
           -v /etc/timezone:/etc/timezone:ro \
           -v /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone \
           -d dcm4che/dcm4chee-arc-psql:5.19.0

以上のコマンド時にエラーが出たら何かおかしい。
正常に起動すると各コマンド時にハッシュタグのようなものが出力される。

テストする

UIにアクセスする。
https://localhost:8443/dcm4chee-arc/ui2
(セキュリティ警告が出たら、ページ内の詳細をみるを開き、危険性を承知で続行する)

データを送ってみる。

お借りしました。
http://depts.washington.edu/petctdro/DROsuv_main.html
(http://depts.washington.edu/petctdro/downloads/DRO_20130529.zip)

$ docker run --rm --network=dcm4chee_default dcm4che/dcm4che-tools:5.19.0 storescu -cDCM4CHEE@arc:11112 /path/to/samplect

しかし、dockerでフォルダのマウントが必要なのか、私の場合は「Not found Such File or Directory」(のような感じの)エラーが出た。
Failed to scan file /home/tatsunidas/DICOMSample/20130528_DRO_DICOM_male/DRO_CT_20130528: /home/tatsunidas/DICOMSample/20130528_DRO_DICOM_male/DRO_CT_20130528 (No such file or directory)
java.io.FileNotFoundException: /home/tatsunidas/DICOMSample/20130528_DRO_DICOM_male/DRO_CT_20130528 (No such file or directory)

別の方法として、UbuntuにDcm4cheツールをインストールしてテストしました。

dcm4che5-5.19.0-bin.zipをダウンロード
https://sourceforge.net/projects/dcm4che/files/dcm4che3/5.19.0/
.bashrcにvimを使ってパスを通す。

テスト
storescu -c DCM4CHEE@arc:11112 path/to/sampledicomdir

UIで送信が成功したか確認


終了する

dockerでコンテナを終了させる。
$ docker stop ldap db arc
再度立ち上げる場合は、イメージは取得済みなので、以下のコマンドで新規にコンテナが立ち上がる。
$ docker start ldap db arc
起動していないコンテナ(使わなくなったコンテナ)は削除する。
$ docker rm -v ldap db arc
バージョンが変わったりして、LDAP、DB、DCM4CHEEなどのイメージごと消す場合は、コンテナを消してから、
$ docker rmi imagename imagename ...(例)
その際はネットワークも消すこと。
$ docker network rm dcm4chee_default

以上

VisionaryImagingServices,Inc. 2019/10/17


コメント

このブログの人気の投稿

dcm4cheをローカル環境にインストールする

DCM4CHEのインストール ここからダウンロードします。 執筆時点では(2019/11/5)、最新バージョンは5.19.0です。 https://sourceforge.net/projects/dcm4che/files/dcm4che3/ (リンクではdcm4che3となっていますが、バージョンでは5で、何か意図があるのかなと、思っています。) 環境変数パス ダウンロードができたら、解凍して、binフォルダまでの環境変数パスを通します。 Windows ならシステムの詳細設定からだったと思います。 MacやLinuxなら、.bashrcあたりにパスを追加します。 例えば、ubuntuで、localフォルダにコピーした場合ならば。 vim ~/.bashrc から、「i」でインサートモードにして、以下を追記して、 #dcm4che export PATH="$PATH:/usr/local/dcm4che/dcm4che-5.15.1/bin" 「esc」押して、「:」おして、wq!でエンター。 追記できたら、 $source ~/.bashrc パスが通せたか、dcmdumpコマンドで確認します。 > dcmdump dcmdump: missing file operand Try `dcmdump --help' for more information. このように表示されれば、インストールは完了です。 注意 DCMTKをインストールしている場合、コマンドが被ることがあります。 DICOMツールは何個もいらないので、DCM4CHEを使うときはDCM4CHEのみにパスを、DCMTKを使うときはDCMTKにパスを通すと競合しません。 Visionary Imaging Services, Inc.

はじめに

所信表明 VISブログ担当の小林です。 私の専門は医用画像情報です。 医用画像情報を扱う際に、DICOMデータの取り扱いは避けて通れません。 しかし、DICOMについて調べると、リソースが無くて困ることが多いです。 そこで、個人的に好きなツールである、dcm4cheを使ったDICOMのハウツーを備忘録としてこの技術ブログに残していくことにしました。 これまでにいろいろなオープンソースのDICOMツールを使ってきました。 DCMTK、GDCM、pixelmed.jarやpydicomなどです。 このブログではdcm4cheを使います。dcm4cheはこれらのツールに匹敵する強力なツールです。そして特筆すべき点として、堅牢なDICOMサーバ(dcm4chee)もこのツールを使ってオープンソースで提供されています。 dcm4che 2000年頃、Gunter Zeilinger氏は、商用のJava DICOM Toolkit(JDT)を使ってJDicomユーティリティを作成しました。 この後、彼は自身のDICOMツールキットを書くべきであると決めたそうです。 そして、dcm4che(d-c-m-for-chayと発音)が生まれました。 Gunter氏は、オープンソースの革命的な側面にインスパイアされて、有名な革命家にちなんで、ツールキットに名前を付けることにしたそうです。 当時、このツールキットのオリジナル版は、JavaベースのDICOM API用のJSR(Java Specification Request)としてSun(現在はOracle)に提出することを目的として設計されました。 そのことを念頭に置いて、ツールキットはインターフェース層と実装層に分けられました。 JSRには至りませんでしたが、プロジェクトはJava DICOM開発コミュニティの間で人気が高まり始めました。 そして、dcm4cheをDICOMバックエンドにしたdcm4jbossアーカイブが誕生したそうです。 このDICOMサーバアプリケーションを開発するサブプロジェクトは、IHE Image ManagerとImage Archiveアクターを実装しました。 dcm4jbossは、医用画像の研究および画像診断レポートを管理するための堅牢で安定したプラッ...