본문 바로가기
Engineering/DICOM, DIMSE Protocol, HL7

ORTHANC PACS : DICOM Query/Retrieve(C-FIND, C-MOVE, C-STORE) 테스트 환경 구성하기 (docker-compose)

by 알탱2 2021. 8. 6.
반응형

 아래 내용은 docker-compose를 사용하여 docker container로 orthanc pacs를 실행하는 방법입니다. 그 중, DICOM Query/Retrieve(C-FIND, C-MOVE, C-STORE) 연동을 위해 필요한 주요 설정에 대한 설명이니, 더 상세한 정보는 Orthanc Book 사이트를 참고하세요.

 

실행 환경 정보

  • CentOS 7.9
  • docker 20.10.6
  • docker-compose 1.29.2
  • configurations :

 

Configurations

docker-compose.yml

version: '3.5'
services:
app:
image: jodogne/orthanc-plugins:1.9.6
hostname: orthanc
volumes:
# Config
- ./orthanc.json:/etc/orthanc/orthanc.json:ro
# Persist data
- orthanc_db/:/var/lib/orthanc/db/
ports:
- 4242:4242 # DICOM
- 8042:8042 # Web
restart: always
volumes:
orthanc_db:

 

orthanc.json

json 설정 전문은 아래 설정 샘플을 복사하여 사용하시면 됩니다.

테스트 환경에 맞게 변경이 필요한 주요 설정은 아래와 같습니다.

  • DicomAet : PACS의 AETitle을 설정합니다. (ORTHANC)
  • HttpServerEnabled : Http Web Admin으로 목록 조회를 하고 싶다면 true로 설정합니다. (true)
  • HttpPort : HttpServerEnabled 가 true인 경우 Web Browser에서 접속에 사용할 Port를 설정합니다. (8042)
  • DicomPort : C-FIND, C-MOVE, C-STORE 등.. DIMSE Protocol을 위한 Listen Port를 설정합니다. (4242)
  • DicomModalities :
    • C-FIND, C-MOVE, C-STORE 등을 요청하는 연동 Client/Server의 AETitle과 IP, Port를 설정합니다.
    • 리스트로 N개 설정 가능하며, 여기에 등록되지 않은 AETitle의 Client(Modality)에서의 요청은 reject 하게 됩니다.
    • 요청 Client의 경우 Port를 특정할 수 없기 때문에 Port는 적당한 값으로 설정해도 됩니다.
    • 예시 )
      "DicomModalities": {
             "find" : ["FINDSCU", "10.10.10.1", 10001],

             "store" : ["STORESCU", "10.10.10.2", 10002],

             "move" : ["MOVESCU", "10.10.10.3", 10003]
      }
{
"Name": "Orthanc inside Docker",
"StorageDirectory": "/var/lib/orthanc/db",
"IndexDirectory": "/var/lib/orthanc/db",
"StorageCompression": false,
"MaximumStorageSize": 0,
"MaximumPatientCount": 0,
"LuaScripts": [],
"Plugins": ["/usr/share/orthanc/plugins", "/usr/local/share/orthanc/plugins"],
"ConcurrentJobs": 2,
"HttpServerEnabled": true,
"HttpPort": 8042,
"HttpDescribeErrors": true,
"HttpCompressionEnabled": true,
"DicomServerEnabled": true,
"DicomAet": "ORTHANC",
"DicomCheckCalledAet": false,
"DicomPort": 4242,
"DefaultEncoding": "Latin1",
"DeflatedTransferSyntaxAccepted": true,
"JpegTransferSyntaxAccepted": true,
"Jpeg2000TransferSyntaxAccepted": true,
"JpegLosslessTransferSyntaxAccepted": true,
"JpipTransferSyntaxAccepted": true,
"Mpeg2TransferSyntaxAccepted": true,
"RleTransferSyntaxAccepted": true,
"UnknownSopClassAccepted": false,
"DicomScpTimeout": 30,
"RemoteAccessAllowed": true,
"SslEnabled": false,
"SslCertificate": "certificate.pem",
"AuthenticationEnabled": false,
"RegisteredUsers": {
"test": "test"
},
"DicomModalities": {
"find" : ["FINDSCU", "10.10.10.1", 10001],
"store" : ["STORESCU", "10.10.10.2", 10002],
"move" : ["MOVESCU", "10.10.10.3", 10003],
"src" : ["SRCSCU", "10.10.10.4", 10004]
},
"DicomModalitiesInDatabase": false,
"DicomAlwaysAllowEcho": true,
"DicomAlwaysAllowStore": true,
"DicomCheckModalityHost": false,
"DicomScuTimeout": 10,
"OrthancPeers": {},
"OrthancPeersInDatabase": false,
"HttpProxy": "",
"HttpVerbose": true,
"HttpTimeout": 10,
"HttpsVerifyPeers": true,
"HttpsCACertificates": "",
"UserMetadata": {},
"UserContentType": {},
"StableAge": 60,
"StrictAetComparison": false,
"StoreMD5ForAttachments": true,
"LimitFindResults": 0,
"LimitFindInstances": 0,
"LimitJobs": 10,
"LogExportedResources": false,
"KeepAlive": true,
"TcpNoDelay": true,
"HttpThreadsCount": 50,
"StoreDicom": true,
"DicomAssociationCloseDelay": 5,
"QueryRetrieveSize": 10,
"CaseSensitivePN": false,
"LoadPrivateDictionary": true,
"Dictionary": {},
"DefaultPrivateCreator": "Lunit",
"SynchronousCMove": true,
"JobsHistorySize": 10,
"SaveJobs": true,
"OverwriteInstances": false,
"MediaArchiveSize": 1,
"StorageAccessOnFind": "Always",
"MetricsEnabled": true,
"DicomWeb": {
"Enable": true,
"Root": "/dicom-web/",
"EnableWado": true,
"WadoRoot": "/wado",
"Host": "127.0.0.1",
"Ssl": false,
"StowMaxInstances": 10,
"StowMaxSize": 10,
"QidoCaseSensitive": false
}
}
view raw orthanc.json hosted with ❤ by GitHub

 

반응형

댓글