我有一个这样的 Skaffold 文件:
apiVersion: skaffold/v4beta1
kind: Config
build:
artifacts:
- image: app/auth
context: auth
sync:
manual:
- src: src/**/*.ts
dest: .
docker:
dockerfile: Dockerfile
以及deploymant
如下文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: app/auth
env:
- name: MONGO_URI
value: 'mongodb://auth-mongo-srv:27017/auth'
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
---
apiVersion: v1
kind: Service
metadata:
name: auth-srv
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 3000
targetPort: 3000
点赞Dockerfile
如下:
FROM node:alpine
WORKDIR /app
COPY package.json .
RUN npm install --only=prod
COPY . .
CMD ["npm", "start"]
但运行之后skaffold dev
我看到如下的 docker 镜像列表:
REPOSITORY TAG IMAGE ID CREATED SIZE
app/auth 429eadf4af2ad66af9f364eb3cfe8926e05276c4f579fe39c5112e3201b1e4ac 429eadf4af2a 15 minutes ago 345MB
app/auth latest 429eadf4af2a 15 minutes ago 345MB
每个容器有 2 个不同的图像是正常的吗?
答案1
After referring to a lot of documents it seems they're OK and no need to fix them.
运行skaffold build
命令会触发图像构建,从而产生image with two tags
;
一个具有最新的 git 标签或 git 提交(例如 my-app:ae7926d),并且由于图像未被推送到容器注册表,因此使用图像的 64 个字符 ID 的标签。
Skaffold 在图像不变性方面非常出色,latter tag
并且内容可寻址参考指向本地缓存中的图像。如果已将其推送到注册表,则不可变引用将是图像的摘要。
这确保我们只使用 Skaffold 构建的图像,并且not a nefarious image masquerading as one and the same
。
除了提供我们前面提到的构建方法的灵活性(即 Docker、Jib 等)之外,Skaffold 还可以适应执行镜像构建的不同位置。它们可以在本地执行,在 Kubernetes 集群内(使用 Kaniko),或者(不出所料)使用 Google Cloud Build 远程执行。
请通过使用 Skaffold 进行 Kubernetes 开发(构建镜像)了解更多信息。
另请参阅类似所以其中清楚地解释了为什么 Skaffold 在构建到本地 docker 守护进程时维护两个标签?
标签很便宜:它们就像符号链接,指向图像标识符。
Skaffold 不能只使用计算出的图像标签,因为许多标签约定不会产生唯一的标签,并且该标签可能会被其他开发人员覆盖并指向不同的图像。开发团队或并行测试将图像推送到同一个图像存储库并遇到标签冲突的情况并不罕见。