डॉकर में नाम और नवीनतम टैग कैसे बनाएं?


241

माना कि मेरी एक छवि है जिसे मैं टैग करना चाहता हूं 0.10.24(मेरे मामले में यह एक छवि है जिसमें Node.js 0.10.24 है)। मैंने एक डॉकरीफाइल docker buildका उपयोग करके और -tपैरामीटर का उपयोग करके एक टैग प्रदान करके उस छवि का निर्माण किया ।

मुझे उम्मीद है कि एक दिन मेरे पास उस छवि के अतिरिक्त संस्करण होंगे, इसलिए मैं किसी अन्य टैग नाम के साथ प्रक्रिया को फिर से चलाऊंगा।

अब तक सब ठीक है। यह बढ़िया और बढ़िया काम करता है और सब कुछ ठीक है।

लेकिन, और यह वह जगह है जहाँ समस्याएं शुरू होती हैं, मैं यह भी चाहता हूं कि हमेशा सबसे नई छवि का टैग latestअतिरिक्त रूप से लगे। इसलिए मुझे लगता है कि मुझे एक ही छवि को दो नाम देने की आवश्यकता है।

मैं यह कैसे करु? क्या मुझे वास्तव में docker buildउसी संस्करण पर फिर से चलने की आवश्यकता है , लेकिन इस बार किसी अन्य टैग का उपयोग करें, क्या कोई बेहतर विकल्प है?


संबंधित प्रश्न: stackoverflow.com/questions/21928780/…
मार्क बटलर

जवाबों:


267

छवि बनाते समय आपके पास कई टैग हो सकते हैं:

$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

संदर्भ: https://docs.docker.com/engine/reference/commandline/build/#tag-image-t


23
आप इस :latestभाग को छोड़ भी सकते हैं , क्योंकि यह डिफ़ॉल्ट है:docker build -t whenry/fedora-jboss -t whenry/fedora-jboss:v2.1 .
टेम्पोरलवुल्फ़

161

एक बार आपकी छवि हो जाने के बाद, आप उपयोग कर सकते हैं

$ docker tag <image> <newName>/<repoName>:<tagName>
  1. क्रैक / नोड के साथ छवि बनाएं और टैग करें: नवीनतम

    $ ID=$(docker build -q -t creack/node .)
    
  2. एक नया टैग जोड़ें

    $ docker tag $ID creack/node:0.10.24
    
  3. आप इसका उपयोग कर सकते हैं और बिल्ड से -t भाग को छोड़ सकते हैं

    $ docker tag $ID creack/node:latest
    

4
यह अब और काम नहीं कर रहा है? बिल्ड कमांड इमेज आईडी को वापस नहीं करता है, आईडी में पूरा बिल्ड लॉग होता है
निकोलस मॉमर्ट्स

14
बिल्ड लॉग्स stderr पर होना चाहिए, आप github पर एक बग्रेपोर्ट खोल सकते हैं। अन्यथा, जब आप -t के साथ निर्माण करते हैं, तो आप सीधे दिए गए टैग का उपयोग कर सकते हैं और पूरी तरह से छवि आईडी को त्याग सकते हैं। मेरे उदाहरण में, पहली पंक्ति एक छवि का उत्पादन करती है creack/node:latest, आप इसके बाद टैग कर सकते हैंdocker tag creack/node:latest creack/node:0.10.24
क्रीक

यह कुछ के साथ अच्छी तरह से काम करता हैREV=$(hg identify --num)
विश्लेषणात्मक

2
नवीनतम टैग को ठीक से काम करने के लिए, आप संभवतः docker tag -f $ID creack/node:latestनवीनतम के साथ टैगिंग को बाध्य करने के लिए करना चाहेंगे (यदि कोई पिछली छवि पहले से ही नवीनतम थी)
treaz

4
उपयोग करें: ID = $ (docker build -q -t myrepo / myname: mytag।)। "-Q" का मतलब केवल आईडी को stdout लिखा जाता है। आपको हमेशा एक टैग निर्दिष्ट करना चाहिए, जैसे कि आप टैग 'नवीनतम' का उपयोग नहीं करते हैं, भले ही आप एक पुरानी शाखा का निर्माण कर रहे हों।
डेविड रूसेल

44

यहां मेरी बैश स्क्रिप्ट है

docker build -t ${IMAGE}:${VERSION} .
docker tag ${IMAGE}:${VERSION} ${IMAGE}:latest

यदि आप उसी संस्करण को फिर से बनाते हैं तो आप असंबद्ध चित्र हटा सकते हैं

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

संपर्क

या

docker rmi $(docker images | grep "^<none>" | tr -s " " | cut -d' ' -f3 | tr '\n' ' ')

या

क्लीन अप कमांड्स :

डोकर 1.13 सफाई-अप कमांड का परिचय देता है। सभी अप्रयुक्त कंटेनर, चित्र, नेटवर्क और वॉल्यूम को निकालने के लिए:

docker system prune

या व्यक्तिगत रूप से:

docker container prune
docker image prune
docker network prune
docker volume prune

मेरी मशीन पर (Ubuntu 14.04) awk '{print $3}'काम करता है लेकिन नहीं awk "{print $3}"तो कमांड मैं इस्तेमाल होता हैdocker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
गंभीर

1
-fविकल्प अब में मौजूद है docker tag। उपयोग सिर्फ हैdocker tag IMAGE[:TAG] IMAGE[:TAG]
jwadsack

@ 2Fast2BCn: आप भी करने की जरूरत मानते हुए docker pushके बाद docker build & docker run, आप के साथ धक्का है :latestया ${VERSION}?
इदान अदार

आप दोनों मेरे अनुमान लगा सकते हैं। यह वैसे भी इसे केवल एक बार संग्रहीत करेगा।
2Fast2BCn

19

ID=$(docker build -t creack/node .)मेरे लिए काम नहीं करता क्योंकि IDनिर्माण से उत्पादन में शामिल होगा।

तो मैं इस छोटी सी 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

1
या फिर आप पास कर सकते हैं -q/ --quietकरने के लिए buildके रूप में में वर्णित इस उत्तर
driftcatcher

8

बस से आईडी प्राप्त करें 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

कोई अस्थायी फ़ाइल की आवश्यकता नहीं है और पूर्ण निर्माण आउटपुट देता है । आप अभी भी इसे /dev/nullएक लॉग फ़ाइल या रीडायरेक्ट कर सकते हैं ।


5

हारून के उत्तर का रूपांतर। अस्थायी फ़ाइलों के बिना sed का उपयोग करना

#!/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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.