首页 > 解决方案 > 在 Kubernetes 中创建部署时引用 Dockerfile 的正确方法是什么?

问题描述

假设我有一个看起来像这样的部署:

apiVersion: v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  template:
    kind: Pod
    metadata: myapp-pod
    labels:
      apptype: front-end
    containers:
    - name: nginx
      containers: <--what is supposed to go here?-->

如何使用现有的 Dockerfile 正确构建容器,而无需将构建映像推送到 Docker 集线器?

标签: dockerkubernetesdockerfile

解决方案


Kubernetes 无法构建镜像。您几乎都需要使用镜像注册表。这不一定是 Docker Hub:各种公共云提供商(AWS、Google、Azure)都有自己的注册表产品,也有一些第三方的,或者您可以运行自己的。

如果您使用云托管的 Kubernetes 安装(EKS、GKE、...),那么“正确”的做法是在您之前将构建的镜像推送到相应的镜像注册表(ECR、GCR...)运行。

docker build -t gcr.io/my/image:20201116 .
docker push gcr.io/my/image:20201116
containers:
  - name: anything
    image: gcr.io/my/image:20201116

在非常本地化的开发环境中,有一些有限的例外。例如,如果您使用 Minikube 作为本地 Kubernetes 安装,您可以将命令指向docker,以便docker build在 Kubernetes 上下文中构建映像。

eval $(minikube docker-env)
docker build -t my-image:20201116 .
containers:
  - name: anything
    image: my-image:20201116 # matches `docker build -t` option
    imagePullPolicy: Never   # since you manually built it inside the minikube Docker

推荐阅读