docker - tutorial - kubernetes




পুরানো ডকার কনটেইনার অপসারণ কিভাবে (20)

একটি নির্দিষ্ট ইমেজ থেকে তৈরি সমস্ত পাত্রে অপসারণ করুন:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')

এই প্রশ্নটি কি আমি অতিরিক্ত, অ-চলমান, ডকার কনটেইনার সম্পর্কে উদ্বিগ্ন হওয়া উচিত?

আমি পুরানো পাত্রে অপসারণ কিভাবে ভাবছি। docker rm 3e552code34a আপনাকে একটি একক অপসারণ করতে দেয়, তবে আমার ইতিমধ্যে প্রচুর আছে। docker rm --help একটি নির্বাচন বিকল্প দেয় না (সমস্ত, বা ইমেজ নামের দ্বারা)।

সম্ভবত একটি ডিরেক্টরি আছে যেখানে এই পাত্রে সংরক্ষণ করা হয় যেখানে আমি নিজে নিজে মুছে ফেলতে পারি?


সমস্ত পাত্রে এবং ছবি বন্ধ / অপসারণ করার মৌলিক পদক্ষেপ

  1. সব পাত্রে তালিকা

    docker ps -aq

  2. সব চলমান পাত্রে বন্ধ করুন

    docker stop $(docker ps -aq)

  3. সব পাত্রে মুছে ফেলুন

    docker rm $(docker ps -aq)

  4. সব ছবি মুছে ফেলুন

    docker rmi $(docker images -q)

দ্রষ্টব্য: প্রথমে আপনি সমস্ত চলমান পাত্রে সেগুলি সরাতে আগে আপনাকে থামাতে হবে। এছাড়াও একটি ছবি মুছে ফেলার আগে, আপনাকে তার নির্ভরশীল ধারক (গুলি) বন্ধ এবং অপসারণ করতে হবে।


5 প্রাচীনতম পাত্রে অপসারণ করুন:

docker rm `docker ps -aq | tail -n 5`

দেখুন কতগুলি কন্টেইনার বাকি আছে:

docker ps -aq | wc -l

আপনি বহির্গামী পাত্রে অপসারণ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

