version: "3.9" services: s3: image: minio/minio:RELEASE.2023-11-01T18-37-25Z restart: unless-stopped ports: - "9000:9000" - "9001:9001" environment: - MINIO_ROOT_USER=${AWS_ACCESS_KEY_ID} - MINIO_ROOT_PASSWORD=${AWS_SECRET_ACCESS_KEY} command: server /data --console-address ":9001" networks: - internal - public volumes: - minio_new_volume:/data db: image: mysql:8-oracle # -oracle tag supports arm64 architecture! restart: unless-stopped container_name: mlflow_db expose: - "3306" environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} volumes: - db_new_volume:/var/lib/mysql networks: - internal mlflow: image: ubuntu/mlflow:2.1.1_1.0-22.04 container_name: tracker_mlflow restart: unless-stopped ports: - "5000:5000" environment: - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_DEFAULT_REGION=${AWS_REGION} - MLFLOW_S3_ENDPOINT_URL=http://s3:9000 networks: - public - internal entrypoint: mlflow server --backend-store-uri mysql+pymysql://${MYSQL_USER}:${MYSQL_PASSWORD}@db:3306/${MYSQL_DATABASE} --default-artifact-root s3://${AWS_BUCKET_NAME}/ --artifacts-destination s3://${AWS_BUCKET_NAME}/ -h 0.0.0.0 depends_on: wait-for-db: condition: service_completed_successfully create_s3_buckets: image: minio/mc depends_on: - "s3" entrypoint: > /bin/sh -c " until (/usr/bin/mc alias set minio http://s3:9000 '${AWS_ACCESS_KEY_ID}' '${AWS_SECRET_ACCESS_KEY}') do echo '...waiting...' && sleep 1; done; /usr/bin/mc mb minio/${AWS_BUCKET_NAME}; exit 0; " networks: - internal wait-for-db: image: atkrad/wait4x depends_on: - db command: tcp db:3306 -t 90s -i 250ms networks: - internal run_test_experiment: build: context: ./test_experiment dockerfile: Dockerfile platforms: - "linux/amd64" depends_on: - "mlflow" environment: - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_DEFAULT_REGION=${AWS_REGION} - MLFLOW_S3_ENDPOINT_URL=http://s3:9000 - MLFLOW_TRACKING_URI=http://mlflow:5000 entrypoint: > /bin/sh -c " python3 mlflow_tracking.py; exit 0; " networks: - internal networks: internal: public: driver: bridge volumes: db_new_volume: minio_new_volume: