R 언어별 가이드
R 언어별 가이드
Docker를 사용해 R 어플리케이션을 컨테이너화하는 방법을 자세히 설명하는 가이드예요.
출처: 문서
본문
R 언어별 가이드는 Docker를 사용해 R 어플리케이션을 컨테이너화하는 방법을 알려줘요. 이 가이드에서 배울 내용:
- R 어플리케이션 컨테이너화 및 실행하기
- 컨테이너를 사용해 R 어플리케이션을 개발할 로컬 환경 설정하기
먼저 기존 R 어플리케이션을 컨테이너화하는 것부터 시작해볼게요.
R 어플리케이션 컨테이너화하기
사전 요구사항
git 클라이언트 가 있어야 해요. 이 섹션의 예제는 명령줄 기반 git 클라이언트를 사용하지만, 어떤 클라이언트든 사용할 수 있어요.
개요
이 섹션은 R 어플리케이션을 컨테이너화하고 실행하는 과정을 안내해요.
샘플 어플리케이션 가져오기
샘플 어플리케이션은 인기 있는 Shiny 프레임워크를 사용해요.
이 가이드와 함께 사용할 샘플 어플리케이션을 클론해주세요. 터미널을 열고 작업할 디렉터리로 이동한 뒤, 다음 명령으로 리포지토리를 클론해주세요:
$ git clone https://github.com/mfranzon/r-docker-dev.git && cd r-docker-dev
이제 r-docker-dev 디렉터리에 다음 내용이 있어야 해요.
├── r-docker-dev/
│ ├── src/
│ │ └── app.R
│ ├── src_db/
│ │ └── app_db.R
│ ├── compose.yaml
│ ├── Dockerfile
│ └── README.md
리포지토리의 파일에 대해 더 알려면 Dockerfile , .dockerignore , compose.yaml 을 참고하세요.
어플리케이션 실행하기
r-docker-dev 디렉터리 안에서 터미널에 다음 명령을 실행해주세요.
$ docker compose up --build
브라우저를 열고 http://localhost:3838 에서 어플리케이션을 확인해주세요. 간단한 Shiny 어플리케이션이 보여야 해요.
터미널에서 ctrl + c 를 눌러 어플리케이션을 중지해주세요.
백그라운드에서 어플리케이션 실행하기
-d 옵션을 추가하면 터미널에서 분리된 상태로 어플리케이션을 실행할 수 있어요. r-docker-dev 디렉터리 안에서 터미널에 다음 명령을 실행해주세요.
$ docker compose up --build -d
브라우저를 열고 http://localhost:3838 에서 어플리케이션을 확인해주세요. 간단한 Shiny 어플리케이션이 보여야 해요.
터미널에서 다음 명령으로 어플리케이션을 중지해주세요.
$ docker compose down
Compose 명령에 대한 자세한 내용은 Compose CLI 참조 를 참고하세요.
R 개발에 컨테이너 사용하기
사전 요구사항
R 어플리케이션 컨테이너화하기 를 완료하세요.
개요
이 섹션에서는 컨테이너화된 어플리케이션을 위한 개발 환경을 설정하는 방법을 배워요. 여기에는 다음이 포함돼요:
- 로컬 데이터베이스 추가 및 데이터 영속화
- 코드를 편집·저장할 때 Compose가 실행 중인 Compose 서비스를 자동으로 업데이트하도록 구성하기
샘플 어플리케이션 가져오기
데이터베이스에 연결하는 로직이 포함된 샘플 어플리케이션을 얻으려면 새 리포지토리를 클론해야 해요.
리포지토리를 클론할 디렉터리로 이동해 다음 명령을 실행해주세요.
$ git clone https://github.com/mfranzon/r-docker-dev.git
어플리케이션이 데이터베이스를 사용하도록 구성하기
Shiny 어플리케이션과 로컬 데이터베이스 사이의 연결을 시도하려면 Dockerfile 을 수정해 COPY 지시문을 바꿔야 해요:
-COPY src/ .
+COPY src_db/ .
로컬 데이터베이스 추가 및 데이터 영속화
컨테이너로 데이터베이스 같은 로컬 서비스를 설정할 수 있어요. 이 섹션에서는 데이터를 영속화할 볼륨과 데이터베이스 서비스를 정의하도록 compose.yaml 파일을 업데이트해요.
클론된 리포지토리의 디렉터리에서 IDE 또는 텍스트 편집기로 compose.yaml 파일을 열어주세요.
compose.yaml 파일에서 데이터베이스 구성을 위한 속성들의 주석을 해제해야 해요. 데이터베이스 패스워드 파일을 마운트하고, 컨테이너 안 파일의 위치를 가리키는 환경 변수를 shiny-app 서비스에 설정해야 해요.
다음은 업데이트된 compose.yaml 파일이에요.
services:
shiny-app:
build:
context: .
dockerfile: Dockerfile
ports:
- 3838:3838
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
depends_on:
db:
condition: service_healthy
secrets:
- db-password
db:
image: postgres:18
restart: always
user: postgres
secrets:
- db-password
volumes:
- db-data:/var/lib/postgresql
environment:
- POSTGRES_DB=example
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
expose:
- 5432
healthcheck:
test: ["CMD", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:
secrets:
db-password:
file: db/password.txt
참고: Compose 파일의 지시문에 대해 더 알려면 Compose 파일 참조 를 참고하세요.
Compose로 어플리케이션을 실행하기 전에, 이 Compose 파일이 데이터베이스의 패스워드를 담는 password.txt 파일을 지정한다는 점을 주목하세요. 이 파일은 소스 리포지토리에 포함되어 있지 않으므로 직접 만들어야 해요.
클론된 리포지토리의 디렉터리에서 db 라는 새 디렉터리를 만들고, 그 안에 데이터베이스의 패스워드를 담는 password.txt 파일을 만들어주세요. 좋아하는 IDE 또는 텍스트 편집기로 password.txt 파일에 다음 내용을 추가해주세요.
mysecretpassword
password.txt 파일을 저장하고 닫아주세요.
이제 r-docker-dev 디렉터리에 다음 내용이 있어야 해요.
├── r-docker-dev/
│ ├── db/
│ │ └── password.txt
│ ├── src/
│ │ └── app.R
│ ├── src_db/
│ │ └── app_db.R
│ ├── requirements.txt
│ ├── .dockerignore
│ ├── compose.yaml
│ ├── Dockerfile
│ └── README.md
이제 다음 docker compose up 명령을 실행해 어플리케이션을 시작해주세요.
$ docker compose up --build
이제 브라우저에서 http://localhost:3838 을 열어 DB 연결을 테스트해주세요.
DB CONNECTED 라는 팝업 메시지가 보여야 해요.
터미널에서 ctrl+c 를 눌러 어플리케이션을 중지해주세요.
서비스 자동 업데이트
Compose Watch를 사용하면 코드를 편집·저장할 때 실행 중인 Compose 서비스를 자동으로 업데이트할 수 있어요. Compose Watch에 대한 자세한 내용은 Compose Watch 사용하기 를 참고하세요.
compose.yaml 파일의 15~18행에 현재 작업 디렉터리의 파일이 변경될 때 Docker가 이미지를 재빌드하도록 트리거하는 속성이 있어요:
services:
shiny-app:
build:
context: .
dockerfile: Dockerfile
ports:
- 3838:3838
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
depends_on:
db:
condition: service_healthy
secrets:
- db-password
develop:
watch:
- action: rebuild
path: .
db:
image: postgres:18
restart: always
user: postgres
secrets:
- db-password
volumes:
- db-data:/var/lib/postgresql
environment:
- POSTGRES_DB=example
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
expose:
- 5432
healthcheck:
test: ["CMD", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:
secrets:
db-password:
file: db/password.txt
Compose Watch로 어플리케이션을 실행하려면 다음 명령을 실행해주세요.
$ docker compose watch
이제 app.R 을 수정하면 이미지를 재빌드하지 않고도 변경 사항을 실시간으로 볼 수 있어요!
터미널에서 ctrl+c 를 눌러 어플리케이션을 중지해주세요.
요약
이 섹션에서 Compose 파일을 설정해 로컬 데이터베이스를 추가하고 데이터를 영속화하는 방법을 살펴봤어요. 또한 Compose Watch를 사용해 코드를 업데이트할 때 컨테이너를 자동으로 재빌드·실행하는 방법도 배웠어요.
관련 정보:
- Compose 파일 참조
- Compose 파일 watch
- 멀티스테이지 빌드
더 알아보기 (Learn more)
- Docker Compose
- Compose Watch
- R / Shiny