ডকার কনটেইনার চিত্রগুলি এত বড় কেন?


177

আমি ফেডোরা (প্রাথমিকভাবে 320 এমবি) থেকে ডকফাইলে মাধ্যমে একটি সাধারণ চিত্র তৈরি করেছি।

ন্যানো যুক্ত করা হয়েছে (1 এমবি আকারের এই ক্ষুদ্র সম্পাদক) এবং চিত্রটির আকার বেড়েছে 530 এমবিতে। আমি গিটকে তার (30-ইশ এমবি) এর উপরে এবং তারপরে আমার চিত্রের আকার আকাশের রকেটগুলি 830 এমবিতে যুক্ত করেছি।

পাগল কি তাই না?

ইতিহাস / মধ্যবর্তী চিত্রগুলি মুছে ফেলার জন্য আমি ধারকটি রফতানি ও আমদানির চেষ্টা করেছি। এই প্রচেষ্টা 25 এমবি পর্যন্ত সংরক্ষণ করা হয়েছে, এখন আমার চিত্রের আকার 804 মেগাবাইট। আমি একটিতে অনেক কমান্ড চালানোর চেষ্টা করেছি RUN, তবে এখনও আমি একই প্রাথমিক 830MB পাচ্ছি।

ডকারকে আদৌ ব্যবহার করার উপযুক্ত হলে আমার সন্দেহ হচ্ছে। আমি বলতে চাইছি, আমি সবেমাত্র কিছু ইনস্টল করেছি এবং আমি 1 জিবি ছাড়িয়ে চলেছি। যদি আমাকে কোনও ডাটাবেসের মতো কিছু গুরুতর জিনিস যোগ করতে হয় এবং তেমনি আমার ডিস্কের স্থানও শেষ হয়ে যায়।

চিত্রের হাস্যকর আকারে কেউ ভুগছেন? আপনি এটি কিভাবে মোকাবেলা করবেন?

যদি না আমার ডকফাইফিল মারাত্মকভাবে ভুল হয়?

FROM fedora:latest
MAINTAINER Me NotYou <email@dot.com>
RUN yum -y install nano
RUN yum -y install git

তবে এখানে কী ভুল হতে পারে তা কল্পনা করা শক্ত।


আপনি কোথায় এবং কীভাবে আপনার ধারকটির আকার পরিমাপ করছেন? না yum clean allআকারের উপর কোনো প্রভাব?
xeor

2
চিত্রগুলি এর আকার, পিতামাতার চিত্র এবং বেস চিত্রের সংশ্লেষ হওয়ায় চিত্রগুলি একটি ভাল আকারের হয়ে উঠবে বলে আশা করে। এছাড়াও, ইয়াম ইনস্টল করে, কেবলমাত্র অ্যাপ্লিকেশনগুলিই নয়, তাদের নির্ভরতাও। docs.docker.com/terms/container
রেপপোসাদাস

2
ভাল আমার "পরিমাপ" কার্যকর করা হয় docker imagesযা শেষ কলামে একটি বিশাল 830MB বলে। আমার চিত্রটির আসল আকারটি কী তা সম্পর্কে আমি অসচেতন হতে পারি কারণ ডকার ইমেজ কমান্ডটি জানিয়েছে যে এই 830 এমবি ভার্চুয়াল আকার। তবে আবার, চিত্রের আসল আকারটি কী?
জেন

উত্তর:


118

