Minikube 本地 Registry 管理 Laravel 和 Vue 镜像 使用 Minikube 内置的 registry 可以方便地在本地管理 Laravel 和 Vue 镜像,无需依赖外部 registry(如 Docker Hub)。以下是完整的配置方案: 1. 启用 Minikube 的本地 Registry # 启动 Minikube 并启用 registry 插件 minikube start --driver=docker --insecure-registry="10.0.0.0/24" minikube addons enable registry # 查看 registry 服务 kubectl get svc -n kube-system | grep registry # 设置端口转发,使本地可以访问 registry kubectl port-forward --namespace kube-system service/registry 5000:80 & 2. 配置 Docker 使用 Minikube 的 Registry # 设置环境变量指向 Minikube 的 Docker daemon eval $(minikube docker-env) # 验证是否连接到 Minikube 的 Docker docker info | grep "Name: minikube" 3. 构建和推送 Laravel 镜像 Laravel Dockerfile 示例 # Dockerfile.laravel FROM php:8.1-fpm # 安装依赖 RUN apt-get update && apt-get install -y \ git \ curl \ libpng-dev \ libonig-dev \ libxml2-dev \ zip \ unzip \ libzip-dev # 安装 PHP 扩展 RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip # 安装 Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer # 设置工作目录 WORKDIR /var/www # 复制项目文件 COPY . . # 安装依赖 RUN composer install --optimize-autoloader --no-dev # 优化配置 RUN php artisan config:cache && \ php artisan route:cache && \ php artisan view:cache # 暴露端口 EXPOSE 9000 # 启动命令 CMD ["php-fpm"] 构建和推送 Laravel 镜像 # 构建镜像 docker build -t localhost:5000/laravel-app:latest -f Dockerfile.laravel . # 推送镜像到本地 registry docker push localhost:5000/laravel-app:latest # 验证镜像是否在 registry 中 curl http://localhost:5000/v2/_catalog 4. 构建和推送 Vue 镜像 Vue Dockerfile 示例 # Dockerfile.vue FROM node:16 as builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] 相关 Nginx 配置 # nginx.conf server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://laravel-backend:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 构建和推送 Vue 镜像 # 构建镜像 docker build -t localhost:5000/vue-app:latest -f Dockerfile.vue . # 推送镜像到本地 registry docker push localhost:5000/vue-app:latest # 验证镜像 curl http://localhost:5000/v2/_catalog 5. 部署 Kubernetes 资源 Laravel 部署配置 # laravel-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: laravel-backend namespace: laravel-vue-app spec: replicas: 2 selector: matchLabels: app: laravel-backend template: metadata: labels: app: laravel-backend spec: containers: - name: laravel-app image: localhost:5000/laravel-app:latest imagePullPolicy: Always env: - name: DB_HOST value: "mysql" - name: DB_DATABASE value: "laravel" - name: DB_USERNAME value: "root" - name: DB_PASSWORD valueFrom: secretKeyRef: name: laravel-secrets key: db-password ports: - containerPort: 9000 resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" Vue 部署配置 # vue-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: vue-frontend namespace: laravel-vue-app spec: replicas: 2 selector: matchLabels: app: vue-frontend template: metadata: labels: app: vue-frontend spec: containers: - name: vue-app image: localhost:5000/vue-app:latest imagePullPolicy: Always ports: - containerPort: 80 resources: requests: cpu: "50m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" 6. 验证部署 # 应用所有配置 kubectl apply -f namespace.yaml kubectl apply -f mysql-pvc.yaml kubectl apply -f mysql-deployment.yaml kubectl apply -f mysql-service.yaml kubectl apply -f redis-deployment.yaml kubectl apply -f redis-service.yaml kubectl apply -f laravel-deployment.yaml kubectl apply -f laravel-service.yaml kubectl apply -f vue-deployment.yaml kubectl apply -f vue-service.yaml kubectl apply -f ingress.yaml # 查看 pod 状态 kubectl get pods -n laravel-vue-app -w # 获取应用 URL minikube service list 7. 自动化构建和部署脚本 创建 build-and-deploy.sh 脚本: #!/bin/bash # 构建 Laravel 镜像 echo "Building Laravel image..." docker build -t localhost:5000/laravel-app:latest -f Dockerfile.laravel . docker push localhost:5000/laravel-app:latest # 构建 Vue 镜像 echo "Building Vue image..." docker build -t localhost:5000/vue-app:latest -f Dockerfile.vue . docker push localhost:5000/vue-app:latest # 重新部署 Kubernetes 资源 echo "Redeploying applications..." kubectl rollout restart deployment/laravel-backend -n laravel-vue-app kubectl rollout restart deployment/vue-frontend -n laravel-vue-app echo "Deployment complete!" 8. 常见问题解决 镜像拉取问题 如果遇到镜像拉取问题,可以尝试: # 确保 Minikube 使用本地 Docker daemon eval $(minikube docker-env) # 检查 registry 是否运行 kubectl get pods -n kube-system | grep registry # 如果 registry 有问题,重新启用 minikube addons disable registry minikube addons enable registry 性能优化 对于开发环境,可以配置资源限制: # 在 deployment 中添加 resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "500m" memory: "512Mi" 9. 清理资源 # 删除部署 kubectl delete -f . # 禁用 registry minikube addons disable registry # 删除本地镜像 docker rmi localhost:5000/laravel-app:latest docker rmi localhost:5000/vue-app:latest 通过这种方式,您可以在 Minikube 环境中完全本地化管理 Laravel 和 Vue 镜像,无需依赖外部 registry,适合开发和测试环境使用。