কীভাবে ডকারে নামযুক্ত এবং সর্বশেষ ট্যাগ তৈরি করবেন?


241

মনে হচ্ছে আমার কাছে এমন একটি চিত্র রয়েছে যা আমি ট্যাগ করতে চাই 0.10.24(আমার ক্ষেত্রে এটি নোড.জেএস 0.10.24 সমেত একটি চিত্র)। আমি সেই চিত্রটি একটি ডকফার্মিল ব্যবহার করে এবং নির্বাহ docker buildকরে এবং -tপরামিতি ব্যবহার করে একটি ট্যাগ সরবরাহ করে তৈরি করেছি ।

আমি প্রত্যাশা করি যে একদিন আমার কাছে সেই চিত্রটির অতিরিক্ত সংস্করণ থাকবে, তাই আমি অন্য ট্যাগের নামের সাথে প্রক্রিয়াটি আবার চালু করব।

এ পর্যন্ত সব ঠিকই. এটি দুর্দান্ত এবং সূক্ষ্মভাবে কাজ করে এবং সব ঠিক আছে।

তবে, এবং এখান থেকেই সমস্যা শুরু হয়, আমি সর্বদা নতুন চিত্রটি latestঅতিরিক্তভাবে ট্যাগ করতে চাই । সুতরাং আমি অনুমান করি আমার খুব একই চিত্রের দুটি নাম দেওয়া দরকার।

আমি এটা কিভাবে করবো? আমাকে কি docker buildআবার একই একই সংস্করণে আবার চালানো দরকার , তবে এবার অন্য ট্যাগ ব্যবহার করুন, এর চেয়ে ভাল বিকল্প আছে কি?


উত্তর:


267

চিত্রটি তৈরি করার সময় আপনার একাধিক ট্যাগ থাকতে পারে:

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

তথ্যসূত্র: https://docs.docker.com/engine/references/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
বিল্ড লগগুলি স্ট্যাডারে থাকার কথা, আপনি গিথুবে একটি বাগেরপোর্ট খুলতে পারেন। অন্যথায়, আপনি যখন -t দিয়ে তৈরি করেন, আপনি সরাসরি প্রদত্ত ট্যাগটি ব্যবহার করতে পারেন এবং পুরোপুরি চিত্রের আইডিটি বাতিল করতে পারেন। আমার উদাহরণে, প্রথম লাইন একটি চিত্র উত্পাদন creack/node:latest, তাহলে আপনি এটি দিয়ে ট্যাগ করতে পারবেনdocker tag creack/node:latest creack/node:0.10.24
creack

এটি এমন কিছু দিয়ে ভাল কাজ করেREV=$(hg identify --num)
বিশ্লেষক

2
সর্বশেষতম ট্যাগটি সঠিকভাবে কাজ করতে, আপনি সম্ভবত docker tag -f $ID creack/node:latestসর্বশেষ সাথে ট্যাগিং জোর করার জন্য করতে চাইবেন (যদি আগের চিত্রটি ইতিমধ্যে সর্বশেষ ছিল)
ট্রেজ

4
ব্যবহার করুন: আইডি = $ (ডকার বিল্ড-কি-টু মাইরেপো / মাইনেম: মাইটাগ))। "-কিউ" এর অর্থ কেবল আইডি স্টডআউটে লেখা হয়। আপনি সর্বদা একটি ট্যাগ নির্দিষ্ট করা উচিত, আপনি যদি কোনও পুরানো শাখা তৈরি করছেন, এমনকি আপনি 'সর্বশেষ' ট্যাগটি ব্যবহার করবেন না।
ডেভিড রুসেল

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

আমার মেশিনে (উবুন্টু 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বিল্ড থেকে আউটপুট থাকবে।

সুতরাং আমি এই ছোট বেস স্ক্রিপ্ট ব্যবহার করছি:

#!/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

শুধু আইডি grep থেকে 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

হারুনের উত্তরের ভিন্নতা। অস্থায়ী ফাইল ছাড়াই সেড ব্যবহার করা হচ্ছে

#!/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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.