Docker로 Postgres 설치하고 MIMIC-III 데이터베이스 세팅하기

MIMIC-III 데이터베이스는 무료로 공개된 다년간의 중환자입원 기록으로, 다양한 의료정보 분석에 활용되고 있습니다.
본 글은 Docker로 Postgres 설치하고 MIMIC-III 데이터베이스 세팅한 방법에 대해 작성한 글로서, Docker로 테스트용 데이터베이스를 설치하는 사례를 소개합니다.
이 문서의 내용을 참조하였으며, 누구나 쉽게 mimic 데이터베이스를 설치할 수 있도록 정리하였습니다.
MIMIC-III 데이터는 교육을 이수한 후에 접근이 가능합니다. 자세한 정보는 여기를 참고하세요.

1단계. mimic-code 리포지토리를 클론

Workspace 폴더에 mimic-code 리포지토리를 클론합니다.

git clone https://github.com/MIT-LCP/mimic-code


2단계. MIMIC-III 데이터를 얻기

MIMIC csv 파일은 Workspace 폴더에 하위 폴더 ‘mimic’을 생성하고 mimic에 하위 폴더 ‘data’를 생성하고 이 폴더에 다운 받습니다.
다운 받은 zip 파일은 다음 커맨드 라인을 통해 unzip 합니다.

cd ~/Workspace/mimic-code/buildmimic/docker
source unzip_csv.sh ~/Workspace/mimic/data


3단계. 도커 이미지 만들기

다음과 같은 터미널 커맨드 라인을 통해 도커 이미지를 생성할 수 있습니다.

cd ~/Workspace/mimic-code/buildmimic/docker
docker build -t postgres/mimic .

docker 이미지가 성공적으로 생성되면,

docker images

다음과 같은 출력 결과를 볼 수 있습니다.

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
postgres/mimic                  latest              a664dd0d7238        2 minutes ago       349.4 MB


4단계. 컨테이너 배포하기

이미지가 생성되면, docker 컨데이너를 시작해야 합니다.
다음 커맨드 라인은 컨테이너를 시작하고 CSV 데이터 파일로부터 MIMIC III 데이터베이스를 생성하는 데 사용됩니다.
컨테이너가 시작되면 bash 스크립트가 자동으로 실행되어 mimic_build_files 디렉토리에서 SQL 스크립트를 실행합니다(BUILD_MIMIC = 1인 경우).

docker run \
--name mimic \
-p HOST_PORT:5432 \
-e BUILD_MIMIC=1 \
-e POSTGRES_PASSWORD=POSTGRES_USER_PASSWORD \
-e MIMIC_PASSWORD=MIMIC_USER_PASSWORD \
-v /HOST/mimic_data/csv:/mimic_data \
-v /HOST/PGDATA_DIR:/var/lib/PostgreSQL/data \
-d postgres/mimic

이 커맨드는 다음과 같은 세부 항목으로 이루어져 있습니다.

  • –name : 컨테이너의 이름
  • HOST_PORT : 컨테이너의 포트번호인 5432에 매핑될 호스트 포트 번호를 지정하여 원격으로 DB에 접속할 때 사용합니다.
  • BUILD_MIMIC : CSV 파일을 로딩하여 MIMIC 데이터베이스에 테이블을 생성해야 하는 경우 BUILD_MIMIC의 값을 1로 설정하며, CSV 데이터가 이전에 Postgres 데이터베이스에 로드되어 데이터베이스에 컨테이너를 연결만 하는 경우에는 위의 커맨드 라인에서 BUILD_MIMIC=0을 사용합니다.
  • POSTGRES_USER_PASSWORD : 관리자 계정인 postgres에 대한 패스워드를 설정합니다.
  • MIMIC_USER_PASSWORD : mimic 계정에 대한 패스워드를 설정합니다.
  • /HOST/mimic_data/csv : 컨테이너의 /mimic_data 디렉토리를 호스트에 CSV 파일이 위치한 디렉토리에 매핑하여 MIMIC III CSV 데이터 파일을 찾을 수 있도록 합니다.
  • /HOST/PGDATA_DIR : 컨테이너의 /var/lib/postgresql/data 디렉토리를 호스트의 host’s /HOST/PG_DATA 디렉토리에 매핑하여 데이터가 컨테이너가 아닌 호스트에 유지될 수 있도록 합니다. 이는 컨테이너가 삭제된 후에 다시 시작할 경우 데이터 손실을 방지할 수 있습니다.

Ubuntu 18.04에서 실행한 커맨드 예제 입니다.

docker run \
--name mimic \
-p 5555:5432 \
-e BUILD_MIMIC=1 \
-e POSTGRES_PASSWORD=postgres \
-e MIMIC_PASSWORD=mimic \
-v $HOME/Workspace/mimic/data:/mimic_data \
-v $HOME/Workspace/mimic/postgres_data:/var/lib/PostgreSQL/data \
-d postgres/mimic

ps 명령어를 통해 현재 실행중인 컨테이너 목록을 볼 수 있으며, 컨테이너가 성공적으로 생성되었음을 확인할 수 있습니다.

docker ps

컨테이너의 로그를 출력하고 싶은 경우에는 logs 명령어를 사용합니다.
여기서 ‘mimic’은 앞에서 생성한 컨테이너 이름입니다.
데이터를 처음 입력한다면, 입력 완료까지 시간이 꽤 소요되니 log에 “Done” 메시지가 출력되는 것을 꼭 확인하세요.

docker logs -f mimic 


5단계. 컨테이너 시작하기

컨테이너 생성 후 컨테이너를 시작하기 위해서는 다음 명령어를 실행합니다.
여기도 마찬가지로 ‘mimic’은 컨테이너 이름입니다.

docker start mimic


6단계. 데이터베이스 접속하기

컨테이너의 ip 주소를 확인하고 싶다면, inspect 명령어를 사용합니다.

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mimic

터미널에서 postgres에 접속하기 위해서는 다음을 실행합니다:
172.17로 시작되는 주소는 host내에서 독립적으로 생성된 컨테이너의 네트워크 주소 입니다.

psql -p 5432 -h 172.17.0.2 -U postgres -d mimic

또한 외부에서는 5432 포트번호와 매칭된 5555 포트번호를 통해 다음과 같이 접속할 수 있습니다.

psql -p 5555 -h 192.168.0.112 -U postgres -d mimic

No comments yet.

Leave a comment

Your email address will not be published.