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 集线器?
解决方案
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
推荐阅读
- firebase - Firebase 实时数据库:如何在此聊天应用数据结构中检索数据?
- javascript - 在Javascript中生成一个以0结尾的随机数
- delphi - 德尔福。如何阻止编辑器自动插入评论?
- java - 硬逻辑 - 反转格式
- python - EmptyDataError:从 S3 存储桶读取多个 csv 文件到 pandas Dataframe 时,没有要从文件解析的列
- mysql - 是否可以 SHOW CREATE TABLE 包括模式名称?
- kotlin - 如何使用材料 SearchBar 和 Firebase 实时数据库按值搜索?
- r-markdown - RMarkdown/bookdown 中 TikZ 数字的透明背景
- c# - 使用 Graph SDK 获取 Outlook 电子邮件文件夹和电子邮件
- github-pages - 在多个html页面之间同步静态站点上的代码?