ডকার কীভাবে পিপ প্রয়োজনীয়তাগুলি চালাবেন? টেক্সট যদি কেবল পরিবর্তন হয়?


91

একটি ডকফাইফিলের মধ্যে আমার একটি স্তর রয়েছে যা ইনস্টল করে requirements.txt:

FROM python:2.7
RUN pip install -r requirements.txt

আমি যখন ডকার ইমেজটি তৈরি করি তখন এই ফাইলটিতে যে কোনও পরিবর্তনই হোক না কেন এটি পুরো প্রক্রিয়াটি চালায় ।

আমি কীভাবে নিশ্চিত করব যে কেবলমাত্র ডকারে pip install -r requirements.txtযদি ফাইলটিতে কোনও পরিবর্তন ঘটে থাকে তবেই এটি চালিত হয় ?

Removing intermediate container f98c845d0f05
Step 3 : RUN pip install -r requirements.txt
 ---> Running in 8ceb63abaef6
Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30))
  Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip
Collecting Django==1.8.7 (from -r requirements.txt (line 1))

4
docker build(এবং আপনার Dockerfile) এর আউটপুট পোস্ট করুন । সম্ভবতঃ, এটি আপনার বিল্ড প্রক্রিয়াতে পূর্বের একটি পদক্ষেপ যা ক্যাশে আবদ্ধ করছে, যার ফলে এই পদক্ষেপটি চালিত হবে।
থমাস অরোজকো

এই মুহুর্তে আমার যা কিছু রয়েছে তার সাথে ওপি আপডেট করুন
প্রমিথিউস

4
কেবল এই পদক্ষেপটি কার্যকর নয়। সম্পূর্ণ আউটপুট পোস্ট করুন (বা কমপক্ষে ডকফাইফাইল)।
টমাস অরোজকো

উত্তর:


171

আমি ধরে নিচ্ছি যে আপনার বিল্ড প্রক্রিয়াটির এক পর্যায়ে আপনি নিজের পুরো অ্যাপ্লিকেশনটি ডকার ইমেজে কপি করছেন COPYবা এর সাথে ADD:

COPY . /opt/app
WORKDIR /opt/app
RUN pip install -r requirements.txt

সমস্যাটি হ'ল প্রতিবার আপনি পুরো অ্যাপ্লিকেশনটি ছবিতে অনুলিপি করার সময় ডকার বিল্ড ক্যাশেটি অবৈধ করছেন। এটি পরবর্তী সমস্ত বিল্ড পদক্ষেপের জন্যও ক্যাশেটিকে অবৈধ করে দেবে।

এটি প্রতিরোধ করতে, আমি ছবিটিতে পুরো অ্যাপ্লিকেশনটি যুক্ত করার আগে কেবলrequirements.txt একটি পৃথক বিল্ড স্টেপে ফাইলটি অনুলিপি করার পরামর্শ দেব :

COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt
COPY . /opt/app
# continue as before...

প্রয়োজনীয়তার ফাইলটি সম্ভবত খুব কমই পরিবর্তিত হওয়ায় আপনি ইমেজটিতে আপনার অ্যাপ্লিকেশন কোড যুক্ত না হওয়া অবধি আপনি ক্যাশেড স্তরগুলি ব্যবহার করতে সক্ষম হবেন।


8
সাধারণ নির্দেশিকা হিসাবে, আমি বিশ্বাস করি যে আপনি যদি বিশেষভাবে এর আচরণের প্রয়োজন না COPYহন ADDতবে তার চেয়ে বেশি পছন্দ করা উচিত ADD
মহানগর

4
@ মেট্রোপলিস, আপনি সম্পূর্ণরূপে সঠিক। ইঙ্গিতটির জন্য ধন্যবাদ।
হেলমার্ট

4
@ মেট্রোপোলিসের সাথে সম্মত হন। ফোল্ডারে ADDযদি <src>এমন কোনও সংরক্ষণাগার থাকে যা প্যাক করা প্রয়োজন হয় বা দূরবর্তী ইউআরএল হ্যান্ডলিং সমর্থন করা প্রয়োজন কেবল তখনই প্রয়োজন। {উত্স কোড}
মহসিন 15

44

এটি সরাসরি ডকারের নিজস্ব " ডকফায়াইলস লেখার সর্বোত্তম অভ্যাস " এ উল্লেখ করা হয়েছে :

যদি আপনার একাধিক ডকফাইফাইল পদক্ষেপ থাকে যা আপনার প্রসঙ্গ থেকে আলাদা ফাইল ব্যবহার করে তবে সেগুলি একবারে না করে পৃথকভাবে কপি করুন। এটি নিশ্চিত করবে যে প্রতিটি পদক্ষেপের বিল্ড ক্যাশে কেবলমাত্র অবৈধ (পদক্ষেপটি পুনরায় চালাতে বাধ্য করা হবে) যদি নির্দিষ্টভাবে প্রয়োজনীয় ফাইলগুলি পরিবর্তন হয় change

উদাহরণ স্বরূপ:

COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/

আপনি কপিটি রাখেন না তার চেয়ে কম অংশীদারি পদক্ষেপের জন্য কম ক্যাশে অবৈধতার ফলাফল। / টিএমপি / এর আগে।


0

বিকল্প হিসাবে দ্রুত অর্থ গ্রন্থাগারগুলির ইনস্টলেশন নিশ্চিত করতে "হ্যাঁ" টাইপ না করে প্রয়োজনীয়তা.txt ফাইল চালানো মানে আপনি পুনরায় লিখতে পারেন:

COPY requirements.txt ./
RUN pip install -y -r requirements.txt
COPY ./"dir"/* .
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.