Docker 컨테이너 속의 Trino
Docker 컨테이너 속의 Trino (Trino in a Docker container)
Trino 프로젝트는 기본 trinodb/trino Docker 이미지를 제공해요. 이 이미지에는 Trino 서버, 모든 플러그인, 기본 설정이 포함되어 있어요. Docker로 Trino를 빠르게 띄워 보고 싶을 때 가장 쉬운 방법이에요.
출처: 문서
본문
Trino 프로젝트는 기본 trinodb/trino Docker 이미지를 제공해요. 이 이미지에는 Trino 서버, 모든 플러그인, 기본 설정이 포함돼 있어요.
추가로 trinodb/trino-core Docker 이미지는 필수 플러그인만 최소한으로 담고 있어서, 커스텀 컨테이너를 만들 때 베이스로 적합해요. trino-packages 프로젝트에는 원하는 플러그인 조합으로 커스텀 Docker 이미지를 만드는 모듈이 있어요.
Docker 이미지는 Docker Hub에 배포되며, Docker 런타임을 포함한 여러 런타임에서 사용할 수 있어요. 이 이미지는 Trino Helm 차트와 함께 쓰기에도 적합해요.
컨테이너 실행 (Running the container)
Docker에서 Trino를 실행하려면 머신에 Docker 엔진이 설치되어 있어야 해요. Docker 웹사이트에서 다운로드하거나 운영체제의 패키징 시스템을 사용하면 돼요.
docker 명령으로 trinodb/trino 이미지에서 컨테이너를 만들어요. 나중에 참조하기 쉽도록 trino라는 이름을 붙이고, 백그라운드로 실행하며, 컨테이너 안의 기본 Trino 포트 8080을 워크스테이션의 8080 포트에 매핑해요.
docker run --name trino -d -p 8080:8080 trinodb/trino
컨테이너 이미지 태그를 지정하지 않으면 기본값 latest가 되지만, 배포된 어떤 Trino 버전이든 사용할 수 있어요. 예를 들어 trinodb/trino:483처럼요.
백그라운드에서 실행 중인 모든 컨테이너를 보려면 docker ps를 실행해요.
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
955c3b3d3d0a trinodb/trino:390 "/usr/lib/trino/bin/…" 39 hours ago Up 39 hours (healthy) 0.0.0.0:8080->8080/tcp trino
Trino가 아직 시작 중이면 (health: starting)으로, 준비되면 (healthy)로 표시돼요.
📌 참고: 컨테이너 안에서 Trino를 쓰는 방법은 여러 가지예요. Docker 컨테이너를 로컬에서 직접 실행하거나, Kubernetes 같은 컨테이너 오케스트레이션 플랫폼을 사용할 수 있어요. Kubernetes 지침은 "Trino on Kubernetes with Helm" 문서를 참고하세요.
쿼리 실행 (Executing queries)
이미지에는 Trino 커맨드라인 인터페이스(CLI) 클라이언트 trino가 포함돼 있어요. 기존 컨테이너 안에서 이것을 실행해 내부에서 실행 중인 Trino 서버에 연결해요. 클라이언트를 시작한 뒤, 예제 데이터가 포함된 tpch 카탈로그의 테이블에 쿼리를 입력하고 실행해요.
$ docker exec -it trino trino
trino> select count(*) from tpch.sf1.nation;
_col0
-------
25
(1 row)
Query 20181105_001601_00002_e6r6y, FINISHED, 1 node
Splits: 21 total, 21 done (100.00%)
0:06 [25 rows, 0B] [4 rows/s, 0B/s]
탐색을 마치면 quit 명령을 입력해요.
또는 워크스테이션에 직접 설치한 Trino CLI를 사용할 수도 있어요. CLI의 기본 서버 URL인 http://localhost:8080이 컨테이너를 시작할 때 사용한 포트와 일치해요. CLI 사용법에 대한 자세한 내용은 "Command line interface"를, JDBC 드라이버로 다른 클라이언트 애플리케이션에 연결하는 방법도 참고하세요.
Trino 구성 (Configuring Trino)
이미지에는 시작할 수 있는 기본 설정과 Trino를 탐색할 수 있는 몇몇 카탈로그가 이미 포함돼 있어요. "Deploying Trino"에서 만든 것처럼 로컬 etc 디렉토리 구조에 커스텀 설정 파일을 두고 컨테이너와 함께 사용할 수도 있어요. 컨테이너를 시작할 때 이 디렉토리를 /etc/trino 경로에 볼륨으로 마운트하면, 이미지의 기본 설정 대신 여러분의 설정을 사용해요.
$ docker run --name trino -d -p 8080:8080 --volume $PWD/etc:/etc/trino trinodb/trino
기본 설정을 유지하고 카탈로그만 구성하려면 /etc/trino/catalog에 폴더를 마운트하거나, 그 안에 개별 카탈로그 프로퍼티 파일을 마운트해요.
추가 플러그인을 사용하려면 /usr/lib/trino/plugin에 마운트해요.
컨테이너에 카탈로그 파일을 만들고 마운트하는 수고를 덜려면, CATALOG_MANAGEMENT 환경변수를 dynamic으로 설정해 동적 카탈로그 관리를 활성화할 수 있어요.
$ docker run --name trino -d -p 8080:8080 -e CATALOG_MANAGEMENT=dynamic trinodb/trino
Trino에 연결한 뒤 Catalog management 문장을 실행해 원하는 대로 카탈로그를 만들고 삭제할 수 있어요. 컨테이너 재시작 후에도 이 변경을 유지하려면 /etc/trino/catalog에 볼륨을 마운트해야 해요.
정리 (Cleaning up)
컨테이너를 멈추고 시작하려면 docker stop trino와 docker start trino 명령을 사용해요. 멈춘 컨테이너를 완전히 제거하려면 docker rm trino를 실행해요.
더 알아보기 (Learn more)
Docker로 Trino를 띄우고 쿼리까지 실행해 봤어요. 이어서 Kubernetes에서 Trino를 운영하는 방법("Trino on Kubernetes with Helm")을 살펴보면 좋아요.