在GCP Kubernetes集群中基于Dockerfile扩展PHP镜像的部署疑问
解决方案:将自定义Docker镜像部署到GCP Kubernetes集群
首先明确:Kubernetes无法直接使用Dockerfile部署应用,它需要从容器镜像仓库拉取预构建好的镜像。不过结合你的GCP环境,我们可以很顺畅地把本地构建的镜像推送到Google Container Registry(GCR),再让K8s集群从GCR拉取使用。下面是一步步的操作指南:
一、准备:将本地镜像推送到GCR
你的Docker运行在虚拟机中,但docker命令已经和虚拟机打通了,所以不需要手动传输镜像,直接在本地终端执行以下步骤即可:
配置Docker与GCR的认证
执行这条命令,让Docker获得推送镜像到GCR的权限:gcloud auth configure-docker给镜像打上GCR格式的标签
GCR的镜像标签格式为:gcr.io/[你的GCP项目ID]/[镜像名]:[版本标签]- 如果你已经构建了
tuxin-php镜像,先查看镜像ID:
找到docker imagestuxin-php对应的IMAGE ID,然后打标签:docker tag [IMAGE_ID] gcr.io/your-gcp-project-id/tuxin-php:v1 - 或者,你可以在构建镜像时直接打好GCR标签(更高效):
docker build -t gcr.io/your-gcp-project-id/tuxin-php:v1 ./build
- 如果你已经构建了
推送镜像到GCR
执行推送命令:docker push gcr.io/your-gcp-project-id/tuxin-php:v1等待推送完成后,你可以在GCP控制台的Container Registry页面看到这个镜像。
二、更新Kubernetes Deployment使用新镜像
现在镜像已经在GCR上了,我们需要更新之前的Deployment来使用这个新镜像:
方法1:直接编辑Deployment(快速修改)
执行命令进入编辑模式:
kubectl edit deployment php-deployment
在打开的编辑器中,找到spec.template.spec.containers[0].image字段,将原来的php:7.1.13-apache-jessie替换为你推送的GCR镜像地址,比如gcr.io/your-gcp-project-id/tuxin-php:v1,保存退出即可。
方法2:修改YAML文件后重新应用(更适合版本控制)
复制原来的Deployment YAML文件,修改image字段为新的GCR镜像地址,然后执行:
kubectl apply -f updated-php-deployment.yaml
三、验证部署是否成功
- 查看Deployment的滚动更新状态:
kubectl rollout status deployment php-deployment - 确认新的Pod已经启动:
kubectl get pods - 进入Pod验证CertBot是否安装成功:
如果输出CertBot的版本号,说明安装成功。kubectl exec -it [你的Pod名称] -- certbot --version
额外说明
- GCR是GCP官方的镜像仓库,和你的Kubernetes集群天然集成,集群默认拥有拉取GCR镜像的权限,不需要额外配置密钥。
- 建议给镜像使用版本标签(比如
v1、v2),这样后续更新镜像时可以方便地回滚到旧版本。 - 如果你的GCP项目还没启用Container Registry API,执行推送命令时会提示你启用,按照提示操作即可。
内容的提问来源于stack exchange,提问作者ufk
相关产品推荐
相关产品推荐

