Как правильно ссылаться на Dockerfile при создании развертывания в Kubernetes?

#docker #kubernetes #dockerfile

#docker #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 hub?

Ответ №1:

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
  

Ответ №2:

https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#creating-a-deployment посмотри на это.

Убедитесь, что вы внимательно прочитали документацию 🙂