একটি ডকফেরায়, আমার আছে I
COPY . .
আমি আমার ক্ষেত্রে নোড_মডিউলস ডিরেক্টরিটি একটি সম্পূর্ণ ডিরেক্টরি বাদ দিতে চাই।
এটার মতো কিছু:
COPY [all but **/node_modules/**] .
এটি কি ডকারের দ্বারা সম্ভব?
একটি ডকফেরায়, আমার আছে I
COPY . .
আমি আমার ক্ষেত্রে নোড_মডিউলস ডিরেক্টরিটি একটি সম্পূর্ণ ডিরেক্টরি বাদ দিতে চাই।
এটার মতো কিছু:
COPY [all but **/node_modules/**] .
এটি কি ডকারের দ্বারা সম্ভব?
উত্তর:
.dockerignore
আপনার ডকার বিল্ড কনটেক্সট ডিরেক্টরিতে ফাইল তৈরি করুন (সুতরাং এই ক্ষেত্রে সম্ভবত একটি ডিরেক্টরি যা নোড_মডিউলগুলির পিতা বা মাতা) এতে একটি লাইন রয়েছে:
**/node_modules
যদিও আপনি সম্ভবত শুধু চান:
node_modules
ডকারিগিনোর সম্পর্কে তথ্য: https://docs.docker.com/engine/references/builder/#dockerignore-file
/config/nginx/ /config/logstash/
ls config/ gunicorn logs logstash nginx
ls /config/
নি, আপনি কি সেই পথগুলি আপনার .dockerignore এ যোগ না করে চেষ্টা করেছিলেন /
?
node_modules
উপ-ডিরেক্টরিতে কাজ করে না।
যারা .dockerignore ফাইল ব্যবহার করতে পারবেন না তাদের জন্য (যেমন আপনার যদি একটি কপিতে ফাইলের দরকার হয় তবে অন্যটি নয়):
হ্যাঁ, তবে আপনার একাধিক কপি নির্দেশাবলী দরকার। বিশেষত, আপনার যে ফাইল ফাইলটি বাদ দিতে চান তার প্রতিটি অক্ষরের জন্য আপনার একটি কপি দরকার।
COPY [^n]* # All files that don't start with 'n'
COPY n[^o]* # All files that start with 'n', but not 'no'
COPY no[^d]* # All files that start with 'no', but not 'nod'
আপনার সম্পূর্ণ ফাইলের নাম না হওয়া পর্যন্ত অবিরত করা, বা কেবলমাত্র উপসর্গ আপনি যথাযথভাবে নিশ্চিত যে অন্য কোনও ফাইল থাকবে না।
COPY failed: no source files were specified
যখন 'না' দিয়ে শুরু করবেন এমন কোনও ফাইল নেই, তবে 'নোড' নয় a
src/
যেতে /var/www
এবং /conf/nginx.conf
যেতে চাই /etc/nginx/conf.d/default.conf
। এছাড়াও, আপনি সবকিছু অনুলিপি করতে পারেন এবং RUN rm -r conf
পরে (খুব উত্স গাছটি যেমন ছিল তেমন রাখুন)। কারও কাছে অন্য কোনও পরামর্শ থাকলে আমি শুনতে চাই।
COPY [^node_modules]*
শীর্ষ স্তরের সমস্ত ফাইল অনুলিপি করতে একটি প্রয়োজন ।
আমার ক্ষেত্রে, আমার ডকফাইলে একটি ইনস্টলেশন পদক্ষেপ রয়েছে যা vendor
ডিরেক্টরিটি তৈরি করেছে (পিএইচপি সমতুল্য node_modules
)। আমি তারপরে COPY
এই ডিরেক্টরিটি চূড়ান্ত অ্যাপ্লিকেশন চিত্রে নিয়ে যাচ্ছি । অতএব, আমি vendor
আমার মধ্যে রাখতে পারেন না .dockerignore
। আমার সমাধানটি ছিল সম্পাদন করার আগে ডিরেক্টরি মুছে ফেলা composer install
(পিএইচপি সমতুল্য npm install
)।
FROM composer AS composer
WORKDIR /app
COPY . .
RUN rm -rf vendor \
&& composer install
FROM richarvey/nginx-php-fpm
WORKDIR /var/www/html
COPY --from=composer /app .
এই সমাধানটি কাজ করে এবং চূড়ান্ত চিত্রটি ফুলে যায় না, তবে এটি আদর্শ নয়, কারণ vendor
হোস্টের ডিরেক্টরিটি বিল্ড প্রক্রিয়া চলাকালীন ডকার প্রসঙ্গে অনুলিপি করে যা সময় যোগ করে।
composer.lock
আগে কেন অপসারণ করতে হবে তা নিশ্চিত করুন composer install
। লক ফাইল ব্যতীত, পরের বার আপনি যখন নির্মাণ করবেন তখন নির্ভরতার একটি আলাদা সেট (বিক্রেতা ফোল্ডার) ইনস্টল করা যেতে পারে।
.Dockerignore যুক্ত করা আমার পক্ষে কাজ করে। একটি অতিরিক্ত বিষয় যাঁরা উইন্ডোজে এই সমাধানটি চেষ্টা করছেন , উইন্ডোজগুলি আপনাকে .dockerignore ফাইল তৈরি করতে দেয় না (যেহেতু এটি ডিফল্টরূপে ফাইল দিয়ে আরম্ভের অনুমতি দেয় না))
এর সাথে শুরু করে এই জাতীয় ফাইল তৈরি করতে। উইন্ডোজ এ , একটি শেষ ডটও অন্তর্ভুক্ত করুন, যেমন: .dockerignore.
এবং এন্টার টিপুন (আপনি ফোল্ডার অপশন থেকে এক্সটেনশন বিকল্পগুলি সক্রিয় করেছেন)
বর্তমান ডিরেক্টরি থেকে নোড_মডিউলগুলি বাদ দিচ্ছে
node_modules
কোনও তাত্ক্ষণিক সাব-ডিরেক্টরিতে নোড_মডিউলগুলি বাদ
*/node_modules
এখানে অফিসিয়াল ডক্স রয়েছে
.dockerignore
?