diff --git a/.github/workflows/yaml-format.yaml b/.github/workflows/yaml-format.yaml index 04eebd7..2072801 100644 --- a/.github/workflows/yaml-format.yaml +++ b/.github/workflows/yaml-format.yaml @@ -12,7 +12,9 @@ jobs: run: npm install eslint @eslint/js eslint-plugin-yml - name: Format docker-compose.yaml run: npx eslint "docker-compose.yaml" --fix + - name: Format docker-compose-persist.yaml + run: npx eslint "docker-compose-persist.yaml" --fix - name: Push commit to pull request uses: stefanzweifel/git-auto-commit-action@v5 with: - commit_message: Format docker-compose.yaml \ No newline at end of file + commit_message: Format docker compose YAML files \ No newline at end of file diff --git a/README.md b/README.md index 26287a2..f22f000 100644 --- a/README.md +++ b/README.md @@ -113,48 +113,48 @@ POSTGRES_USER=my-user POSTGRES_PASSWORD=my-password ./run.sh postgres ## Services -| Service Type | Service | Supported | -|-----------------------------|---------------|-----------| -| Change Data Capture | debezium | ✅ | -| Database | cassandra | ✅ | -| Database | cockroachdb | ✅ | -| Database | elasticsearch | ✅ | -| Database | mariadb | ✅ | -| Database | mongodb | ✅ | -| Database | mssql | ✅ | -| Database | mysql | ✅ | -| Database | neo4j | ✅ | -| Database | postgres | ✅ | -| Database | spanner | ✅ | -| Database | sqlite | ✅ | -| Database | opensearch | ❌ | -| Data Catalog | marquez | ✅ | -| Data Catalog | unitycatalog | ✅ | -| Data Catalog | amundsen | ❌ | -| Data Catalog | datahub | ❌ | -| Data Catalog | openmetadata | ❌ | -| Distributed Coordination | zookeeper | ✅ | -| Distributed Data Processing | flink | ✅ | -| HTTP | httpbin | ✅ | -| Identity Management | keycloak | ✅ | -| Job Orchestrator | airflow | ✅ | -| Job Orchestrator | dagster | ✅ | -| Job Orchestrator | mage-ai | ✅ | -| Job Orchestrator | prefect | ✅ | -| Messaging | activemq | ✅ | -| Messaging | kafka | ✅ | -| Messaging | rabbitmq | ✅ | -| Messaging | solace | ✅ | -| Notebook | jupyter | ✅ | -| Object Storage | minio | ✅ | -| Query Engine | duckdb | ✅ | -| Query Engine | flight-sql | ✅ | -| Query Engine | presto | ✅ | -| Query Engine | trino | ✅ | -| Real-time OLAP | clickhouse | ✅ | -| Real-time OLAP | doris | ✅ | -| Real-time OLAP | druid | ✅ | -| Real-time OLAP | pinot | ✅ | -| Test Data Management | data-caterer | ✅ | -| Workflow | temporal | ✅ | +| Service Type | Service | Supported | +|-----------------------------|--------------------|-----------| +| Change Data Capture | debezium | ✅ | +| Database | cassandra | ✅ | +| Database | cockroachdb | ✅ | +| Database | elasticsearch | ✅ | +| Database | mariadb | ✅ | +| Database | mongodb | ✅ | +| Database | mssql | ✅ | +| Database | mysql | ✅ | +| Database | neo4j | ✅ | +| Database | postgres | ✅ | +| Database | spanner | ✅ | +| Database | sqlite | ✅ | +| Database | opensearch | ❌ | +| Data Catalog | marquez | ✅ | +| Data Catalog | unitycatalog | ✅ | +| Data Catalog | amundsen | ❌ | +| Data Catalog | datahub | ❌ | +| Data Catalog | openmetadata | ❌ | +| Distributed Coordination | zookeeper | ✅ | +| Distributed Data Processing | flink | ✅ | +| HTTP | httpbin | ✅ | +| Identity Management | keycloak | ✅ | +| Job Orchestrator | airflow | ✅ | +| Job Orchestrator | dagster | ✅ | +| Job Orchestrator | mage-ai | ✅ | +| Job Orchestrator | prefect | ✅ | +| Messaging | activemq | ✅ | +| Messaging | kafka | ✅ | +| Messaging | rabbitmq | ✅ | +| Messaging | solace | ✅ | +| Notebook | jupyter | ✅ | +| Object Storage | minio | ✅ | +| Query Engine | duckdb | ✅ | +| Query Engine | flight-sql | ✅ | +| Query Engine | presto | ✅ | +| Query Engine | trino | ✅ | +| Real-time OLAP | clickhouse | ✅ | +| Real-time OLAP | doris | ✅ | +| Real-time OLAP | druid | ✅ | +| Real-time OLAP | pinot | ✅ | +| Test Data Management | data-caterer | ✅ | +| Workflow | temporal | ✅ | diff --git a/docker-compose-persist.yaml b/docker-compose-persist.yaml index 868b7fe..23ebca0 100644 --- a/docker-compose-persist.yaml +++ b/docker-compose-persist.yaml @@ -1,93 +1,93 @@ -"services": - "activemq": - "volumes": +services: + activemq: + volumes: - "./data/activemq/persist:/var/lib/artemis-instance" - "cassandra-server": - "volumes": + cassandra-server: + volumes: - "./data/cassandra/persist:/var/lib/cassandra" - "clickhouse-server": - "volumes": + clickhouse-server: + volumes: - "./data/clickhouse/persist:/var/lib/clickhouse" - "cockroachdb": - "volumes": + cockroachdb: + volumes: - "./data/cockroachdb/persist:/cockroach/cockroach-data" - "dagster": - "volumes": + dagster: + volumes: - "./data/dagster/persist:/opt/dagster/dagster_home/" - "druid": - "volumes": + druid: + volumes: - "./data/druid/persist/router_var:/opt/druid/var" - "druid-broker": - "volumes": + druid-broker: + volumes: - "./data/druid/persist/broker_var:/opt/druid/var" - "druid-coordinator": - "volumes": + druid-coordinator: + volumes: - "./data/druid/persist/shared:/opt/shared" - "./data/druid/persist/coordinator_var:/opt/druid/var" - "druid-historical": - "volumes": + druid-historical: + volumes: - "./data/druid/persist/shared:/opt/shared" - "./data/druid/persist/historical_var:/opt/druid/var" - "druid-middlemanager": - "volumes": + druid-middlemanager: + volumes: - "./data/druid/persist/shared:/opt/shared" - "./data/druid/persist/middle_var:/opt/druid/var" - "elasticsearch": - "volumes": + elasticsearch: + volumes: - "./data/elasticsearch/persist:/usr/share/elasticsearch/data:Z" - "flight-sql": - "volumes": + flight-sql: + volumes: - "./data/flight-sql/persist:/opt/data" - "jupyter": - "volumes": + jupyter: + volumes: - "./data/jupyter/persist:/home/jovyan/work" - "kafka-server": - "volumes": + kafka-server: + volumes: - "./data/kafka/persist/data:/var/lib/kafka/data" - "./data/kafka/persist/etc:/etc/kafka" - "mage-ai": - "volumes": + mage-ai: + volumes: - "./data/mage-ai/persist:/home/src/" - "mariadb": - "volumes": + mariadb: + volumes: - "./data/mariadb/persist:/var/lib/mysql:Z" - "marquez-server": - "volumes": + marquez-server: + volumes: - "./data/marquez/persist:/opt/marquez" - "minio": - "volumes": + minio: + volumes: - "./data/minio/persist:/data" - "mongodb-server": - "volumes": + mongodb-server: + volumes: - "./data/mongodb/persist:/data/db" - "mssql": - "volumes": + mssql: + volumes: - "./data/mssql/persist:/var/opt/mssql/data" - "mysql-server": - "volumes": + mysql-server: + volumes: - "./data/mysql/persist:/var/lib/mysql" - "neo4j": - "volumes": + neo4j: + volumes: - "./data/neo4j/persist:/data" - "postgres-server": - "volumes": + postgres-server: + volumes: - "./data/postgres/persist:/data/postgres" - "prefect-server": - "volumes": + prefect-server: + volumes: - "./data/prefect/persist:/root/.prefect" - "rabbitmq": - "volumes": + rabbitmq: + volumes: - "./data/rabbitmq/persist:/var/lib/rabbitmq" - "solace-server": - "volumes": + solace-server: + volumes: - "./data/solace/persist:/var/lib/solace" - "sqlite": - "volumes": + sqlite: + volumes: - "./data/sqlite/persist:/opt/data" - "temporal": - "volumes": + temporal: + volumes: - "./data/temporal/persist:/opt/data/db" - "unitycatalog": - "volumes": + unitycatalog: + volumes: - "./data/unitycatalog/persist:/opt/app/etc" -"version": "3.9" +version: "3.9" diff --git a/docker-compose.yaml b/docker-compose.yaml index c8a6545..5611dd9 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,855 +1,855 @@ -"services": - "activemq": - "container_name": "activemq" - "environment": +services: + activemq: + container_name: activemq + environment: - "ARTEMIS_USER=${ARTEMIS_USER:-artemis}" - "ARTEMIS_PASSWORD=${ARTEMIS_PASSWORD:-artemis}" - "healthcheck": - "interval": "15s" - "retries": 3 - "test": ["CMD-SHELL", "curl -k -f http://localhost:8161/admin"] - "timeout": "5s" - "image": "apache/activemq-artemis:${ACTIVEMQ_VERSION:-2.34.0}" - "ports": + healthcheck: + interval: 15s + retries: 3 + test: [CMD-SHELL, "curl -k -f http://localhost:8161/admin"] + timeout: 5s + image: "apache/activemq-artemis:${ACTIVEMQ_VERSION:-2.34.0}" + ports: - "61616:61616" - "8161:8161" - "airflow": - "command": "standalone" - "container_name": "airflow" - "depends_on": - "airflow-init": - "condition": "service_completed_successfully" - "environment": - - "AIRFLOW_UID=50000" + airflow: + command: standalone + container_name: airflow + depends_on: + airflow-init: + condition: service_completed_successfully + environment: + - AIRFLOW_UID=50000 - "AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres/airflow" - - "AIRFLOW__CORE__FERNET_KEY=" - - "AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=true" - - "AIRFLOW__CORE__LOAD_EXAMPLES=true" + - AIRFLOW__CORE__FERNET_KEY= + - AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=true + - AIRFLOW__CORE__LOAD_EXAMPLES=true - "AIRFLOW__API__AUTH_BACKENDS=airflow.api.auth.backend.basic_auth,airflow.api.auth.backend.session" - "healthcheck": - "interval": "30s" - "retries": 5 - "start_period": "30s" - "test": ["CMD", "curl", "--fail", "http://localhost:8080/health"] - "timeout": "10s" - "image": "apache/airflow:${AIRFLOW_VERSION:-2.9.2}" - "ports": + healthcheck: + interval: 30s + retries: 5 + start_period: 30s + test: [CMD, curl, --fail, "http://localhost:8080/health"] + timeout: 10s + image: "apache/airflow:${AIRFLOW_VERSION:-2.9.2}" + ports: - "8081:8080" - "restart": "always" - "user": "50000:0" - "volumes": + restart: always + user: "50000:0" + volumes: - "./data/airflow/dags:/opt/airflow/dags" - "airflow-init": + airflow-init: # yamllint disable rule:line-length - "command": - - "-c" + command: + - -c - | one_meg=1048576 mem_available=$$(($$(getconf _PHYS_PAGES) * $$(getconf PAGE_SIZE) / one_meg)) cpus_available=$$(grep -cE 'cpu[0-9]+' /proc/stat) disk_available=$$(df / | tail -1 | awk '{print $$4}') - warning_resources="false" + warning_resources=false if (( mem_available < 4000 )) ; then echo - echo -e "\033[1;33mWARNING!!!: Not enough memory available for Docker.\e[0m" - echo "At least 4GB of memory required. You have $$(numfmt --to iec $$((mem_available * one_meg)))" + echo -e \033[1;33mWARNING!!!: Not enough memory available for Docker.\e[0m + echo At least 4GB of memory required. You have $$(numfmt --to iec $$((mem_available * one_meg))) echo - warning_resources="true" + warning_resources=true fi if (( cpus_available < 2 )); then echo - echo -e "\033[1;33mWARNING!!!: Not enough CPUS available for Docker.\e[0m" - echo "At least 2 CPUs recommended. You have $${cpus_available}" + echo -e \033[1;33mWARNING!!!: Not enough CPUS available for Docker.\e[0m + echo At least 2 CPUs recommended. You have $${cpus_available} echo - warning_resources="true" + warning_resources=true fi if (( disk_available < one_meg * 10 )); then echo - echo -e "\033[1;33mWARNING!!!: Not enough Disk space available for Docker.\e[0m" - echo "At least 10 GBs recommended. You have $$(numfmt --to iec $$((disk_available * 1024 )))" + echo -e \033[1;33mWARNING!!!: Not enough Disk space available for Docker.\e[0m + echo At least 10 GBs recommended. You have $$(numfmt --to iec $$((disk_available * 1024 ))) echo - warning_resources="true" + warning_resources=true fi - if [[ $${warning_resources} == "true" ]]; then + if [[ $${warning_resources} == true ]]; then echo - echo -e "\033[1;33mWARNING!!!: You have not enough resources to run Airflow (see above)!\e[0m" - echo "Please follow the instructions to increase amount of resources available:" - echo " https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html#before-you-begin" + echo -e \033[1;33mWARNING!!!: You have not enough resources to run Airflow (see above)!\e[0m + echo Please follow the instructions to increase amount of resources available: + echo https://airflow.apache.org/docs/apache-airflow/stable/howto/docker-compose/index.html#before-you-begin echo fi mkdir -p /sources/logs /sources/dags /sources/plugins - chown -R "50000:0" /sources/{logs,dags,plugins} + chown -R 50000:0 /sources/{logs,dags,plugins} exec /entrypoint airflow version - "container_name": "airflow-init" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "entrypoint": "/bin/bash" + container_name: airflow-init + depends_on: + postgres: + condition: service_completed_successfully + entrypoint: /bin/bash # yamllint enable rule:line-length - "environment": - - "AIRFLOW_UID=50000" + environment: + - AIRFLOW_UID=50000 - "AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres/airflow" - - "_AIRFLOW_DB_MIGRATE=true" - - "_AIRFLOW_WWW_USER_CREATE=true" + - _AIRFLOW_DB_MIGRATE=true + - _AIRFLOW_WWW_USER_CREATE=true - "_AIRFLOW_WWW_USER_USERNAME=${AIRFLOW_USER:-airflow}" - "_AIRFLOW_WWW_USER_PASSWORD=${AIRFLOW_PASSWORD:-airflow}" - - "_PIP_ADDITIONAL_REQUIREMENTS=" - "image": "apache/airflow:${AIRFLOW_VERSION:-2.9.2}" - "user": "0:0" - "cassandra": - "command": ["-c", "/tmp/scripts/init.sh"] - "container_name": "cassandra-data" - "depends_on": - "cassandra-server": - "condition": "service_healthy" - "entrypoint": "/bin/bash" - "environment": - - "DS_LICENSE=accept" - "image": "datacatering/dse-server:6.8.48" - "volumes": + - _PIP_ADDITIONAL_REQUIREMENTS= + image: "apache/airflow:${AIRFLOW_VERSION:-2.9.2}" + user: "0:0" + cassandra: + command: [-c, /tmp/scripts/init.sh] + container_name: cassandra-data + depends_on: + cassandra-server: + condition: service_healthy + entrypoint: /bin/bash + environment: + - DS_LICENSE=accept + image: "datacatering/dse-server:6.8.48" + volumes: - "./data/cassandra/init.sh:/tmp/scripts/init.sh" - "${CASSANDRA_DATA:-./data/cassandra/data}:/tmp/data" - "cassandra-server": - "cap_add": - - "IPC_LOCK" - "container_name": "cassandra" - "environment": - - "DS_LICENSE=accept" - "healthcheck": - "interval": "30s" - "retries": 3 - "test": ["CMD-SHELL", "[ $$(nodetool statusgossip) = running ]"] - "timeout": "10s" - "image": "datacatering/dse-server:6.8.48" - "ports": + cassandra-server: + cap_add: + - IPC_LOCK + container_name: cassandra + environment: + - DS_LICENSE=accept + healthcheck: + interval: 30s + retries: 3 + test: [CMD-SHELL, [$$(nodetool statusgossip) = running]] + timeout: 10s + image: "datacatering/dse-server:6.8.48" + ports: - "9042:9042" - "ulimits": - "memlock": -1 - "clickhouse": - "command": ["/bin/bash", "-c", "/tmp/scripts/init.sh"] - "container_name": "clickhouse-data" - "depends_on": - "clickhouse-server": - "condition": "service_healthy" - "hostname": "clickhouse" - "image": "clickhouse/clickhouse-server:${CLICKHOUSE_VERSION:-24.5.3}" - "user": "101:101" - "volumes": + ulimits: + memlock: -1 + clickhouse: + command: [/bin/bash, -c, /tmp/scripts/init.sh] + container_name: clickhouse-data + depends_on: + clickhouse-server: + condition: service_healthy + hostname: clickhouse + image: "clickhouse/clickhouse-server:${CLICKHOUSE_VERSION:-24.5.3}" + user: "101:101" + volumes: - "./data/clickhouse/init.sh:/tmp/scripts/init.sh" - "${CLICKHOUSE_DATA:-./data/clickhouse/data}:/tmp/data" - "clickhouse-server": - "container_name": "clickhouse" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1" - "timeout": "5s" - "hostname": "clickhouse" - "image": "clickhouse/clickhouse-server:${CLICKHOUSE_VERSION:-24.5.3}" - "ports": + clickhouse-server: + container_name: clickhouse + depends_on: + postgres: + condition: service_completed_successfully + healthcheck: + interval: 10s + retries: 3 + test: "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1" + timeout: 5s + hostname: clickhouse + image: "clickhouse/clickhouse-server:${CLICKHOUSE_VERSION:-24.5.3}" + ports: - "8123:8123" - "9000:9000" - "user": "101:101" - "cockroachdb": - "command": ["start-single-node", "--insecure"] - "container_name": "cockroachdb" - "healthcheck": - "interval": "10s" - "retries": 5 - "test": ["CMD-SHELL", "curl --fail http://localhost:8080/ || exit 1"] - "timeout": "5s" - "image": "cockroachdb/cockroach:${COCKROACHDB_VERSION:-v24.1.0}" - "ports": + user: "101:101" + cockroachdb: + command: [start-single-node, --insecure] + container_name: cockroachdb + healthcheck: + interval: 10s + retries: 5 + test: [CMD-SHELL, "curl --fail http://localhost:8080/ || exit 1"] + timeout: 5s + image: "cockroachdb/cockroach:${COCKROACHDB_VERSION:-v24.1.0}" + ports: - "26257:26257" - "8080:8080" - "dagster": - "container_name": "dagster" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "entrypoint": ["dagster-webserver", "-h", "0.0.0.0", "-p", "3000", "-w", "/opt/dagster/app/workspace.yaml"] - "environment": - - "DAGSTER_POSTGRES_HOST=postgres" + dagster: + container_name: dagster + depends_on: + postgres: + condition: service_completed_successfully + entrypoint: [dagster-webserver, -h, 0.0.0.0, -p, 3000, -w, /opt/dagster/app/workspace.yaml] + environment: + - DAGSTER_POSTGRES_HOST=postgres - "DAGSTER_POSTGRES_USER=${POSTGRES_USER:-postgres}" - "DAGSTER_POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}" - - "DAGSTER_POSTGRES_DB=dagster" - - "DAGSTER_HOME=/opt/dagster/dagster_home/" - "image": "dagster/dagster-k8s:${DAGSTER_VERSION:-1.7.10}" - "ports": + - DAGSTER_POSTGRES_DB=dagster + - DAGSTER_HOME=/opt/dagster/dagster_home/ + image: "dagster/dagster-k8s:${DAGSTER_VERSION:-1.7.10}" + ports: - "3000:3000" - "volumes": + volumes: - "./data/dagster:/opt/dagster/app/" - "data-caterer": - "container_name": "data-caterer" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "environment": - - "DEPLOY_MODE=standalone" - "image": "datacatering/data-caterer-basic:${DATA_CATERER_VERSION:-0.10.10}" - "ports": + data-caterer: + container_name: data-caterer + depends_on: + postgres: + condition: service_completed_successfully + environment: + - DEPLOY_MODE=standalone + image: "datacatering/data-caterer-basic:${DATA_CATERER_VERSION:-0.10.10}" + ports: - "9898:9898" - "volumes": + volumes: - "./data/data-caterer/connection:/opt/DataCaterer/connection" - "./data/data-caterer/plan:/opt/DataCaterer/plan" - "debezium": - "container_name": "debezium" - "depends_on": - "debezium-connect": - "condition": "service_healthy" - "environment": + debezium: + container_name: debezium + depends_on: + debezium-connect: + condition: service_healthy + environment: - "KAFKA_CONNECT_URIS=http://debezium-connect:8083" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD", "curl", "--fail", "http://localhost:8080"] - "timeout": "10s" - "image": "debezium/debezium-ui:${DEBEZIUM_VERSION:-2.1.2.Final}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: [CMD, curl, --fail, "http://localhost:8080"] + timeout: 10s + image: "debezium/debezium-ui:${DEBEZIUM_VERSION:-2.1.2.Final}" + ports: - "8080:8080" - "debezium-connect": - "container_name": "debezium-connect" - "depends_on": - - "kafka" - "environment": + debezium-connect: + container_name: debezium-connect + depends_on: + - kafka + environment: - "BOOTSTRAP_SERVERS=kafka:29092" - - "GROUP_ID=1" - - "CONFIG_STORAGE_TOPIC=my_connect_configs" - - "OFFSET_STORAGE_TOPIC=my_connect_offsets" - - "STATUS_STORAGE_TOPIC=my_connect_statuses" - - "KEY_CONVERTER=org.apache.kafka.connect.json.JsonConverter" - - "VALUE_CONVERTER=org.apache.kafka.connect.json.JsonConverter" - - "CONNECT_REST_ADVERTISED_HOST_NAME=debezium-connect" - - "CONNECT_REST_PORT=8083" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD", "curl", "--fail", "http://localhost:8083"] - "timeout": "10s" - "image": "debezium/connect:${DEBEZIUM_CONNECT_VERSION:-2.6.2.Final}" - "ports": + - GROUP_ID=1 + - CONFIG_STORAGE_TOPIC=my_connect_configs + - OFFSET_STORAGE_TOPIC=my_connect_offsets + - STATUS_STORAGE_TOPIC=my_connect_statuses + - KEY_CONVERTER=org.apache.kafka.connect.json.JsonConverter + - VALUE_CONVERTER=org.apache.kafka.connect.json.JsonConverter + - CONNECT_REST_ADVERTISED_HOST_NAME=debezium-connect + - CONNECT_REST_PORT=8083 + healthcheck: + interval: 10s + retries: 3 + test: [CMD, curl, --fail, "http://localhost:8083"] + timeout: 10s + image: "debezium/connect:${DEBEZIUM_CONNECT_VERSION:-2.6.2.Final}" + ports: - "8083:8083" - "doris": - "container_name": "doris" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "image": "apache/doris:${DORIS_VERSION:-doris-all-in-one-2.1.0}" - "ports": + doris: + container_name: doris + depends_on: + postgres: + condition: service_completed_successfully + image: "apache/doris:${DORIS_VERSION:-doris-all-in-one-2.1.0}" + ports: - "8030:8030" - "8040:8040" - "9030:9030" - "druid": - "command": ["router"] - "container_name": "druid" - "depends_on": - "druid-broker": - "condition": "service_healthy" - "druid-coordinator": - "condition": "service_healthy" - "druid-historical": - "condition": "service_healthy" - "druid-middlemanager": - "condition": "service_healthy" - "postgres": - "condition": "service_healthy" - "zookeeper": - "condition": "service_healthy" - "env_file": "data/druid/environment" - "environment": + druid: + command: [router] + container_name: druid + depends_on: + druid-broker: + condition: service_healthy + druid-coordinator: + condition: service_healthy + druid-historical: + condition: service_healthy + druid-middlemanager: + condition: service_healthy + postgres: + condition: service_healthy + zookeeper: + condition: service_healthy + env_file: data/druid/environment + environment: - "druid_metadata_storage_connector_user=${POSTGRES_USER:-postgres}" - "druid_metadata_storage_connector_password=${POSTGRES_PASSWORD:-postgres}" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": "wget --no-verbose --tries=1 --spider http://localhost:8888/status/health || exit 1" - "timeout": "5s" - "image": "apache/druid:${DRUID_VERSION:-30.0.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: "wget --no-verbose --tries=1 --spider http://localhost:8888/status/health || exit 1" + timeout: 5s + image: "apache/druid:${DRUID_VERSION:-30.0.0}" + ports: - "8888:8888" - "druid-broker": - "command": ["broker"] - "container_name": "druid-broker" - "depends_on": - "druid-coordinator": - "condition": "service_healthy" - "postgres": - "condition": "service_healthy" - "zookeeper": - "condition": "service_healthy" - "env_file": "data/druid/environment" - "environment": + druid-broker: + command: [broker] + container_name: druid-broker + depends_on: + druid-coordinator: + condition: service_healthy + postgres: + condition: service_healthy + zookeeper: + condition: service_healthy + env_file: data/druid/environment + environment: - "druid_metadata_storage_connector_user=${POSTGRES_USER:-postgres}" - "druid_metadata_storage_connector_password=${POSTGRES_PASSWORD:-postgres}" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": "wget --no-verbose --tries=1 --spider http://localhost:8082/druid/broker/v1/loadstatus || exit 1" - "timeout": "5s" - "image": "apache/druid:${DRUID_VERSION:-30.0.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: "wget --no-verbose --tries=1 --spider http://localhost:8082/druid/broker/v1/loadstatus || exit 1" + timeout: 5s + image: "apache/druid:${DRUID_VERSION:-30.0.0}" + ports: - "8082:8082" - "druid-coordinator": - "command": ["coordinator"] - "container_name": "druid-coordinator" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "zookeeper": - "condition": "service_healthy" - "env_file": "data/druid/environment" - "environment": + druid-coordinator: + command: [coordinator] + container_name: druid-coordinator + depends_on: + postgres: + condition: service_completed_successfully + zookeeper: + condition: service_healthy + env_file: data/druid/environment + environment: - "druid_metadata_storage_connector_user=${POSTGRES_USER:-postgres}" - "druid_metadata_storage_connector_password=${POSTGRES_PASSWORD:-postgres}" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": "wget --no-verbose --tries=1 --spider http://localhost:8081/status/health || exit 1" - "timeout": "5s" - "image": "apache/druid:${DRUID_VERSION:-30.0.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: "wget --no-verbose --tries=1 --spider http://localhost:8081/status/health || exit 1" + timeout: 5s + image: "apache/druid:${DRUID_VERSION:-30.0.0}" + ports: - "8081:8081" - "druid-historical": - "command": ["historical"] - "container_name": "druid-historical" - "depends_on": - "druid-coordinator": - "condition": "service_healthy" - "postgres": - "condition": "service_healthy" - "zookeeper": - "condition": "service_healthy" - "env_file": "data/druid/environment" - "environment": + druid-historical: + command: [historical] + container_name: druid-historical + depends_on: + druid-coordinator: + condition: service_healthy + postgres: + condition: service_healthy + zookeeper: + condition: service_healthy + env_file: data/druid/environment + environment: - "druid_metadata_storage_connector_user=${POSTGRES_USER:-postgres}" - "druid_metadata_storage_connector_password=${POSTGRES_PASSWORD:-postgres}" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": "wget --no-verbose --tries=1 --spider http://localhost:8083/druid/historical/v1/readiness || exit 1" - "timeout": "5s" - "image": "apache/druid:${DRUID_VERSION:-30.0.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: "wget --no-verbose --tries=1 --spider http://localhost:8083/druid/historical/v1/readiness || exit 1" + timeout: 5s + image: "apache/druid:${DRUID_VERSION:-30.0.0}" + ports: - "8083:8083" - "druid-middlemanager": - "command": ["middleManager"] - "container_name": "druid-middlemanager" - "depends_on": - "druid-coordinator": - "condition": "service_healthy" - "postgres": - "condition": "service_healthy" - "zookeeper": - "condition": "service_healthy" - "env_file": "data/druid/environment" - "environment": + druid-middlemanager: + command: [middleManager] + container_name: druid-middlemanager + depends_on: + druid-coordinator: + condition: service_healthy + postgres: + condition: service_healthy + zookeeper: + condition: service_healthy + env_file: data/druid/environment + environment: - "druid_metadata_storage_connector_user=${POSTGRES_USER:-postgres}" - "druid_metadata_storage_connector_password=${POSTGRES_PASSWORD:-postgres}" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": "wget --no-verbose --tries=1 --spider http://localhost:8091/status/health || exit 1" - "timeout": "5s" - "image": "apache/druid:${DRUID_VERSION:-30.0.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: "wget --no-verbose --tries=1 --spider http://localhost:8091/status/health || exit 1" + timeout: 5s + image: "apache/druid:${DRUID_VERSION:-30.0.0}" + ports: - "8091:8091" - "8100-8105:8100-8105" - "duckdb": - "container_name": "duckdb" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "entrypoint": ["tail", "-F", "anything"] - "image": "datacatering/duckdb:${DUCKDB_VERSION:-v1.0.0}" - "volumes": + duckdb: + container_name: duckdb + depends_on: + postgres: + condition: service_completed_successfully + entrypoint: [tail, -F, anything] + image: "datacatering/duckdb:${DUCKDB_VERSION:-v1.0.0}" + volumes: - "./data/duckdb:/opt/data" - "elasticsearch": - "container_name": "elasticsearch" - "environment": - - "node.name=elasticsearch" - - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + elasticsearch: + container_name: elasticsearch + environment: + - node.name=elasticsearch + - ES_JAVA_OPTS=-Xms512m -Xmx512m - "ELASTIC_PASSWORD=${ELASTICSEARCH_PASSWORD:-elasticsearch}" - - "discovery.type=single-node" - "image": "docker.elastic.co/elasticsearch/elasticsearch:${ELASTICSEARCH_VERSION:-8.14.1}" - "ports": + - discovery.type=single-node + image: "docker.elastic.co/elasticsearch/elasticsearch:${ELASTICSEARCH_VERSION:-8.14.1}" + ports: - "9200:9200" - "9300:9300" - "restart": "unless-stopped" - "volumes": + restart: unless-stopped + volumes: - "./data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro,Z" - "flight-sql": - "command": ["tail", "-f", "/dev/null"] - "container_name": "flight-sql" - "depends_on": - - "duckdb" - - "sqlite" - "environment": - - "TLS_ENABLED=1" + flight-sql: + command: [tail, -f, /dev/null] + container_name: flight-sql + depends_on: + - duckdb + - sqlite + environment: + - TLS_ENABLED=1 - "FLIGHT_PASSWORD=${FLIGHT_SQL_PASSWORD:-flight_password}" - - "PRINT_QUERIES=1" - "image": "voltrondata/flight-sql:${FLIGHT_SQL_VERSION:-v1.4.0}" - "ports": + - PRINT_QUERIES=1 + image: "voltrondata/flight-sql:${FLIGHT_SQL_VERSION:-v1.4.0}" + ports: - "31337:31337" - "flink": - "command": "taskmanager" - "container_name": "flink" - "depends_on": - - "flink-jobmanager" - "environment": - - "JOB_MANAGER_RPC_ADDRESS=flink-jobmanager" + flink: + command: taskmanager + container_name: flink + depends_on: + - flink-jobmanager + environment: + - JOB_MANAGER_RPC_ADDRESS=flink-jobmanager - "FLINK_PROPERTIES=jobmanager.rpc.address:flink-jobmanager" - "expose": - - "6121" - - "6122" - "image": "flink:${FLINK_VERSION:-1.19.0-scala_2.12-java17}" - "links": [] - "flink-jobmanager": - "command": "jobmanager" - "container_name": "flink-jobmanager" - "environment": - - "JOB_MANAGER_RPC_ADDRESS=flink-jobmanager" + expose: + - 6121 + - 6122 + image: "flink:${FLINK_VERSION:-1.19.0-scala_2.12-java17}" + links: [] + flink-jobmanager: + command: jobmanager + container_name: flink-jobmanager + environment: + - JOB_MANAGER_RPC_ADDRESS=flink-jobmanager - "FLINK_PROPERTIES=jobmanager.rpc.address:flink-jobmanager" - "expose": - - "6123" - "image": "flink:${FLINK_VERSION:-1.19.0-scala_2.12-java17}" - "ports": + expose: + - 6123 + image: "flink:${FLINK_VERSION:-1.19.0-scala_2.12-java17}" + ports: - "8081:8081" - "httpbin": - "container_name": "http" - "environment": + httpbin: + container_name: http + environment: - "GUNICORN_CMD_ARGS=--capture-output --error-logfile - --access-logfile - --access-logformat '%(h)s %(t)s %(r)s %(s)s Host: %({Host}i)s}'" - "image": "kennethreitz/httpbin:${HTTPBIN_VERSION:-latest}" - "ports": + image: "kennethreitz/httpbin:${HTTPBIN_VERSION:-latest}" + ports: - "80:80" - "jupyter": - "command": ["jupyter", "notebook", "--no-browser", "--NotebookApp.token=''", "--NotebookApp.password=''"] - "container_name": "jupyter" - "image": "quay.io/jupyter/minimal-notebook:2024-07-02" - "ports": + jupyter: + command: [jupyter, notebook, --no-browser, "--NotebookApp.token=''", "--NotebookApp.password=''"] + container_name: jupyter + image: "quay.io/jupyter/minimal-notebook:2024-07-02" + ports: - "8888:8888" - "kafka": - "container_name": "kafka-data" - "depends_on": - "kafka-server": - "condition": "service_healthy" - "entrypoint": ["/bin/sh", "-c", "/tmp/scripts/init.sh"] - "environment": + kafka: + container_name: kafka-data + depends_on: + kafka-server: + condition: service_healthy + entrypoint: [/bin/sh, -c, /tmp/scripts/init.sh] + environment: - "KAFKA_TOPICS=${KAFKA_TOPICS:-accounts,transactions}" - "image": "confluentinc/confluent-local:${KAFKA_VERSION:-7.6.1}" - "volumes": + image: "confluentinc/confluent-local:${KAFKA_VERSION:-7.6.1}" + volumes: - "./data/kafka/init.sh:/tmp/scripts/init.sh" - "kafka-server": - "container_name": "kafka" - "environment": + kafka-server: + container_name: kafka + environment: - "KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,CONTROLLER:PLAINTEXT" - - "KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT" + - KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT - "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092" - "KAFKA_LISTENERS=PLAINTEXT://kafka:29092,CONTROLLER://localhost:29093,PLAINTEXT_HOST://0.0.0.0:9092" - "expose": - - "29092" - "healthcheck": - "interval": "5s" - "retries": 5 - "test": ["CMD-SHELL", "/bin/sh", "-c", "kafka-topics", "--bootstrap-server", "kafka:29092", "--list"] - "timeout": "5s" - "image": "confluentinc/confluent-local:7.6.1" - "ports": + expose: + - 29092 + healthcheck: + interval: 5s + retries: 5 + test: [CMD-SHELL, /bin/sh, -c, kafka-topics, --bootstrap-server, "kafka:29092", --list] + timeout: 5s + image: "confluentinc/confluent-local:7.6.1" + ports: - "9092:9092" - "keycloak": - "command": ["start-dev", "--import-realm"] - "container_name": "keycloak" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "environment": - - "KC_DB=postgres" + keycloak: + command: [start-dev, --import-realm] + container_name: keycloak + depends_on: + postgres: + condition: service_completed_successfully + environment: + - KC_DB=postgres - "KC_DB_USERNAME=${POSTGRES_USER:-postgres}" - "KC_DB_PASSWORD=${POSTGRES_PASSWORD:-postgres}" - "KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak" - - "KC_REALM_NAME=myrealm" + - KC_REALM_NAME=myrealm - "KEYCLOAK_ADMIN=${KEYCLOAK_USER:-admin}" - "KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_PASSWORD:-admin}" - "image": "quay.io/keycloak/keycloak:${KEYCLOACK_VERSION:-25.0.0}" - "ports": + image: "quay.io/keycloak/keycloak:${KEYCLOACK_VERSION:-25.0.0}" + ports: - "8082:8080" - "restart": "unless-stopped" - "volumes": + restart: unless-stopped + volumes: - "./data/keycloak/realm.json:/opt/keycloak/data/import/realm.json:ro" - "mage-ai": - "command": "mage start your_first_project" - "container_name": "mage-ai" - "environment": - - "USER_CODE_PATH=/home/src/your_first_project" - "image": "mageai/mageai:${MAGE_AI_VERSION:-0.9.71}" - "ports": + mage-ai: + command: mage start your_first_project + container_name: mage-ai + environment: + - USER_CODE_PATH=/home/src/your_first_project + image: "mageai/mageai:${MAGE_AI_VERSION:-0.9.71}" + ports: - "6789:6789" - "restart": "on-failure" - "mariadb": - "container_name": "mariadb" - "environment": + restart: on-failure + mariadb: + container_name: mariadb + environment: - "MARIADB_USER=${MARIADB_USER:-user}" - "MARIADB_PASSWORD=${MARIADB_PASSWORD:-password}" - - "MARIADB_ROOT_PASSWORD=root" - - "MARIADB_DATABASE=customer" - "image": "mariadb:${MARIADB_VERSION:-11.4.2}" - "ports": + - MARIADB_ROOT_PASSWORD=root + - MARIADB_DATABASE=customer + image: "mariadb:${MARIADB_VERSION:-11.4.2}" + ports: - "3306:3306" - "restart": "always" - "marquez": - "container_name": "marquez-web" - "depends_on": - - "marquez-data" - "environment": - - "MARQUEZ_HOST=host.docker.internal" - - "MARQUEZ_PORT=5002" - "image": "marquezproject/marquez-web:${MARQUEZ_VERSION:-0.47.0}" - "ports": + restart: always + marquez: + container_name: marquez-web + depends_on: + - marquez-data + environment: + - MARQUEZ_HOST=host.docker.internal + - MARQUEZ_PORT=5002 + image: "marquezproject/marquez-web:${MARQUEZ_VERSION:-0.47.0}" + ports: - "3001:3000" - "marquez-data": - "command": ["-c", "/tmp/scripts/init.sh"] - "container_name": "marquez-data" - "depends_on": - "marquez-server": - "condition": "service_healthy" - "entrypoint": "/bin/bash" - "environment": + marquez-data: + command: [-c, /tmp/scripts/init.sh] + container_name: marquez-data + depends_on: + marquez-server: + condition: service_healthy + entrypoint: /bin/bash + environment: - "MARQUEZ_URL=http://marquez:5000" - "image": "marquezproject/marquez:${MARQUEZ_VERSION:-0.47.0}" - "volumes": + image: "marquezproject/marquez:${MARQUEZ_VERSION:-0.47.0}" + volumes: - "./data/marquez/init.sh:/tmp/scripts/init.sh" - "${MARQUEZ_DATA:-./data/marquez/data}:/tmp/data" - "marquez-server": - "container_name": "marquez" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "environment": - - "MARQUEZ_CONFIG=/opt/app/marquez.yaml" - - "MARQUEZ_PORT=5000" - - "MARQUEZ_ADMIN_PORT=5001" - - "POSTGRES_HOST=postgres" - - "POSTGRES_PORT=5432" - - "POSTGRES_DB=marquez" + marquez-server: + container_name: marquez + depends_on: + postgres: + condition: service_completed_successfully + environment: + - MARQUEZ_CONFIG=/opt/app/marquez.yaml + - MARQUEZ_PORT=5000 + - MARQUEZ_ADMIN_PORT=5001 + - POSTGRES_HOST=postgres + - POSTGRES_PORT=5432 + - POSTGRES_DB=marquez - "POSTGRES_USER=${POSTGRES_USER:-postgres}" - "POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD", "curl", "--fail", "http://localhost:5001/healthcheck"] - "timeout": "5s" - "image": "marquezproject/marquez:${MARQUEZ_VERSION:-0.47.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: [CMD, curl, --fail, "http://localhost:5001/healthcheck"] + timeout: 5s + image: "marquezproject/marquez:${MARQUEZ_VERSION:-0.47.0}" + ports: - "5002:5000" - "5001:5001" - "volumes": + volumes: - "./data/marquez/conf:/opt/app" - "minio": - "command": ["server", "/data", "--console-address", ":9001"] - "container_name": "minio" - "environment": + minio: + command: [server, /data, --console-address, ":9001"] + container_name: minio + environment: - "MINIO_ROOT_USER=${MINIO_USER:-minioadmin}" - "MINIO_ROOT_PASSWORD=${MINIO_PASSWORD:-minioadmin}" - "healthcheck": - "interval": "5s" - "retries": 3 - "test": ["CMD", "mc", "ready", "local"] - "timeout": "5s" - "image": "quay.io/minio/minio:${MINIO_VERSION:-RELEASE.2024-06-04T19-20-08Z}" - "ports": + healthcheck: + interval: 5s + retries: 3 + test: [CMD, mc, ready, local] + timeout: 5s + image: "quay.io/minio/minio:${MINIO_VERSION:-RELEASE.2024-06-04T19-20-08Z}" + ports: - "9000:9000" - "9001:9001" - "mongodb": - "command": ["/bin/sh", "-c", "/opt/app/my_data.sh"] - "container_name": "mongodb-connect" - "depends_on": - - "mongodb-server" - "environment": + mongodb: + command: [/bin/sh, -c, /opt/app/my_data.sh] + container_name: mongodb-connect + depends_on: + - mongodb-server + environment: - "CONN_STR=mongodb://${MONGODB_USER:-user}:${MONGODB_PASSWORD:-password}@mongodb-server" - "image": "mongodb/mongodb-community-server:${MONGODB_VERSION:-7.0.11-ubi8}" - "volumes": + image: "mongodb/mongodb-community-server:${MONGODB_VERSION:-7.0.11-ubi8}" + volumes: - "./data/mongodb:/opt/app" - "mongodb-server": - "container_name": "mongodb" - "environment": + mongodb-server: + container_name: mongodb + environment: - "MONGO_INITDB_ROOT_USERNAME=${MONGODB_USER:-user}" - "MONGO_INITDB_ROOT_PASSWORD=${MONGODB_PASSWORD:-password}" - "image": "mongo:${MONGODB_VERSION:-7.0.11}" - "ports": + image: "mongo:${MONGODB_VERSION:-7.0.11}" + ports: - "27017:27017" - "mssql": - "container_name": "mssql" - "environment": + mssql: + container_name: mssql + environment: - "SA_PASSWORD=${MSSQL_PASSWORD:-yourStrong(!)Password}" - - "ACCEPT_EULA=Y" - "healthcheck": - "interval": "10s" - "retries": 10 - "test": ["CMD-SHELL", "mssql-health-check"] - "timeout": "10s" - "image": "mcr.microsoft.com/mssql/server:${MSSQL_VERSION:-2022-latest}" - "ports": + - ACCEPT_EULA=Y + healthcheck: + interval: 10s + retries: 10 + test: [CMD-SHELL, mssql-health-check] + timeout: 10s + image: "mcr.microsoft.com/mssql/server:${MSSQL_VERSION:-2022-latest}" + ports: - "1433:1433" - "volumes": + volumes: - "./data/mssql/mssql-health-check:/usr/local/bin/mssql-health-check" - "mysql": - "command": ["/bin/bash", "-c", "/tmp/scripts/init.sh"] - "container_name": "mysql-data" - "depends_on": - "mysql-server": - "condition": "service_healthy" - "environment": + mysql: + command: [/bin/bash, -c, /tmp/scripts/init.sh] + container_name: mysql-data + depends_on: + mysql-server: + condition: service_healthy + environment: - "MYSQL_PASSWORD=${MYSQL_PASSWORD:-root}" - "image": "mysql:${MYSQL_VERSION:-8.4.0}" - "volumes": + image: "mysql:${MYSQL_VERSION:-8.4.0}" + volumes: - "./data/mysql/init.sh:/tmp/scripts/init.sh" - "${MYSQL_DATA:-./data/mysql/data}:/tmp/data" - "mysql-server": - "command": "--mysql-native-password=ON" - "container_name": "mysql" - "environment": + mysql-server: + command: --mysql-native-password=ON + container_name: mysql + environment: - "MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD:-root}" - "healthcheck": - "interval": "5s" - "retries": 3 - "test": ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] - "timeout": "5s" - "image": "mysql:${MYSQL_VERSION:-8.4.0}" - "ports": + healthcheck: + interval: 5s + retries: 3 + test: [CMD, mysqladmin, ping, -h, localhost, -u, root, -p$$MYSQL_ROOT_PASSWORD] + timeout: 5s + image: "mysql:${MYSQL_VERSION:-8.4.0}" + ports: - "3306:3306" - "neo4j": - "container_name": "neo4j" - "environment": - - "NEO4J_AUTH=none" + neo4j: + container_name: neo4j + environment: + - NEO4J_AUTH=none - "NEO4J_dbms_connector_http_advertised__address=localhost:7474" - "NEO4J_dbms_connector_bolt_advertised__address=localhost:7687" - "healthcheck": - "interval": "30s" - "retries": 5 - "test": ["CMD-SHELL", "cypher-shell -u neo4j -p test 'RETURN 1' || exit 1"] - "timeout": "10s" - "image": "neo4j:${NEO4J_VERSION:-5.20.0}" - "ports": + healthcheck: + interval: 30s + retries: 5 + test: [CMD-SHELL, "cypher-shell -u neo4j -p test 'RETURN 1' || exit 1"] + timeout: 10s + image: "neo4j:${NEO4J_VERSION:-5.20.0}" + ports: - "7474:7474" - "7687:7687" - "pinot": - "command": "StartServer -zkAddress zookeeper:2181" - "container_name": "pinot-server" - "depends_on": - "pinot-broker": - "condition": "service_healthy" - "environment": + pinot: + command: "StartServer -zkAddress zookeeper:2181" + container_name: pinot-server + depends_on: + pinot-broker: + condition: service_healthy + environment: - "JAVA_OPTS=-Dplugins.dir=/opt/pinot/plugins -Xms4G -Xmx16G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:gc-pinot-server.log" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD", "curl", "--fail", "http://localhost:8098/health/readiness"] - "timeout": "5s" - "image": "apachepinot/pinot:${PINOT_VERSION:-1.1.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: [CMD, curl, --fail, "http://localhost:8098/health/readiness"] + timeout: 5s + image: "apachepinot/pinot:${PINOT_VERSION:-1.1.0}" + ports: - "8098:8098" - "restart": "unless-stopped" - "pinot-broker": - "command": "StartBroker -zkAddress zookeeper:2181" - "container_name": "pinot-broker" - "depends_on": - "pinot-controller": - "condition": "service_healthy" - "environment": + restart: unless-stopped + pinot-broker: + command: "StartBroker -zkAddress zookeeper:2181" + container_name: pinot-broker + depends_on: + pinot-controller: + condition: service_healthy + environment: - "JAVA_OPTS=-Dplugins.dir=/opt/pinot/plugins -Xms4G -Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:gc-pinot-broker.log" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD", "curl", "--fail", "http://localhost:8099/health"] - "timeout": "5s" - "image": "apachepinot/pinot:${PINOT_VERSION:-1.1.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: [CMD, curl, --fail, "http://localhost:8099/health"] + timeout: 5s + image: "apachepinot/pinot:${PINOT_VERSION:-1.1.0}" + ports: - "8099:8099" - "restart": "unless-stopped" - "pinot-controller": - "command": "StartController -zkAddress zookeeper:2181" - "container_name": "pinot" - "depends_on": - "zookeeper": - "condition": "service_healthy" - "environment": + restart: unless-stopped + pinot-controller: + command: "StartController -zkAddress zookeeper:2181" + container_name: pinot + depends_on: + zookeeper: + condition: service_healthy + environment: - "JAVA_OPTS=-Dplugins.dir=/opt/pinot/plugins -Xms1G -Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xloggc:gc-pinot-controller.log" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD", "curl", "--fail", "http://localhost:9000/pinot-controller/admin"] - "timeout": "5s" - "image": "apachepinot/pinot:${PINOT_VERSION:-1.1.0}" - "ports": + healthcheck: + interval: 10s + retries: 3 + test: [CMD, curl, --fail, "http://localhost:9000/pinot-controller/admin"] + timeout: 5s + image: "apachepinot/pinot:${PINOT_VERSION:-1.1.0}" + ports: - "9000:9000" - "restart": "unless-stopped" - "postgres": - "command": ["/bin/bash", "-c", "/tmp/scripts/init.sh"] - "container_name": "postgres-data" - "depends_on": - "postgres-server": - "condition": "service_healthy" - "environment": + restart: unless-stopped + postgres: + command: [/bin/bash, -c, /tmp/scripts/init.sh] + container_name: postgres-data + depends_on: + postgres-server: + condition: service_healthy + environment: - "POSTGRES_USER=${POSTGRES_USER:-postgres}" - "PGPASSWORD=${POSTGRES_PASSWORD:-postgres}" - "image": "postgres:${POSTGRES_VERSION:-16.3}" - "volumes": + image: "postgres:${POSTGRES_VERSION:-16.3}" + volumes: - "./data/postgres/init.sh:/tmp/scripts/init.sh" - "${POSTGRES_DATA:-./data/postgres/data}:/tmp/data" - "postgres-server": - "container_name": "postgres" - "environment": + postgres-server: + container_name: postgres + environment: - "POSTGRES_USER=${POSTGRES_USER:-postgres}" - "POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}" - - "PGDATA=/data/postgres" - "healthcheck": - "interval": "10s" - "retries": 3 - "test": ["CMD-SHELL", "pg_isready"] - "timeout": "5s" - "image": "postgres:${POSTGRES_VERSION:-16.3}" - "ports": + - PGDATA=/data/postgres + healthcheck: + interval: 10s + retries: 3 + test: [CMD-SHELL, pg_isready] + timeout: 5s + image: "postgres:${POSTGRES_VERSION:-16.3}" + ports: - "5432:5432" - "prefect": - "container_name": "prefect-data" - "depends_on": - - "prefect-server" - "entrypoint": ["/opt/prefect/app/start_flows.sh"] - "environment": + prefect: + container_name: prefect-data + depends_on: + - prefect-server + entrypoint: [/opt/prefect/app/start_flows.sh] + environment: - "PREFECT_API_URL=http://host.docker.internal:4200/api" - "image": "prefecthq/prefect:${PREFECT_VERSION:-2.19.5-python3.11}" - "volumes": + image: "prefecthq/prefect:${PREFECT_VERSION:-2.19.5-python3.11}" + volumes: - "./data/prefect/flows:/root/flows" - "./data/prefect/start_flows.sh:/opt/prefect/app/start_flows.sh" - "working_dir": "/root/flows" - "prefect-server": - "container_name": "prefect" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "entrypoint": ["/opt/prefect/entrypoint.sh", "prefect", "server", "start"] - "environment": + working_dir: /root/flows + prefect-server: + container_name: prefect + depends_on: + postgres: + condition: service_completed_successfully + entrypoint: [/opt/prefect/entrypoint.sh, prefect, server, start] + environment: - "PREFECT_UI_URL=http://127.0.0.1:4200/api" - "PREFECT_API_URL=http://127.0.0.1:4200/api" - - "PREFECT_SERVER_API_HOST=0.0.0.0" + - PREFECT_SERVER_API_HOST=0.0.0.0 - "PREFECT_API_DATABASE_CONNECTION_URL=postgresql+asyncpg://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/prefect" - "image": "prefecthq/prefect:${PREFECT_VERSION:-2.19.5-python3.11}" - "ports": + image: "prefecthq/prefect:${PREFECT_VERSION:-2.19.5-python3.11}" + ports: - "4200:4200" - "restart": "always" - "presto": - "container_name": "presto" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "image": "prestodb/presto:${PRESTO_VERSION:-0.287}" - "ports": + restart: always + presto: + container_name: presto + depends_on: + postgres: + condition: service_completed_successfully + image: "prestodb/presto:${PRESTO_VERSION:-0.287}" + ports: - "8083:8080" - "volumes": + volumes: - "./data/presto/etc:/opt/presto-server/etc" - "./data/presto/catalog:/opt/presto-server/etc/catalog" - "rabbitmq": - "container_name": "rabbitmq" - "environment": + rabbitmq: + container_name: rabbitmq + environment: - "RABBITMQ_DEFAULT_USER=${RABBITMQ_USER:-guest}" - "RABBITMQ_DEFAULT_PASS=${RABBITMQ_PASSWORD:-guest}" - "healthcheck": - "interval": "30s" - "retries": 3 - "test": "rabbitmq-diagnostics -q ping" - "timeout": "30s" - "hostname": "my-rabbit" - "image": "rabbitmq:${RABBITMQ_VERSION:-3.13.3-management}" - "ports": + healthcheck: + interval: 30s + retries: 3 + test: rabbitmq-diagnostics -q ping + timeout: 30s + hostname: my-rabbit + image: "rabbitmq:${RABBITMQ_VERSION:-3.13.3-management}" + ports: - "5672:5672" - "15672:15672" - "solace": - "container_name": "solace-data" - "depends_on": - "solace-server": - "condition": "service_healthy" - "entrypoint": ["/bin/sh", "-c", "/opt/app/my_data.sh"] - "image": "solace/solace-pubsub-standard:${SOLACE_VERSION:-10.8}" - "volumes": + solace: + container_name: solace-data + depends_on: + solace-server: + condition: service_healthy + entrypoint: [/bin/sh, -c, /opt/app/my_data.sh] + image: "solace/solace-pubsub-standard:${SOLACE_VERSION:-10.8}" + volumes: - "./data/solace:/opt/app" - "solace-server": - "container_name": "solace" - "deploy": - "restart_policy": - "condition": "on-failure" - "max_attempts": 1 - "environment": - - "username_admin_globalaccesslevel=admin" + solace-server: + container_name: solace + deploy: + restart_policy: + condition: on-failure + max_attempts: 1 + environment: + - username_admin_globalaccesslevel=admin - "username_admin_password=${SOLACE_PASSWORD:-admin}" - - "system_scaling_maxconnectioncount=100" - "healthcheck": - "interval": "30s" - "retries": 3 - "test": ["CMD-SHELL", "curl", "--output", "/dev/null", "--silent", "--head", "--fail", "http://localhost:8080"] - "timeout": "5s" - "image": "solace/solace-pubsub-standard:${SOLACE_VERSION:-10.8}" - "ports": + - system_scaling_maxconnectioncount=100 + healthcheck: + interval: 30s + retries: 3 + test: [CMD-SHELL, curl, --output, /dev/null, --silent, --head, --fail, "http://localhost:8080"] + timeout: 5s + image: "solace/solace-pubsub-standard:${SOLACE_VERSION:-10.8}" + ports: - "8080:8080" - "55554:55555" - "shm_size": "1g" - "ulimits": - "core": -1 - "nofile": - "hard": 6592 - "soft": 2448 - "spanner": - "container_name": "spanner" - "image": "gcr.io/cloud-spanner-emulator/emulator:${SPANNER_VERSION:-1.5.19}" - "ports": + shm_size: 1g + ulimits: + core: -1 + nofile: + hard: 6592 + soft: 2448 + spanner: + container_name: spanner + image: "gcr.io/cloud-spanner-emulator/emulator:${SPANNER_VERSION:-1.5.19}" + ports: - "9010:9010" - "9020:9020" - "sqlite": - "command": ["tail", "-f", "/dev/null"] - "container_name": "sqlite" - "image": "keinos/sqlite3:3.46.0" - "volumes": + sqlite: + command: [tail, -f, /dev/null] + container_name: sqlite + image: "keinos/sqlite3:3.46.0" + volumes: - "./data/sqlite:/opt/data" - "temporal": - "command": ["server", "start-dev", "--db-filename", "/opt/data/db/temporal.db", "--ip", "0.0.0.0", "--metrics-port", "9233"] - "container_name": "temporal" - "entrypoint": "temporal" - "environment": [] - "expose": - - "8233" - - "7233" - "image": "temporalio/server:${TEMPORAL_VERSION:-1.24.1.0}" - "ports": + temporal: + command: [server, start-dev, --db-filename, /opt/data/db/temporal.db, --ip, 0.0.0.0, --metrics-port, 9233] + container_name: temporal + entrypoint: temporal + environment: [] + expose: + - 8233 + - 7233 + image: "temporalio/server:${TEMPORAL_VERSION:-1.24.1.0}" + ports: - "8233:8233" - "7233:7233" - "9233:9233" - "trino": - "container_name": "trino" - "depends_on": - "postgres": - "condition": "service_completed_successfully" - "image": "trinodb/trino:${TRINO_VERSION:-449}" - "ports": + trino: + container_name: trino + depends_on: + postgres: + condition: service_completed_successfully + image: "trinodb/trino:${TRINO_VERSION:-449}" + ports: - "8084:8080" - "volumes": + volumes: - "./data/trino/etc:/usr/lib/trino/etc:ro" - "./data/trino/catalog:/etc/trino/catalog" - "unitycatalog": - "container_name": "unitycatalog" - "image": "datacatering/unitycatalog:${UNITYCATALOG_VERSION:-0.1.0}" - "ports": + unitycatalog: + container_name: unitycatalog + image: "datacatering/unitycatalog:${UNITYCATALOG_VERSION:-0.1.0}" + ports: - "8081:8081" - "zookeeper": - "container_name": "zookeeper" - "environment": - - "ZOO_MY_ID=1" - "healthcheck": - "interval": "5s" - "retries": 3 - "test": "nc -z localhost 2181 || exit -1" - "timeout": "5s" - "image": "zookeeper:${ZOOKEEPER_VERSION:-3.9.2}" - "ports": + zookeeper: + container_name: zookeeper + environment: + - ZOO_MY_ID=1 + healthcheck: + interval: 5s + retries: 3 + test: "nc -z localhost 2181 || exit -1" + timeout: 5s + image: "zookeeper:${ZOOKEEPER_VERSION:-3.9.2}" + ports: - "2181:2181" -"version": "3.9" +version: "3.9" diff --git a/eslint.config.mjs b/eslint.config.mjs index cceb150..4ed0e70 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -5,9 +5,7 @@ export default [ { files: ["docker-compose.yaml"], rules: { - "yml/sort-keys": "error", - "yml/quotes": ["error", {"prefer": "double"}], - "yml/plain-scalar": ["error", "never"] + "yml/sort-keys": "error" } } ]; \ No newline at end of file