refactor: simplify Docker commands in Makefile
- Reduce Docker targets from 10 to 3 essential commands - Combine docker-build-local into docker-build (local development focus) - Integrate build step into docker-run for streamlined workflow - Remove redundant targets: docker-build (multi-arch), docker-push, docker-config, docker-stop, docker-logs, docker-shell, docker-clean-all, docker-dev, docker-rebuild - Keep most relevant commands: - docker-build: Build local image - docker-run: Build and run container (one-command workflow) - docker-clean: Clean all related resources - Simplify Docker development to essential use cases
This commit is contained in:
65
Makefile
65
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
|
||||
|
||||
Reference in New Issue
Block a user