diff --git a/Makefile b/Makefile index bf4ea40..5a30535 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ DOCKER_IMAGE ?= $(APP_NAME):latest export -.PHONY: help install clean dev build test docker-build docker-clean docker-stop docker-logs docker-shell docker-clean-all info docker-dev docker-rebuild +.PHONY: help install clean dev build test docker-build docker-run docker-clean info # Default target .DEFAULT_GOAL := help @@ -69,73 +69,24 @@ test-watch: ## Run unit tests in watch mode ##@ Docker -docker-build: ## Build Docker image for multiple architectures - @echo "Building multi-platform Docker image for $(APP_NAME): $(DOCKER_IMAGE)" - @docker buildx build --platform linux/amd64,linux/arm64 \ - --build-arg NODE_ENV=production \ - --build-arg APP_NAME=$(APP_NAME) \ - -t $(DOCKER_IMAGE) . - -docker-build-local: ## Build Docker image for local platform only - @echo "Building local Docker image for $(APP_NAME): $(DOCKER_IMAGE)" +docker-build: ## Build Docker image for local development + @echo "Building Docker image for $(APP_NAME): $(DOCKER_IMAGE)" @docker buildx build --platform linux/amd64 \ --build-arg NODE_ENV=production \ --build-arg APP_NAME=$(APP_NAME) \ -t $(DOCKER_IMAGE) --load . -docker-run: ## Run Docker container from built image - @echo "Running $(APP_NAME) container: $(DOCKER_IMAGE)" +docker-run: ## Build and run Docker container + @echo "Building and running $(APP_NAME) container: $(DOCKER_IMAGE)" @docker stop $(APP_NAME)-container 2>/dev/null || true @docker rm $(APP_NAME)-container 2>/dev/null || true + @make docker-build @docker run --rm -p 8080:80 --name $(APP_NAME)-container $(DOCKER_IMAGE) -docker-push: ## Push Docker image to registry - @echo "Pushing $(APP_NAME) Docker image: $(DOCKER_IMAGE)" - @docker image inspect $(DOCKER_IMAGE) >/dev/null 2>&1 || (echo "Error: Image $(DOCKER_IMAGE) not found. Run 'make docker-build' first." && exit 1) - @docker push $(DOCKER_IMAGE) - -docker-config: ## Show current Docker configuration - @echo "Current Docker configuration for $(APP_NAME):" - @echo " APP_NAME: $(APP_NAME)" - @echo " DOCKER_IMAGE: $(DOCKER_IMAGE)" - @echo " Available images:" - @docker images | grep -E "(REPOSITORY|$(shell echo $(DOCKER_IMAGE) | cut -d: -f1))" || true - -docker-stop: ## Stop running container - @echo "Stopping $(APP_NAME) container..." - @docker stop $(APP_NAME)-container 2>/dev/null || echo "No $(APP_NAME) container running" - @docker rm $(APP_NAME)-container 2>/dev/null || true - -docker-logs: ## Show container logs - @echo "Showing logs for $(APP_NAME) container..." - @docker logs $(APP_NAME)-container 2>/dev/null || echo "No $(APP_NAME) container found or not running" - -docker-shell: ## Open shell in running container - @echo "Opening shell in $(APP_NAME) container..." - @docker exec -it $(APP_NAME)-container /bin/sh || (echo "Error: Container $(APP_NAME)-container not running. Run 'make docker-run' first." && exit 1) - -docker-clean: ## Clean Docker resources +docker-clean: ## Clean Docker resources and containers @echo "Cleaning Docker resources for $(APP_NAME)..." - @docker image prune -f --filter "until=24h" 2>/dev/null || true - @docker volume prune -f 2>/dev/null || true - @docker container prune -f 2>/dev/null || true - -docker-clean-all: ## Remove all related Docker resources including images - @echo "Removing all Docker resources for $(APP_NAME)..." @docker stop $(APP_NAME)-container 2>/dev/null || true @docker rm $(APP_NAME)-container 2>/dev/null || true @docker rmi $(DOCKER_IMAGE) 2>/dev/null || true @docker image prune -f 2>/dev/null || true - -docker-dev: ## Build local image and run container (development workflow) - @echo "Building and running $(APP_NAME) for development..." - @make docker-stop - @make docker-build-local - @make docker-run - -docker-rebuild: ## Stop, clean, rebuild and run (complete refresh) - @echo "Complete rebuild of $(APP_NAME)..." - @make docker-stop - @make docker-clean-all - @make docker-build-local - @make docker-run + @docker container prune -f 2>/dev/null || true