সর্বদা তাজা চিত্র থেকে পাত্রে পুনরায় তৈরি করতে ডকার-রচনা কীভাবে পাবেন?


198

আমার ডকার চিত্রগুলি একটি জেনকিনস সিআই সার্ভারে নির্মিত এবং আমাদের ব্যক্তিগত ডকার রেজিস্ট্রিতে ঠেলাঠেলি করা হয়। আমার লক্ষ্য হ'ল ডকার-রচনাযুক্ত পরিবেশগুলি সরবরাহ করা যা সর্বদা চিত্রগুলির মূল নির্মিত নির্মিত অবস্থা শুরু করে।

আমি বর্তমানে বিভিন্ন মেশিনে ডকার-রচনা 1.3.2 পাশাপাশি 1.4.0 ব্যবহার করছি তবে আমরা পূর্বে পুরানো সংস্করণগুলিও ব্যবহার করেছি।

আমি docker-compose pull && docker-compose up -dরেজিস্ট্রি থেকে নতুন চিত্রগুলি আনতে এবং সেগুলি শুরু করতে সর্বদা কমান্ডগুলি ব্যবহার করি । আমি বিশ্বাস করি যে আমার পছন্দের আচরণটি নির্দিষ্ট সময় পর্যন্ত প্রত্যাশার মতো কাজ করছিল, তবে তখন থেকে docker-compose upপ্রতিবার আসল নির্মিত চিত্রগুলি শুরু করার পরিবর্তে পূর্বে থামানো পাত্রে পুনরায় চালানো শুরু করে।

এই আচরণ থেকে মুক্তি পাওয়ার জন্য কি কোনও উপায় আছে? সেই উপায়ে কি এমন এক হতে পারে যা ডকার-কমপোজ.আইএমএল কনফিগারেশন ফাইলে ওয়্যার্ড থাকে প্রতিটি আবেদনের সময় কমান্ড লাইনে কোনও কিছু "ভুলে না" নির্ভর করতে?

পুনশ্চ. আমার লক্ষ্য অর্জনের উপায় অনুসন্ধান করার পাশাপাশি, আমি এই আচরণের পটভূমি সম্পর্কে আরও কিছুটা জানতে চাই। আমি মনে করি ডকারের মূল ধারণাটি একটি অপরিবর্তনীয় অবকাঠামো তৈরি করা। ডকার-রচনাটির বর্তমান আচরণ কেবল এই পদ্ধতির সাথে স্পষ্ট সংঘাত বলে মনে হচ্ছে .. বা আমি এখানে কিছু পয়েন্ট মিস করছি?

উত্তর:


232

docker-compose up --force-recreateএকটি বিকল্প, তবে আপনি যদি এটি সিআই এর জন্য ব্যবহার করেন তবে আমি docker-compose rm -fপাত্রে এবং ভলিউমগুলি থামাতে এবং মুছে ফেলার জন্য বিল্ডটি শুরু করব (তারপরে এটি টানুন এবং উপরে দিয়ে অনুসরণ করুন)।

এটি আমি ব্যবহার করি:

docker-compose rm -f
docker-compose pull
docker-compose up --build -d
# Run some tests
./tests
docker-compose stop -t 1

কনটেইনারগুলি পুনরায় তৈরি করার কারণটি হ'ল যে কোনও ডেটা ভলিউম ব্যবহার করা যেতে পারে তা সংরক্ষণ করা (এবং এটি আরও upদ্রুত তৈরিতে ঘটে )।

আপনি যদি সিআই করছেন তবে আপনি এটি চান না, তাই সমস্ত কিছু সরিয়ে আপনি যা চান তা করা উচিত।

আপডেট: ব্যবহার করুন up --buildযা যোগ করা হয়েছিল docker-compose1.7


1
হ্যাঁ, আসলে এটি আমি সিআই-তেও করি। আমি কেন এটি উল্লেখ করিনি তা নিশ্চিত নয় ...
অ্যাড্রিয়ান মউত

@dnephin docker-compose run -dবিদ্যমান নেই? আপনি না বলতে চান docker-compose up -d?
গিলিয়াম ভিনসেন্ট

2
আপনি যদি আরও বেশি সময় বাঁচানোর docker-compose pullআগে docker-compose rm -f
দৌড়ান

2
শেষে -d পতাকাটি কী করবে?
ডেভিড জে ডেভিস

3
"-ডি বিচ্ছিন্ন মোড: পটভূমিতে পাত্রে চালান,"
নেপফিন

135