@ রেসপোসাদাস যেমন বলেছিলেন, ছবিগুলিতে সমস্ত স্তর অন্তর্ভুক্ত রয়েছে এবং প্রতিটি স্তরটিতে আপনি যা ইনস্টল করেছেন তার জন্য সমস্ত নির্ভরতা অন্তর্ভুক্ত রয়েছে। এটি লক্ষ্য করাও গুরুত্বপূর্ণ যে বেস ইমেজগুলি (যেমন fedora:latestখুব খালি-হাড়ের মতো হয়ে থাকে your আপনি ইনস্টল হওয়া সফ্টওয়্যারটিতে কতটা নির্ভরশীলতা রয়েছে তা দেখে আপনি অবাক হয়ে যেতে পারেন।

আমি yum -y clean allপ্রতিটি লাইনে যুক্ত করে আপনার ইনস্টলেশনটি উল্লেখযোগ্যভাবে ছোট করতে সক্ষম হয়েছি :

FROM fedora:latest
RUN yum -y install nano && yum -y clean all
RUN yum -y install git && yum -y clean all

স্তর প্রতিশ্রুতিবদ্ধ হওয়ার আগে প্রতিটি আরএন-র জন্য এটি করা গুরুত্বপূর্ণ, অন্যথায় মুছে ফেলা আসলে ডেটা সরিয়ে দেয় না। এটি একটি ইউনিয়ন / অনুলিপি-অন-রাইটিং ফাইল সিস্টেমে, শেষে পরিষ্কার করা আসলে ফাইল সিস্টেমের ব্যবহার হ্রাস করে না কারণ আসল ডেটা ইতিমধ্যে নিম্ন স্তরগুলির প্রতি প্রতিশ্রুতিবদ্ধ। এটি কাছাকাছি পেতে আপনাকে অবশ্যই প্রতিটি স্তর পরিষ্কার করতে হবে।

$ docker history bf5260c6651d
IMAGE               CREATED             CREATED BY                                      SIZE
bf5260c6651d        4 days ago          /bin/sh -c yum -y install git; yum -y clean a   260.7 MB
172743bd5d60        4 days ago          /bin/sh -c yum -y install nano; yum -y clean    12.39 MB
3f2fed40e4b0        2 weeks ago         /bin/sh -c #(nop) ADD file:cee1a4fcfcd00d18da   372.7 MB
fd241224e9cf        2 weeks ago         /bin/sh -c #(nop) MAINTAINER Lokesh Mandvekar   0 B
511136ea3c5a        12 months ago                                                       0 B

1
কেসটি তদন্তের জন্য আপনার প্রচেষ্টার জন্য আপনাকে ধন্যবাদ, এবং হ্যাঁ আমি আমার চিত্রের আকার প্রায় 635MB (এটি কার্যকর করার পরে ভার্চুয়াল চিত্রের আকার হিসাবে উপস্থাপিত মান docker images) হ্রাস করতে সক্ষম হয়েছি । সেই পুরানো স্তরগুলি মুছে ফেলা / মুছা / ধ্বংস করা কি সম্ভব? আরও সুনির্দিষ্টভাবে বলতে চাই: আমি ইতিহাস থেকে 172743bd5d60, 3f2fed40e4b0, fd241224e9cf, 511136ea3c5a সম্পূর্ণরূপে মুছে ফেলতে চাই, যাতে আমার ভার্চুয়াল চিত্রের আকার চূড়ান্ত চিত্রের আকারের চেয়ে কম-কম হয়, এখানে ~ 260MB ।
জেন

(1 মন্তব্যের জন্য খুব দীর্ঘ) যদি না ভার্চুয়াল চিত্রের আকারের এইচডিডি তে চিত্রের আসল আকারের কোনও সম্পর্ক না থাকে? যদি এটি হয় তবে আমার চিত্রগুলির আসল আকারটি কীভাবে / কোথায় যাবেন?
জেন

আপনি docker exportএবং তারপর docker importআবার পারে । যে স্তর সমতল করা হবে। আমি মনে করি না এটি আকার হ্রাস করবে, তবে আমি ভুল হতে পারি।
অ্যান্ডি

10
হ্যাঁ তবে রফতানি খুব একটা সাশ্রয় করে না। তবুও আমি ওয়েবে পড়তে সক্ষম হয়েছি যে আমি ডকারে যা পর্যবেক্ষণ করতে পারি তা ভার্চুয়াল চিত্রের আকার। এইচডিডি-তে প্রকৃত আকারটি আমার কাছে রহস্য বলে মনে হচ্ছে যেহেতু অফিসিয়াল তথ্যের সাথে আমার এইচডিডি-তে প্রকৃত আকার docker ps -sদেখা যায় -1B। এটি যুক্তিসঙ্গত শোনায়, বিয়োগ 1 বাইট । আমি এইচডিডি তে কিছু জায়গা পেয়েছি ... বৈধ বলে মনে হচ্ছে।
জেন

@ জেন দুঃখিত আমি অনুসরণ করছি না সুতরাং ভার্চুয়াল আকার এবং ডিস্ক আকার 2 বিভিন্ন জিনিস? ভার্চুয়াল আকার ঠিক কি পরিমাপ করে?
জেসন

63

ডকারের চিত্রগুলি বড় নয়, আপনি কেবল বৃহত্তর চিত্র তৈরি করছেন।

scratchইমেজ 0B হয় এবং আপনি যে ব্যবহার করতে পারেন আপনার কোড আপ প্যাকেজ আপনি একটি স্ট্যাটিক বাইনারি মধ্যে আপনার কোড কম্পাইল করতে পারেন। উদাহরণস্বরূপ, আপনি আপনার গো প্রোগ্রামটি সংকলন করতে পারেন এবং এটিscratch 5MB এর চেয়ে কম সম্পূর্ণরূপে ব্যবহারযোগ্য চিত্র তৈরি করতে উপরে প্যাকেজ করতে পারেন।

কীটি হ'ল অফিশিয়াল ডকার ইমেজ ব্যবহার না করা, সেগুলি খুব বড়। স্ক্র্যাচটি সমস্ত বাস্তব নয় তাই আমি আলপাইন লিনাক্সকে আপনার বেস চিত্র হিসাবে ব্যবহার করার পরামর্শ দিই recommend এটি ~ 5MB, তারপরে কেবল আপনার অ্যাপ্লিকেশনটির জন্য যা প্রয়োজন তা যুক্ত করুন। মাইক্রোকন্টেইনর সম্পর্কিত এই পোস্টটি আপনাকে আলপাইনটিতে কীভাবে খুব ছোট চিত্রের ভিত্তি তৈরি করবেন তা দেখায়।

আপডেট: অফিসিয়াল ডকার চিত্রগুলি এখন আলপাইন ভিত্তিতে তৈরি তাই তারা এখন ব্যবহার করা ভাল।


2
দুর্দান্ত সমাধান !, বর্জ্য থামানো এবং আরও সুরক্ষিত থাকা ---> কম কোড -> কম চিন্তা করা এত গুরুত্বপূর্ণ।
ডেভিডোভিটজ

1
ধন্যবাদ, ডকার অফিসিয়াল চিত্রগুলিও একটি আলপাইন বেস ব্যবহার করতে চলেছে, তাই আরও বেশি করে আপনি আয়রন.ওর সংস্করণগুলির উপর নির্ভর করে নিয়মিত চিত্রগুলি ব্যবহার করতে পারেন। Brianchristner.io/docker-is-moving-to-alpine-linux
মার্টিজন হিমেলস

@ ট্র্যাভিস আর, মাইক্রো কন্টেইনার সম্পর্কে পোস্ট করার জন্য আপনার লিঙ্কটি অন্য কোথাও চলে গেছে বলে মনে হচ্ছে। কি এই পোস্টে আপনাকে লিঙ্ক করতে বোঝাতে চাইছেন?
আলেকজান্ডার এফ।

@AlexanderF। স্থির লিঙ্ক, আমাকে জানাতে ধন্যবাদ।
ট্র্যাভিস রেডার 18

28

এখানে আপনি আরও কিছু কাজ করতে পারেন :

  • RUNআপনি যেখানে পারেন সেখানে একাধিক কমান্ড এড়িয়ে চলুন । যতটা সম্ভব কম্বলকে একটি RUNকমান্ডের মধ্যে রাখুন (ব্যবহার করে &&)
  • ওয়াজেট বা গিটের মতো অপ্রয়োজনীয় সরঞ্জামগুলি সাফ করুন (যা আপনার কেবল ডাউনলোড বা বিল্ডিংয়ের জন্য প্রয়োজন, তবে আপনার প্রক্রিয়াটি চালানোর জন্য নয়)

এই উভয়ই এবং @ অ্যান্ডি এবং @ মিম্যাকু থেকে দেওয়া প্রস্তাবনাগুলি দিয়ে আমি আমার নোডেজের চিত্রটি 1.062 জিবি থেকে 542 এমবি থেকে আকার পরিবর্তন করতে সক্ষম হয়েছি।

সম্পাদনা: আরও একটি গুরুত্বপূর্ণ বিষয়: "সত্যই বুঝতে পেরে আমাকে কিছুটা সময় লেগেছে যে প্রতিটি ডকফিলি কমান্ড ডেল্টাস দিয়ে একটি নতুন ধারক তৈরি করে; [...] আপনি যদি পরবর্তী কমান্ডে ফাইলগুলি আরএমআর -আরফ করেন তবে কিছু যায় আসে না; এগুলি কিছু মধ্যবর্তী স্তর ধারকটিতে অবিরত থাকে "" তাই এখন আমি লাগাতে পরিচালিত apt-get install, wget, npm install(Git নির্ভরতাসহ) এবং apt-get removeএকটি একক মধ্যে RUNকমান্ড, তাই এখন আমার ছবিটি শুধুমাত্র 438 মেগাবাইট হয়েছে।

29/06/17 সম্পাদনা করুন

ডকার ভি 17.06 এর সাথে ডকফায়াইলগুলির জন্য একটি নতুন বৈশিষ্ট্য উপস্থিত রয়েছে: আপনার FROMএকটি ডকফাইফিলের ভিতরে একাধিক বিবৃতি থাকতে পারে এবং কেবল শেষের জিনিসগুলি FROMআপনার চূড়ান্ত ডকার ইমেজে থাকবে। এটি চিত্রের আকার হ্রাস করতে দরকারী, উদাহরণস্বরূপ:

FROM nodejs as builder
WORKDIR /var/my-project
RUN apt-get install ruby python git openssh gcc && \
    git clone my-project . && \
    npm install

FROM nodejs
COPY --from=builder /var/my-project /var/my-project

প্রথম ধাপ থেকে কেবলমাত্র নোডেজ বেস ইমেজ এবং / var / আমার-প্রকল্পের সামগ্রী থাকা কোনও চিত্রের ফলাফল হবে - তবে রুবি, পাইথন, গিট, ওপেনশ এবং জিসিসি ছাড়াই !


22

হ্যাঁ, এই আকারগুলি হাস্যকর এবং কেন খুব কম লোকেরা এটি লক্ষ্য করে তা আমার সত্যিই কোনও ধারণা নেই।

আমি একটি উবুন্টু চিত্র তৈরি করেছি যা আসলে ন্যূনতম (অন্যান্য তথাকথিত "ন্যূনতম" চিত্রগুলির থেকে পৃথক)। এটি কল textlab/ubuntu-essentialএবং 60 এমবি আছে।

FROM textlab/ubuntu-essential
RUN apt-get update && apt-get -y install nano

উপরের চিত্রটি ন্যানো ইনস্টল করার পরে 82 এমবি is

FROM textlab/ubuntu-essential
RUN apt-get update && apt-get -y install nano git

গিটের আরও অনেক পূর্বশর্ত রয়েছে, তাই চিত্রটি আরও বড় হয়, প্রায় 192 এমবি। এটি এখনও বেশিরভাগ চিত্রের প্রাথমিক আকারের চেয়ে কম।

ডকারের জন্য সর্বনিম্ন উবুন্টু চিত্রটি তৈরি করতে আমি যে স্ক্রিপ্টটি লিখেছিলাম তা আপনি একবারে দেখতে পারেন । আপনি সম্ভবত এটি ফেডোরার সাথে মানিয়ে নিতে পারেন, তবে আপনি কতটা আনইনস্টল করতে পারবেন তা আমি নিশ্চিত নই।


13

নিম্নলিখিত আমাকে অনেক সাহায্য করেছে:

আমার ধারকটির ভিতরে অব্যবহৃত প্যাকেজগুলি (উদাহরণস্বরূপ 1200 এমবি ফ্রিডস রিডিজ) সরিয়ে দেওয়ার পরে, আমি নিম্নলিখিতগুলি করেছি:

  1. ডকার রফতানি [ধারকআইডি] - ধারক নাম.এটার
  2. ডকার আমদানি-এম "এখানে বার্তা পাঠান" ধারক নাম: ট্যাগ চিত্র নাম: ট্যাগ

স্তর সমতল হয়। নতুন চিত্রের আকার আরও কম হবে কারণ আমি উপরে বর্ণিত হিসাবে ধারক থেকে প্যাকেজগুলি সরিয়েছি।

এটি বুঝতে অনেক সময় নিয়েছে এবং সে কারণেই আমি আমার মন্তব্য যুক্ত করেছি।


আপনি উভয় পদক্ষেপকে একক পদক্ষেপে একত্রিত করতে পারেনdocker export <CONTAINER ID> | docker import - some-image-name:latest
অনুজ কুমার

8

সর্বোত্তম অনুশীলনের জন্য, আপনার একটি একক RUN কমান্ড কার্যকর করা উচিত, কারণ ডকফাইফিলের প্রতিটি RUN নির্দেশাবলীতে চিত্রটিতে একটি নতুন স্তর লেখা হয় এবং প্রতিটি স্তরের ডিস্কে অতিরিক্ত স্থানের প্রয়োজন হয়। সংখ্যার স্তরকে সর্বনিম্ন রাখতে, যে কোনও ফাইল ম্যানিপুলেশন যেমন ইনস্টল, মুভিং, এক্সট্র্যাক্টিং, রিমুভ করা ইত্যাদি আদর্শভাবে একক আরএন নির্দেশের অধীনে করা উচিত

FROM fedora:latest
RUN yum -y install nano git && yum -y clean all

4

ডকার স্কোয়াশ এটির জন্য একটি দুর্দান্ত সমাধান। আপনি $packagemanager cleanপ্রতিটি লাইনের পরিবর্তে শেষ ধাপে এবং তারপর সমস্ত স্তর থেকে পরিত্রাণ পেতে একটি ডকার স্কোয়াশ চালাতে পারেন।

https://github.com/jwilder/docker-squash


0

হ্যাঁ স্তর ব্যবস্থাটি বেশ অবাক। আপনার যদি কোনও বেস ইমেজ থাকে এবং আপনি নিম্নলিখিতটি করে এটি বৃদ্ধি করেন:

# Test
#
# VERSION       1

# use the centos base image provided by dotCloud
FROM centos7/wildfly
MAINTAINER JohnDo 

# Build it with: docker build -t "centos7/test" test/

# Change user into root
USER root

# Extract weblogic
RUN rm -rf /tmp/* \
    && rm -rf /wildfly/* 

চিত্রটির ঠিক একই আকার রয়েছে। মূলত এর অর্থ হল, সফ্টওয়্যার ইনস্টল করার মতো চিত্রগুলিকে ছোট করার জন্য আপনাকে আপনার আরআন পদক্ষেপে প্রচুর এক্সট্র্যাক্ট, ইনস্টল এবং ক্লিনআপ ম্যাজিক স্থাপন করতে হবে।

এটি জীবনকে আরও শক্ত করে তোলে ...

ডকারবাইল্ড কোনও প্রতিশ্রুতি ছাড়াই RUN পদক্ষেপ মিস করছে।

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