docker rm $(sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

এখানে ডকারের পুরানো ছবিগুলি মুছে ফেলার সম্পূর্ণ পূর্ণতা রয়েছে: পুরানো ডকার কনটেইনারগুলি এবং চিত্রগুলি সরাতে বলুন


আপনি শুধুমাত্র বন্ধ পাত্রে অপসারণ করতে পারেন। শুরুতে তাদের সব বন্ধ করুন

docker stop $(docker ps -a -q)

তারপর আপনি মুছে ফেলতে পারেন

docker rm $(docker ps -a -q)


আমি সবসময় সব ছবি মুছে ফেলার জন্য docker rmi $(docker ps -a -q)

docker rmi ব্যর্থ হলে আপনি ডিরেক্টরি /var/lib/docker/graph মুছে ফেলতে পারেন।


উইন্ডোজ শেল থেকে সমস্ত পাত্রে অপসারণ:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

এখানে আমার docker-cleanup স্ক্রিপ্ট, যা আটককৃত পাত্রে এবং ছবিগুলি সরিয়ে দেয়। কোন আপডেটের জন্য উৎস চেক করুন।

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

উৎস: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup


ডকার 1.13 (Q4 2016) এর সাথে এখন আপনার আছে:

docker system prune -a সমস্ত অব্যবহৃত ডেটা মুছে ফেলা হবে (অর্থাত্, কন্টেনার বন্ধ, কন্টেইনার ছাড়া ভলিউম এবং কোন ধারক সঙ্গে ছবি)।

docker system prune smilebomb a মুছে ফেলা হবে (চিত্রগুলির জন্য) শুধুমাত্র ছবিগুলি ঝুলন্ত, বা ট্যাগ ছাড়া চিত্র, যেমন smilebomb commented

পিআর 26108 দেখুন এবং 86de7c0 করুন , যা কয়েকটি নতুন কমান্ড প্রবর্তন করছে যা ডকার ডেমন ডেটা কত ডিস্ক ডিস্ক গ্রহণ করছে এবং সহজে "অনাকাঙ্ক্ষিত" অতিরিক্ত পরিষ্কার করার অনুমতি দেয় তা কল্পনা করতে সহায়তা করার জন্য।

docker system prune -a

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

wjv মন্তব্য হিসাবে,

docker {container,image,volume,network} prune , যা কেবল এক ধরনের বস্তুর অব্যবহৃত দৃষ্টান্তগুলি সরিয়ে দেওয়ার জন্য ব্যবহার করা যেতে পারে।

913e5cb এ প্রেরণ করা হয়েছে , শুধুমাত্র ডকার 1.13+ এর জন্য।

docker container prune

পাত্রে পরিষ্কার এবং ছবি dangling এই কমান্ড চেষ্টা করুন।

docker system prune -f

ব্যবহার করুন:

docker rm -f $(docker ps -a -q)

এটি জোরপূর্বক স্থানীয়ভাবে উপস্থিত সমস্ত পাত্রে স্টপ এবং অপসারণ।


যে কেউ আগ্রহী, আমি qkrijger থেকে উদাহরণ গ্রহণ এবং এটি একটি পরিষ্কার সব পরিণত (বন্ধ এবং সব মুছে ফেলুন)

docker stop `docker ps --no-trunc -aq` ; docker rm `docker ps --no-trunc -aq`

সুতরাং, ব্যক্তিগতভাবে আমি কেবলমাত্র সাম্প্রতিকতম এন পাত্রে এবং চিত্রগুলি রাখার জন্য চিত্র এবং পাত্রে উভয় জন্য আপনার স্থাপনার স্ক্রিপ্টের অংশ হিসাবে এটি করার সুপারিশ করছি। আমি আমার ডকার ইমেজগুলিকে একই সংস্করণ স্কিমা দিয়ে git tag করি যা আমি git tag সাথে ব্যবহার করি এবং সর্বদা সর্বশেষতম ডকার চিত্রটি "সর্বশেষ" সহ ট্যাগ করে। এর মানে হল যে কিছু পরিষ্কার না করে, আমার ডকার ছবিগুলি এই মত দেখাচ্ছে:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

এখন, অবশ্যই আমি আমার সব ছবি (বা পাত্রে) আমার সব উত্পাদন বাক্সে চিরস্থায়ী ফিরে যেতে চাই না। আমি শুধু রোলব্যাকের জন্য শেষ 3 বা 4 চাই এবং অন্য সব থেকে পরিত্রাণ পেতে চাই। ইউনিক্স এর tail এখানে আপনার সেরা বন্ধু। docker images এবং docker ps উভয় তারিখ অনুসারে, আমরা কেবলমাত্র উপরের তিনটি বাছাই করতে এবং তাদের সরাতে tail ব্যবহার করতে পারি:

docker rmi $(docker images -q | tail -n +4)

আপনার স্থাপনার স্ক্রিপ্টগুলির (অথবা স্থানীয়ভাবে) সাথে বরাবর চালান যাতে খুব বেশি সংখ্যক ছবি রাখা যায় যাতে খুব বেশি ঘর না নিয়ে পুরানো চিত্রগুলি আপলোড না করেই সহজেই রোল ফিরে যেতে পারে।

ব্যক্তিগতভাবে, আমি যেকোনো সময় আমার উত্পাদন বাক্সে কেবল একটি ধারক রাখি, কিন্তু যদি আপনি আরো চান তবে আপনি একই ধরণের জিনিসগুলি কন্টেইনারেও করতে পারেন:

docker rm $(docker ps -aq | tail -n +4)

অবশেষে, আমার সরলীকৃত উদাহরণে আমরা শুধুমাত্র একবারে একটি সংগ্রহস্থলের সাথে ডিল করছি, কিন্তু যদি আপনার আরো কিছু থাকে, তবে আপনি একই ধারণাটির সাথে একটু বেশি পরিশীলিত হতে পারেন। বলুন আমি কিছু_repo / some_image থেকে শেষ তিনটি ছবি রাখতে চাই। আমি শুধু grep মধ্যে মিশ্রিত করা এবং awk এবং আমার পথে হতে পারে:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

আবার, একই ধারণা কন্টেইনারে প্রযোজ্য, তবে আপনি এই মুহুর্তে এটি পেতে পারেন তাই আমি উদাহরণ প্রদান বন্ধ করব।


https://github.com/HardySimpson/docker-cleanup

ডকার পরিষ্কারের

একটি ক্ষুদ্র সব-মধ্যে-এক শেল, যা অপসারণ করে:

  • এক দিন আগে চলমান না পাত্রে
  • যে কোনও অবশিষ্ট কন্টেইনারের সাথে সম্পর্কিত নয়

একটি crontab কাজ হিসাবে চালানোর ইচ্ছা

বৈশিষ্ট্য

  • এটি সমস্ত <none>:<none> চিত্রগুলি সরিয়ে দেবে
  • যদি ছবিতে একাধিক রেপো থাকে: এটিতে ট্যাগ রেফারেন্সগুলি, এটি একটি কন্টেইনার চালানোর ব্যতীত সমস্ত রেপো ট্যাগটি মুছে ফেলবে। আসলে এটি "ডকার রমি" এর প্রকৃতি।
  • অনেক ত্রুটি বার্তা পর্দায় প্রদর্শিত হবে, এবং আপনি 2>/dev/null বা না করতে পারেন
  • ডকার-জিসি থেকে কিছু শিখুন, এবং এর সমস্যাটি সমাধান করুন (এটি এমন ছবিটি সরাতে পারে না যা প্রতিলিপি রেপো ট্যাগ: ট্যাগ)

ডকার 1.13.x এ একটি নতুন বৈশিষ্ট্য রয়েছে ডকার কনটেইনার প্রুন : docker container prune

এটি আপনি যা চান তা করবেন এবং একইভাবে সমস্ত প্ল্যাটফর্মগুলিতে কাজ করা উচিত।

একটি ডকার সিস্টেমের প্রিনও রয়েছে : docker system prune , যা এক কমান্ডে সমস্ত কন্টেইনার, ছবি, ভলিউম এবং নেটওয়ার্ক পরিষ্কার করবে।

মূল উত্তর:

একটি ডকার পরিষ্কারের কমান্ড সম্পর্কে কিছু আলোচনা হয়েছে। আপনি এই টিকিটের তথ্য খুঁজে পেতে পারেন: একটি 'পরিচ্ছন্ন' কমান্ড প্রয়োগ করুন (# 928)

যে কমান্ড পাওয়া যায় না, আপনি প্রয়োজন কি পেতে অন্যান্য ইউনিক্স কমান্ড সঙ্গে ডকার কমান্ড স্ট্রিং করতে পারেন। সপ্তাহের পুরানো পাত্রে পুরানো পাত্রে পরিষ্কার করার জন্য এখানে একটি উদাহরণ দেওয়া হয়েছে:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

ক্রেডিট দিতে, যেখানে এটি দায়ী, এই উদাহরণটি https://twitter.com/jpetazzo/status/347431091415703552 থেকে।


docker ps দিয়ে filtering ব্যবহার করা এখন সম্ভব:

docker rm $(docker ps -q -f status=exited)

এবং images জন্য:

docker rmi $(docker images -q -f "dangling=true")

যাইহোক, যে কোনও docker rmi docker rm বা docker rmi হতে পারে যখন কোন মিলিং কন্টেইনার থাকে না। পুরোনো docker rm $(docker ps -aq) কৌশলটি আরও খারাপ ছিল কারণ এটি কোনও চলমান কন্টেইনারটি সরাতে চেষ্টা করেছিল এবং প্রতিটিতে ব্যর্থ হয়েছিল।

এখানে আপনার ~/.bashrc বা ~/.profile যুক্ত করার জন্য একটি ক্লিনার স্ক্রিপ্ট রয়েছে:

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

সম্পাদনা: নিচের হিসাবে উল্লেখ করা হয়েছে, আসল উত্তর চিত্রগুলি অপসারণের জন্য নয়, কন্টেইনারে ছিল। ডকুমেন্টেশন নতুন লিঙ্ক সহ, উভয় উত্তর আপডেট করা হয়েছে। নতুন ps ফিল্টারিং উল্লেখ করার জন্য অ্যাড্রিয়ান (এবং রায়ান এর উত্তর) ধন্যবাদ।


আপডেট হওয়া উত্তর এখন docker system prune বা docker container prune ব্যবহার করুন। VonC এর আপডেট উত্তর দেখুন

পূর্ববর্তী উত্তর উপরে বিভিন্ন বিভিন্ন ইঙ্গিত রচনা করে, সমস্ত অ চলমান পাত্রে অপসারণের সবচেয়ে মার্জিত উপায় বলে মনে হচ্ছে:

docker rm $(docker ps -q -f status=exited)

  • -q শুধুমাত্র পাত্রে -q মুদ্রণ করে (কলাম শিরোনাম ছাড়া)
  • -f আপনাকে মুদ্রিত পাত্রে আপনার তালিকা ফিল্টার করতে দেয় (এই ক্ষেত্রে আমরা কেবলমাত্র বহিষ্কৃত পাত্রে প্রদর্শন করতে ফিল্টার করছি)

আপডেট: ডকার সংস্করণ 1.13 (২017 জানুয়ারী মুক্তি) হিসাবে, আপনি বন্ধ কন্টেইনারগুলি, অব্যবহৃত ভলিউমগুলি, ছবিগুলি এবং অব্যবহৃত নেটওয়ার্কে ঝগড়া করতে নিম্নোক্ত কমান্ডটি ইস্যু করতে পারেন:

docker system prune

আপনি যদি নিশ্চিত করতে চান যে আপনি শুধুমাত্র exited স্থিতি ধারণকারী কন্টেইনারগুলি মুছে exited , তবে এটি ব্যবহার করুন:

docker ps -aq -f status=exited | xargs docker rm

একইভাবে, যদি আপনি ডকার স্টাফ পরিষ্কার করছেন তবে আপনি এভাবে আটকে থাকা, নামহীন চিত্রগুলি থেকে মুক্ত হতে পারেন:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

সব বন্ধ কন্টেইনার মুছে ফেলুন।

sudo docker rm $ (sudo docker ps-a -q)

ডকার পিএ-এ-ই-এর সাথে সমস্ত কন্টেইনারের তালিকা পেয়ে এবং ডক্কার আরএম-এ তাদের আইড পাস করে এটি সমস্ত বন্ধ করা কন্টেইনারগুলিকে সরিয়ে দেবে। এটি কোনো চলমান পাত্রে অপসারণ করা উচিত নয় এবং এটি আপনাকে বলবে যে এটি চলমান চিত্রটি সরাতে পারবে না।

সব untagged ইমেজ মুছে ফেলুন

এখন আপনি কিছু স্থান সংরক্ষণ করার জন্য পুরানো ছবি পরিষ্কার করতে চান।

sudo docker rmi $ (sudo docker images -q -filter "dangling = true")


#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done




docker