আমার পক্ষে একমাত্র সমাধানটি হ'ল এই আদেশটি:

docker-compose build --no-cache

এটি স্বয়ংক্রিয়ভাবে রেপো থেকে নতুন চিত্রটি টানবে এবং আপনি পূর্বে ব্যবহার করেছেন এমন কোনও পরামিতিগুলির সাথে প্রাক-বিল্ডযুক্ত ক্যাশে সংস্করণ ব্যবহার করবে না।


1
এছাড়াও, উইন্ডোজ 10 এর অধীনে এটি স্বয়ংক্রিয় থেকে ফিক্সড বা ফিক্সড থেকে স্বয়ংক্রিয় থেকে সেটিংসে ডিএনএস সার্ভারটি সেট করতে সহায়তা করতে পারে।
qräbnö

2
ডকার-কমপস সংস্করণ ২ সহ ওএস এক্স বিল্ডিংয়ের জন্য আমার জন্য কাজ করেছেন
রোববার

1
ওএস এক্স ডকারে কাজ করেছেন।
হ্যালো ওয়ার্ল্ড

55

বর্তমান অফিসিয়াল ডকুমেন্টেশনের মাধ্যমে একটি শর্ট কাট রয়েছে যা ইতিমধ্যে তৈরি করা পাত্রে, নেটওয়ার্কগুলি, ভলিউমগুলি এবং ছবিগুলি ইতিমধ্যে বন্ধ করা হয়েছে বা আংশিকভাবে মুছে ফেলা হয়েছে এবং এমনভাবে করা হয়, তবে এটি কৌশলটিও করবে:

docker-compose down

তারপরে যদি আপনার চিত্রগুলিতে নতুন পরিবর্তন হয় বা ডকফায়াইলগুলি ব্যবহার করে:

docker-compose build --no-cache

অবশেষে:docker-compose up

এক আদেশে: docker-compose down && docker-compose build --no-cache && docker-compose up


2
docker-compose build --no-cacheডকফায়াইলগুলিতে পরিবর্তনগুলি হলেই প্রয়োজন।
ভিক্টর টিমোফটি

আসলে, ভিক্টর। ধন্যবাদ! আমি ভেবেছিলাম যে ধারকটি শুরু হওয়ার পরে কার্যকর করা একটি মডিউল / অ্যাপ্লিকেশন আপডেট করার পরেও এটি প্রয়োজনীয় ছিল। এই ক্ষেত্রে, চালানোর আগে docker-compose up, সাথে পরিষেবাগুলি পুনর্নির্মাণ করা প্রয়োজন docker-compose build
ivanleoncz

18

আপনি পাস --force-recreateকরতে পারেন docker compose up, যাতে তাজা পাত্রে ব্যবহার করা উচিত।

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

এটি রচনা ফাইল থেকে আপনি বাধ্য করার কোনও উপায় আছে বলে আমি বিশ্বাস করি না।

যুক্তিযুক্তভাবে এটি অপরিবর্তনীয় অবকাঠামো নীতিগুলির সাথে সংঘাত সৃষ্টি করে। পাল্টা যুক্তি সম্ভবত আপনি প্রযোজনায় রচনাটি ব্যবহার করেন না (এখনও)। এছাড়াও, আমি নিশ্চিত নই যে আমি স্বীকার করি যে অপরিবর্তনীয় ইনফ্রা হ'ল ডকারের মূল ধারণা, যদিও এটি অবশ্যই একটি ভাল ব্যবহারের ক্ষেত্রে / বিক্রয় কেন্দ্র।


উত্তর করার জন্য ধন্যবাদ. আমি মনে করি এটি কনফিগারেশন স্তরে জোর করা সত্যিই দরকারী হবে, যেমন। এটি একটি ডাটাবেস ধারক হিসাবে প্রয়োগ এবং অ্যাপ্লিকেশন
ধারকগুলির

8
--force-recreateআমার জন্য কাজ করে না ... নতুন সংস্করণটি বাইরে থাকলেও চিত্রটি টানা হয় না ...
লিসাক

1
@ লিসাক আমি কখনও বলিনি যে এটি নতুন চিত্র টানছে। এটা হয় না। এটি স্থানীয়ভাবে উপলভ্য চিত্রের ব্যবহার করে কেবল নতুন ধারকগুলি শুরু করে। আপনাকে ম্যানুয়ালি ডকার টান চালাতে হবে।
অ্যাড্রিয়ান মৌআত

2
docker-compose up --build

অথবা

docker-compose build --no-cache

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

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