projects ## spring quiz app - location : `/home/hpes/Videos/imp/java/spring/genz/quiz_back_docker-compose` **following will not work** - to go to bash use this `docker run --rm -it --name quiz-app quiz-app-docker:1.0 bash` - run app (use -d for detach mode) `docker run -p 8085:8080 --rm --name quiz-app quiz-app-docker:1.0` - build `docker build -t quiz-app:1.0 .` - Dockerfile ``` FROM alpine:latest RUN apk add --update bash openjdk17 maven mariadb mariadb-client COPY . /spring-app WORKDIR /spring-app RUN mvn package # Initialize MySQL database (this step will only run the first time) RUN mysql_install_db --user=root --basedir=/usr --datadir=/var/lib/mysql RUN mysqld_safe --user=root & \ sleep 3 && \ mysql -e "create database quiz;" && \ mysql quiz < quiz.sql EXPOSE 8080 RUN chmod +x entrypoint.sh # Start the MySQL service and your backend CMD sh /spring-app/entrypoint.sh ```   **docker compose method** (1.3 gb) docker-compose.yml ```yml version: '3.8' services: mysql: image: mysql:latest # You can use a different version if necessary environment: MYSQL_ROOT_PASSWORD: strong_password ports: - "3307:3306" # Expose MySQL on port 3307 volumes: - /var/lib/docker/volumes/mysql_app_data/_data:/var/lib/mysql # Persist MySQL data spring-app: build: . environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/quiz?allowMultiQueries=true SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: strong_password ports: - "8085:8080" # Expose Spring Boot app on port 8080 depends_on: - mysql # Ensure MySQL starts before Spring Boot app ``` Dockerfile for spring-app ``` FROM alpine:latest RUN apk add --update bash openjdk17 maven COPY . /spring-app WORKDIR /spring-app RUN mvn package EXPOSE 8080 CMD java -jar target/demo-0.0.1-SNAPSHOT.jar ``` two commands `docker-compose build` and `docker-compose up`   ## youtube playlist downloader 200 mb - location : `/home/hpes/Videos/imp/nodejs/production/youtube downloader/` - `docker build -t ytdown:1.0 .` DockerFile ``` FROM alpine RUN apk add --update nodejs npm bash # App 1 WORKDIR /src/puppetter_test COPY puppetter_test/ ./ RUN npm install # App 2 WORKDIR /src/ytDownloadSpace COPY ytDownloadSpace ./ RUN npm install # App 3 WORKDIR /src/ytdlApi COPY ytdlApi/ ./ RUN npm install RUN npm install -g pm2 #config file WORKDIR /src/puppetter_test EXPOSE 8081 CMD pm2 start ecosystem.config.js --no-daemon # CMD ["node", "app.js"] ```   for vps [setup.md](../../../../_resources/setup.md)