Centos Docker環(huán)境下安裝Dcm4che歸檔服務(wù)

本文實現(xiàn)了搭建一個最小的基于Dcm4che+Docker的歸檔服務(wù),能夠?qū)崿F(xiàn)影像DICOM的歸檔,調(diào)閱,轉(zhuǎn)發(fā)功能,其搭建參考于GitHub 開源項目說明:dcm4che/dcm4chee-arc-light

  • 創(chuàng)建用戶和用戶組相關(guān)信息[可選步驟]
$ sudo -i
# groupadd -r slapd-dcm4chee --gid=1021 && useradd -r -g slapd-dcm4chee --uid=1021 slapd-dcm4chee
# groupadd -r postgres-dcm4chee --gid=999 && useradd -r -g postgres-dcm4chee --uid=999 postgres-dcm4chee
# groupadd -r dcm4chee-arc --gid=1023 && useradd -r -g dcm4chee-arc --uid=1023 dcm4chee-arc
# exit
DOCKER 歸檔模塊示意圖

1.創(chuàng)建一個docker默認橋接網(wǎng)絡(luò)

$ docker network create dcm4chee_default

2.開啟OpenLDAP Server

 docker run --network=dcm4chee_default --name ldap \
           -p 389:389 \
           -v /etc/localtime:/etc/localtime: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-12.0

此命令會優(yōu)先查找鏡像,如本地?zé)o鏡像,則去docker中心下載進行并按參數(shù)運行容器。

參數(shù)說明:

  • --name 容器名稱: ldap
  • -p docker和宿主機的映射端口 ,前面為宿主機,后面為docker服務(wù)端口
  • -v 映射docker文件到宿主機,保證容器消失后數(shù)據(jù)不會丟失
  • -d 以后臺方式的模式運行<Br>
    除此在啟動容器還可以設(shè)定以下參數(shù)信息:
-e LDAP_BASE_DN=dc=ihe,dc=net \
-e LDAP_ROOTPASS=mypass \
-e ARCHIVE_DEVICE_NAME=central-archive \
-e AE_TITLE=CENTRAL \
-e ARCHIVE_HOST=central-archive \
-e DICOM_PORT=10104 \
-e HL7_PORT=12575
-e STORAGE_DIR=/storage/fs1
  • dc=ihe,dc=net(默認dc=dcm4che,dc=org:)作為LDAP目錄的數(shù)據(jù)庫后綴(或基本DN)
  • mypass(默認secret:)作為訪問LDAP目錄的根密碼,
  • central-archive(默認dcm4chee-arc:)作為存檔設(shè)備名稱,
  • CENTRAL(默認:)作為存檔的DCM4CHEE主要應(yīng)用程序?qū)嶓w標(biāo)題,
  • central-archive(默認127.0.0.1:)作為存檔的主機名,
  • 10104(默認11112:)作為DICOM連接到存檔的偵聽端口,
  • 12575(默認2575:)作為Archive的HL7接收器的監(jiān)聽端口,
  • /storage/fs1(默認:)/opt/wildfly/standalone/data/fs1作為目錄的路徑 - 歸檔容器的內(nèi)部 - 歸檔存儲收到DICOM對象的位置。

此處移除了官方的時間時區(qū)綁定參數(shù)

-v /etc/timezone:/etc/timezone:ro

,因為在Centos,此參數(shù)回到如下錯誤,即時區(qū)綁定問題:

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\\"/etc/timezone\\\" to rootfs \\\"/var/lib/docker/overlay2/0aea67b9ced0e403f88d6e2185f93848c3810c8ff5f5052811225b13d8611731/merged\\\" at \\\"/var/lib/docker/overlay2/0aea67b9ced0e403f88d6e2185f93848c3810c8ff5f5052811225b13d8611731/merged/etc/timezone\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type

3.開啟PostGres DB 實例

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 /var/local/dcm4chee-arc/db:/var/lib/postgresql/data \
           -d dcm4che/postgres-dcm4chee:10.0-12

此命令創(chuàng)建一個名為db 的PostGres數(shù)據(jù)庫實例,參數(shù)說明如下:

  • name 容器實例名稱
  • p 容器和宿主機映射端口
  • POSTGRES_DB 數(shù)據(jù)庫實例名
  • POSTGRES_USER 數(shù)據(jù)庫用戶名
  • POSTGRES_PASSWORD 數(shù)據(jù)庫密碼
  • -v 綁定數(shù)據(jù)庫宿主數(shù)據(jù)文件位置,保證容器結(jié)束數(shù)據(jù)不丟失。

    本地電腦訪問docker PostGres 數(shù)據(jù)庫,因為數(shù)據(jù)庫端口已經(jīng)被映射出來,所以可以直接訪問宿主機,本人的宿主機是一臺虛擬機,通過nat轉(zhuǎn)換的,因此填寫虛擬機IP就可以訪問了,訪問信息截圖如下:
    訪問截圖
tips:

如果無法開啟容器服務(wù),請手動查找占用端口情況,查詢端口占用命令如下:

[root@localhost ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2417/mysqld         
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4181/nginx: master  
tcp        0      0 127.0.0.1:5941          0.0.0.0:*               LISTEN      2681/teamviewerd    
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      3133/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1027/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1026/cupsd          
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      1608/postmaster     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2195/master         
tcp        0      0 127.0.0.1:32000         0.0.0.0:*               LISTEN      3651/java           
tcp        0      0 127.0.0.1:32001         0.0.0.0:*               LISTEN      3666/java           
tcp        0      0 127.0.0.1:32002         0.0.0.0:*               LISTEN      3702/java           
tcp        0      0 127.0.0.1:32003         0.0.0.0:*               LISTEN      3744/java           
tcp        0      0 127.0.0.1:32004         0.0.0.0:*               LISTEN      3745/java           
tcp        0      0 127.0.0.1:32005         0.0.0.0:*               LISTEN      3743/java           
tcp6       0      0 192.168.43.50:11111     :::*                    LISTEN      3666/java           
tcp6       0      0 192.168.43.50:11113     :::*                    LISTEN      3702/java           
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      1027/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1026/cupsd          
tcp6       0      0 ::1:5432                :::*                    LISTEN      1608/postmaster     
tcp6       0      0 ::1:25                  :::*                    LISTEN      2195/master         
tcp6       0      0 :::389                  :::*                    LISTEN      18444/docker-proxy  

可以看到 5432 TCP端口已被占用,強制干掉占用端口進程,后重新啟動容器

[root@localhost ~]# kill -9 1608
[root@localhost ~]# docker start db
db

此時容器正常啟動且可以通過工具訪問PostGres數(shù)據(jù)庫了。

4.使用已部署的dcm4che Archive 5應(yīng)用程序啟動Wildfly

將已部署的dcm4che Archive 5應(yīng)用程序提供Wildfly的容器啟動到創(chuàng)建的網(wǎng)絡(luò)中,例如:

docker run --network=dcm4chee_default --name arc \
           -p 8080:8080 \
           -p 8443:8443 \
           -p 9990:9990 \
           -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 /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone \
           -d dcm4che/dcm4chee-arc-psql:5.12.0

參數(shù)說明如下:

-p 8080:8080 \
-p 8443:8443 \
-p 9990:9990 \
-p 11112:11112 \
-p 2575:2575 \

將Web服務(wù)器的http(8080)和https(8443)端口以及9990WildFly管理控制臺的http端口(11112)和2575存檔應(yīng)用程序的DICOM和HL7端口從容器發(fā)布到主機,以啟用外部https客戶端,DICOM應(yīng)用程序和HL7發(fā)件人連接到WildFly和Archive應(yīng)用程序。
環(huán)境變量:

-e POSTGRES_DB=pacsdb \
-e POSTGRES_USER=pacs \
-e POSTGRES_PASSWORD=pacs \

設(shè)置數(shù)據(jù)庫名稱,用戶及其密碼以連接到PostgreSQL服務(wù)器,這些服務(wù)器必須與為PostgreSQL服務(wù)器容器指定的值相匹配。否則,存檔應(yīng)用程序?qū)o法連接到PostgreSQL服務(wù)器。

如果您設(shè)置環(huán)境變量LDAP_BASE_DN,LDAP_ROOTPASS或ARCHIVE_DEVICE_NAMELDAP服務(wù)器容器,你必須設(shè)置環(huán)境變量也為存檔容器。否則,存檔應(yīng)用程序?qū)o法連接到LDAP服務(wù)器,或者無法在LDAP目錄中找到其配置。

