run - docker tag example
¿Cómo crear la etiqueta con nombre y la última en Docker? (6)
Aquí está mi script bash
docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest
Luego puede eliminar imágenes sin etiquetar si reconstruyó la misma versión con
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
o
docker rmi $(docker images | grep "^<none>" | tr -s " " | cut -d'' '' -f3 | tr ''/n'' '' '')
o
Comandos de limpieza: a partir de Docker 1.13 introduce comandos de limpieza. Para eliminar todos los contenedores, imágenes, redes y volúmenes no utilizados:
docker system prune
o individualmente
docker container prune
docker image prune
docker network prune
docker volume prune
Supongamos que tengo una imagen que quiero etiquetar como 0.10.24
(en mi caso es una imagen que contiene Node.js 0.10.24). Construí esa imagen usando un Dockerfile y ejecutando la docker build
acoplador y proporcionando una etiqueta usando el parámetro -t
.
Espero que algún día tenga versiones adicionales de esa imagen, así que volveré a ejecutar el proceso, solo con otro nombre de etiqueta.
Hasta aquí todo bien. Esto funciona bien y todo está bien.
Pero, y aquí es donde comienzan los problemas, también quiero tener siempre la última imagen etiquetada y latest
. Así que supongo que necesito dar dos nombres a la misma imagen.
¿Cómo hago esto? ¿De verdad necesito volver a ejecutar docker build
en la misma versión exacta otra vez, pero esta vez usar otra etiqueta, hay alguna mejor opción?
Puede tener múltiples etiquetas al construir la imagen:
$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .
Referencia: https://docs.docker.com/engine/reference/commandline/build/#tag-image-t
Solo grep la ID de las docker images
del docker images
:
docker build -t creack/node:latest .
ID="$(docker images | grep ''creak/node'' | head -n 1 | awk ''{print $3}'')"
docker tag "$ID" creack/node:0.10.24
docker tag "$ID" creack/node:latest
No necesita un archivo temporal y ofrece una salida de compilación completa . Aún puede redirigirlo a /dev/null
o a un archivo de registro.
Una vez que tenga su imagen, puede usar
$ docker tag <image> <newName>/<repoName>:<tagName>
1. Crea y etiqueta la imagen con creack / node: latest
$ ID=$(docker build -q -t creack/node .)
2. Agregue una nueva etiqueta
$ docker tag $ID creack/node:0.10.24
3. Puede usar esto y omitir la parte -t de la compilación
$ docker tag $ID creack/node:latest
Variación de la respuesta de Aaron. Usando sed sin archivos temporales
#!/bin/bash
VERSION=1.0.0
IMAGE=company/image
ID=$(docker build -t ${IMAGE} . | tail -1 | sed ''s/.*Successfully built /(.*/)$//1/'')
docker tag ${ID} ${IMAGE}:${VERSION}
docker tag -f ${ID} ${IMAGE}:latest
ID=$(docker build -t creack/node .)
No funciona para mí ya que ID
contendrá el resultado de la compilación.
SO estoy usando este pequeño script BASH:
#!/bin/bash
set -o pipefail
IMAGE=...your image name...
VERSION=...the version...
docker build -t ${IMAGE}:${VERSION} . | tee build.log || exit 1
ID=$(tail -1 build.log | awk ''{print $3;}'')
docker tag $ID ${IMAGE}:latest
docker images | grep ${IMAGE}
docker run --rm ${IMAGE}:latest /opt/java7/bin/java -version