Eu tenho um arquivo Skaffold como este:
apiVersion: skaffold/v4beta1
kind: Config
build:
artifacts:
- image: app/auth
context: auth
sync:
manual:
- src: src/**/*.ts
dest: .
docker:
dockerfile: Dockerfile
E deploymant
arquivos como o seguinte:
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
Com um Dockerfile
like abaixo:
FROM node:alpine
WORKDIR /app
COPY package.json .
RUN npm install --only=prod
COPY . .
CMD ["npm", "start"]
Mas depois de executar, skaffold dev
vejo uma lista de imagens docker como esta:
REPOSITORY TAG IMAGE ID CREATED SIZE
app/auth 429eadf4af2ad66af9f364eb3cfe8926e05276c4f579fe39c5112e3201b1e4ac 429eadf4af2a 15 minutes ago 345MB
app/auth latest 429eadf4af2a 15 minutes ago 345MB
É normal ter 2 imagens diferentes para cada container?
A execução de um
skaffold build
comando aciona uma construção de imagem, que resulta em umimage with two tags
;Um com a git tag ou git commit mais recente (por exemplo, my-app:ae7926d) e, como a imagem não é enviada para um registro de contêiner, uma tag que usa o ID de 64 caracteres da imagem.
Skaffold é grande em imutabilidade de imagem e
latter tag
é uma referência endereçável de conteúdo para a imagem no cache local. Se tivesse sido enviado para um registro, a referência imutável seria o resumo da imagem.Isso garante que usaremos apenas a imagem que o Skaffold criou e os arquivos
not a nefarious image masquerading as one and the same
.Além de fornecer flexibilidade no método de compilação que mencionamos anteriormente (ou seja, Docker, Jib e assim por diante), o Skaffold pode acomodar diferentes locais para a execução de compilações de imagens. Eles podem ser executados localmente, dentro de um cluster Kubernetes (usando Kaniko) ou remotamente usando (sem surpresa) o Google Cloud Build.
Acesse Desenvolvendo para Kubernetes com Skaffold (Criando imagens) para obter mais informações.
Veja também o SO semelhante que é claramente explicado sobre Por que o Skaffold mantém duas tags ao compilar para o daemon docker local?
Tags são baratas: são como links simbólicos, apontando para um identificador de imagem.
O Skaffold não pode simplesmente usar a tag de imagem computada, pois muitas convenções de tag não produzem tags exclusivas e a tag pode ser substituída por outro desenvolvedor e apontar para uma imagem diferente. Não é incomum para uma equipe de desenvolvedores ou testes paralelos enviar imagens para o mesmo repositório de imagens e encontrar conflitos de tags.