docker/thirdparties/docker-compose/iceberg/iceberg.yaml.tpl (142 lines of code) (raw):
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
version: "3"
services:
spark-iceberg:
image: tabulario/spark-iceberg
container_name: doris--spark-iceberg
hostname: doris--spark-iceberg
build: spark/
depends_on:
rest:
condition: service_started
mc:
condition: service_completed_successfully
volumes:
- ./data/output/spark-warehouse:/home/iceberg/warehouse
- ./data/output/spark-notebooks:/home/iceberg/notebooks/notebooks
- ./data:/mnt/data
- ./scripts:/mnt/scripts
- ./spark-defaults.conf:/opt/spark/conf/spark-defaults.conf
- ./data/input/jars/paimon-spark-3.5-0.8.0.jar:/opt/spark/jars/paimon-spark-3.5-0.8.0.jar
- ./data/input/jars/paimon-s3-0.8.0.jar:/opt/spark/jars/paimon-s3-0.8.0.jar
environment:
- AWS_ACCESS_KEY_ID=admin
- AWS_SECRET_ACCESS_KEY=password
- AWS_REGION=us-east-1
entrypoint: /bin/sh /mnt/scripts/entrypoint.sh
networks:
- doris--iceberg
healthcheck:
test: ls /mnt/SUCCESS
interval: 5s
timeout: 120s
retries: 120
postgres:
image: postgis/postgis:14-3.3
container_name: doris--postgres
environment:
POSTGRES_PASSWORD: 123456
POSTGRES_USER: root
POSTGRES_DB: iceberg
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U root" ]
interval: 5s
timeout: 60s
retries: 120
volumes:
- ./data/input/pgdata:/var/lib/postgresql/data
networks:
- doris--iceberg
rest:
image: tabulario/iceberg-rest:1.6.0
container_name: doris--iceberg-rest
ports:
- ${REST_CATALOG_PORT}:8181
volumes:
- ./data:/mnt/data
depends_on:
postgres:
condition: service_healthy
minio:
condition: service_healthy
environment:
- AWS_ACCESS_KEY_ID=admin
- AWS_SECRET_ACCESS_KEY=password
- AWS_REGION=us-east-1
- CATALOG_WAREHOUSE=s3a://warehouse/wh/
- CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO
- CATALOG_S3_ENDPOINT=http://minio:9000
- CATALOG_URI=jdbc:postgresql://postgres:5432/iceberg
- CATALOG_JDBC_USER=root
- CATALOG_JDBC_PASSWORD=123456
networks:
- doris--iceberg
entrypoint: /bin/bash /mnt/data/input/script/rest_init.sh
minio:
image: minio/minio:RELEASE.2025-01-20T14-49-07Z
container_name: doris--minio
ports:
- ${MINIO_API_PORT}:9000
healthcheck:
test: [ "CMD", "mc", "ready", "local" ]
interval: 10s
timeout: 60s
retries: 120
environment:
- MINIO_ROOT_USER=admin
- MINIO_ROOT_PASSWORD=password
- MINIO_DOMAIN=minio
volumes:
- ./data/input/minio_data:/data
networks:
doris--iceberg:
aliases:
- warehouse.minio
command: ["server", "/data", "--console-address", ":9001"]
mc:
depends_on:
minio:
condition: service_healthy
image: minio/mc:RELEASE.2025-01-17T23-25-50Z
container_name: doris--mc
environment:
- AWS_ACCESS_KEY_ID=admin
- AWS_SECRET_ACCESS_KEY=password
- AWS_REGION=us-east-1
networks:
- doris--iceberg
volumes:
- ./data:/mnt/data
entrypoint: >
/bin/sh -c "
until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done;
if /usr/bin/mc ls minio/warehouse > /dev/null 2>&1; then
echo 'minio/warehouse already exists, skipping creation and copy.';
else
echo 'Creating minio/warehouse and copying data...';
/usr/bin/mc mb minio/warehouse;
/usr/bin/mc policy set public minio/warehouse;
/usr/bin/mc cp -r /mnt/data/input/minio/warehouse/* minio/warehouse/;
fi
"
networks:
doris--iceberg:
ipam:
driver: default
config:
- subnet: 168.38.0.0/24