-e WILDFLY_WAIT_FOR="ldap:389 db:5432" 延遲WildFly的啟動,直到OpenLDAP slapd和PostgreSQL在指定端口上偵聽,這樣可以防止在OpenLDAP slapd和PostgreSQL準(zhǔn)備好接受連接之前由于歸檔應(yīng)用程序連接到LDAP和PostgreSQL失敗而導(dǎo)致所有容器重新啟動時出錯。

綁定安裝-v /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone需要注意將Wildfly服務(wù)器配置存儲在指定的主機目錄中。它在第一個容器啟動時初始化,如果它尚未存在于指定的主機目錄中。這可確保在刪除和重新創(chuàng)建Archive Server容器時數(shù)據(jù)不會丟失。

如果存檔成功啟動,請檢查宿主機Wildfly服務(wù)器日志:

$ tail -f /var/local/dcm4chee-arc/wildfly/log/server.log 
2017-09-03 20:34:38,934 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 64) WFLYUT0021: Registered web context: /dcm4chee-arc
2017-09-03 20:34:38,934 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 73) WFLYUT0021: Registered web context: /dcm4chee-arc/ui2
2017-09-03 20:34:38,934 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 81) WFLYUT0021: Registered web context: /dcm4chee-arc/xdsi
2017-09-03 20:34:39,219 INFO  [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-1) Start TCP Listener on /0.0.0.0:2575
2017-09-03 20:34:39,219 INFO  [org.dcm4che3.net.Connection] (EE-ManagedExecutorService-default-Thread-2) Start TCP Listener on /0.0.0.0:11112
2017-09-03 20:34:39,253 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 37) WFLYSRV0010: Deployed "dcm4chee-arc-ear-5.12.0-psql.ear" (runtime-name : "dcm4chee-arc-ear-5.12.0-psql.ear")
2017-09-03 20:34:39,399 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://0.0.0.0:9990/management
2017-09-03 20:34:39,399 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://0.0.0.0:9990
2017-09-03 20:34:39,399 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 10.1.0.Final (WildFly Core 2.2.0.Final) started in 9354ms - Started 2464 of 2849 services (647 services are lazy, passive or on-demand)

5.使用dcmTools工具進行發(fā)圖測試

docker run --rm --network=dcm4chee_default dcm4che/dcm4che-tools:5.10.5 storescu -c DCM4CHEE@arc:11112 /opt/dcm4che/etc/testdata/dicom

你也可以通過其他發(fā)圖工具如Efilm workStation,dcm4che 工具進行發(fā)圖測試,
值的說明的是docker啟動的默認參數(shù)如下:

AETtile:DCM4CHE
Port:11112
IP:docker 容器IP[本實例為docker創(chuàng)建的arc 容器IP]

訪問地址:http://192.168.43.50:8080/dcm4chee-arc/ui2/#/studies

發(fā)圖成功后,訪問DICOM歸檔管理界面,截圖如下:


歸檔截圖

到這一步就完成了所有的歸檔服務(wù)的搭建,是不是很簡答吶!

備注信息
Web Service URLs

Archive UI: http://<docker-host>:8080/dcm4chee-arc/ui2 - if secured, login with
Username Password Role
user user user
admin admin user + admin
Wildfly Administration Console: http://<docker-host>:9990, login with Username: admin, Password: admin.

DICOM QIDO-RS Base URL: http://<docker-host>:8080/dcm4chee-arc/aets/DCM4CHEE/rs

DICOM STOW-RS Base URL: http://<docker-host>:8080/dcm4chee-arc/aets/DCM4CHEE/rs

DICOM WADO-RS Base URL: http://<docker-host>:8080/dcm4chee-arc/aets/DCM4CHEE/rs

DICOM WADO-URI: http://<docker-host>:8080/dcm4chee-arc/aets/DCM4CHEE/wado

IHE XDS-I Retrieve Imaging Document Set: http://<docker-host>:8080/dcm4chee-arc/xdsi/ImagingDocumentSource

6.停止服務(wù)和容器

# docker kill arc
# docker kill ldap
# docker kill db
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容