আমি কেন একাধিক পরিষেবা চালানোর জন্য একাধিকবার ডকার সিএমডি ব্যবহার করতে পারি না?


98

আমি ডকসফিল থেকে সেন্টোস + এসএসএস নামে একটি বেস চিত্র তৈরি করেছি। সেন্টোস + এসএস-এর ডকফাইফিলে, আমি এসএমএস পরিষেবা চালানোর জন্য সিএমডি ব্যবহার করি।

তারপরে আমি একটি চিত্র তৈরি করতে চাই যা ডকফাইফিল নামে একটি অন্যান্য রেবিটেমকিউ নামে পরিষেবা চালায়:

FROM centos+ssh
EXPOSE 22
EXPOSE 4149
CMD /opt/mq/sbin/rabbitmq-server start

খরগোশ কনটেইনার শুরু করতে , রান :

docker run -d -p 222:22 -p 4149:4149 rabbitmq

তবে ssh পরিষেবা কার্যকর হয় না, এটি রবিটমিকের ডকফেরফিল সিএমডি সেন্টোসের সিএমডিকে ওভাররাইড করে sense

  1. ডকার চিত্রের ভিতরে সিএমডি কীভাবে কাজ করে?
  2. আমি যদি একাধিক পরিষেবা চালাতে চাই তবে কীভাবে করব? সুপারভাইজার ব্যবহার করছেন?

উত্তর:


64

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

আপনি যদি একাধিক পরিষেবা চালাতে চান তবে আমি অবশ্যই সুপারভাইজার ব্যবহার করব। আপনি প্রতিটি সার্ভিসের জন্য একটি তত্ত্বাবধায়ক কনফিগারেশন ফাইল তৈরি করতে পারেন, এগুলি একটি ডিরেক্টরিতে এড করুন এবং সুপারভাইজারটি চালাতে পারেন এমন একটি সুপারভাইজার কনফিগারেশন ফাইলের supervisord -c /etc/supervisorদিকে নির্দেশ করুন যা আপনার সমস্ত পরিষেবা লোড করে এবং দেখতে দেখতে দেখতে

[supervisord]
nodaemon=true

[include]
files = /etc/supervisor/conf.d/*.conf

আপনি যদি আরও বিশদ চান, আমি এই বিষয়ে এখানে একটি ব্লগ লিখেছি: http://blog.trifork.com/2014/03/11/ using-supervisor-with-docker-to-manage-processes-supporting-image- উত্তরাধিকার /


ধন্যবাদ, তত্ত্বাবধায়ক একটি ভাল ধারণা, তবে আমি অবাক হয়েছি কীভাবে সিএমডি
ডকারের

4
আপনি দুটি প্রশ্ন জিজ্ঞাসা করেছেন, ২. একাধিক পরিষেবা চালানোর বিষয়ে। সিএমডি কীভাবে কাজ করে তা ভাবতে ভাবতে, দয়া করে আপনি বিশেষভাবে কী জানতে চান তা বিস্তারিতভাবে বর্ণনা করুন। আমি ইতিমধ্যে এটি রানটাইম সম্পর্কিত তথ্য এবং যে কোনও নতুন সিএমডি দ্বারা ওভাররাইট হওয়া উল্লেখ করেছি।
qkrijger

119

আপনি ঠিক বলেছেন, দ্বিতীয় ডকফায়ফাইল প্রথমটির CMDকমান্ডটি ওভাররাইট করবে । ডকার সর্বদা একটি একক কমান্ড চালাবে, এর চেয়ে বেশি নয়। সুতরাং আপনার ডকফাইফাইলের শেষে, আপনি চালানোর জন্য একটি কমান্ড নির্দিষ্ট করতে পারেন । আর না.

তবে আপনি উভয় কমান্ড এক লাইনে কার্যকর করতে পারেন:

FROM centos+ssh
EXPOSE 22
EXPOSE 4149
CMD service sshd start && /opt/mq/sbin/rabbitmq-server start

আপনার ডকফিলিলকে কিছুটা পরিষ্কার করতে আপনি কী করতে পারেন, আপনি নিজের সিএমডি কমান্ডগুলিকে একটি অতিরিক্ত ফাইলে রাখতে পারেন:

FROM centos+ssh
EXPOSE 22
EXPOSE 4149
CMD sh /home/centos/all_your_commands.sh

এবং এর মতো একটি ফাইল:

service sshd start &
/opt/mq/sbin/rabbitmq-server start

4
ধন্যবাদ, আমি মনে করি সুপারভাইজার ব্যবহার ভাল better তবে ডকার কেন কেবল একটি সিএমডি চালায়? ভিতরে কী ঘটে?
এডওয়ার্ডসীয়ান

4
ভিতরে কী হচ্ছে জানি না। তবে আমি মনে করি এটি ঠিক এর মতোই ডিজাইন করা হয়েছে। আপনার যখন কোনও চিত্র থাকে এবং এতে একটি কমান্ড চালায় (যেমন সিএমডি সহ), এটি একটি ধারক শুরু করে। কমান্ডটি চালিত হওয়ার সাথে সাথে ধারকটি চলবে। কমান্ড শেষ হওয়ার সাথে সাথে পাত্রেও থেমে যায়। সুতরাং প্রতিটি ধারক একটি একক (চলমান) কমান্ড উপস্থাপন করে।
থমাস উহরিগ

আমি মনে করি এটি সম্ভবত এলসিএক্স বা
কোনও কিছুর

4
@ টাইগুই 7 .. কারণ ................?
স্টার্টআপগুই

4
&&কৌশলটি কেবলমাত্র অ-ইন্টারেক্টিভ পরিষেবাদিগুলির সাথে কাজ করবে (এটি পটভূমিতে শুরু হতে পারে) অন্যথায় কেবল প্রথমটি চালিত হবে।
নূরজ

27

আপনি কীভাবে এই সমস্যাটি নিয়ে কাজ করতে পারবেন তা ব্যাখ্যা করার জন্য আমি ক্রিগ্রজারের উত্তরকে শ্রদ্ধা করার সময় আমি মনে করি যে এখানে কী চলছে সে সম্পর্কে আমরা আরও অনেক কিছু শিখতে পারি ...

আসলে " কেন " আপনার প্রশ্নের উত্তর দেওয়ার জন্য ... আমি মনে করি docker stopযে কমান্ডটি কীভাবে কাজ করে এবং আপনার পুনরায় চালু করার চেষ্টা করার সময় সমস্যাগুলি রোধ করার জন্য সমস্ত প্রক্রিয়া পরিষ্কারভাবে বন্ধ করে দেওয়া উচিত (ফাইল দুর্নীতি ইত্যাদি) আপনার পক্ষে সহায়ক হবে helpful

সমস্যা: Docker যদি করেনি এটা হুকুম থেকে শুরু, SSH এবং আপনার Docker ফাইল থেকে RabbitMQ শুরু? " ডকার স্টপ কমান্ডটি প্রথমে কনটেইনারের রুট প্রসেসে (পিআইডি 1) এ সিগনিটার সিগন্যাল প্রেরণ করে একটি চলমান ধারককে থামানোর চেষ্টা করে। " পিআইডি 1 হিসাবে ডকার ট্র্যাকিং কোন প্রক্রিয়াটি সাইনটারম পাবে? এটা কি এসএসএইচ বা খরগোশ হবে ?? "ইউনিক্স প্রক্রিয়া মডেল অনুসারে, ডিআইসি প্রক্রিয়া - পিআইডি 1 - সমস্ত অনাথ শিশু প্রক্রিয়া উত্তরাধিকার সূত্রে পেয়েছে এবং সেগুলি অবশ্যই কাটাতে হবে Most বেশিরভাগ ডক পাত্রে একটি এনআর প্রক্রিয়া নেই যা এটি সঠিকভাবে করে এবং ফলস্বরূপ তাদের পাত্রে পূর্ণ হয় সময়ের সাথে সাথে জম্বি প্রক্রিয়াজাত করে ""

উত্তর: ডকার সহজেই শেষের সিএমডিটিকে এক হিসাবে গ্রহণ করে যা পিআইডি 1 এর সাথে রুট প্রক্রিয়া হিসাবে চালু হবে এবং সেখান থেকে সাইনটারএম পাবে docker stop

প্রস্তাবিত সমাধান: ফিউশন / বেসিমেজের মতো একাধিক পরিষেবা চালুর জন্য আপনাকে বিশেষভাবে তৈরি একটি বেস চিত্র ব্যবহার করা (বা তৈরি করতে হবে)

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

জানা ভাল:


3

কোনও পাত্রে একাধিক পরিষেবা চালানোর জন্য সরকারী ডকারের উত্তর ।

এটি ব্যাখ্যা করে যে আপনি কীভাবে এটি একটি init সিস্টেম (systemd, sysvinit, upstart), স্ক্রিপ্ট ( CMD ./my_wrapper_script.sh) বা সুপারভাইজারের মতো করতে পারেন supervisord

&&কার্যসংক্রান্ত শুধুমাত্র যে পরিষেবাগুলি পটভূমি (ডেমন) মধ্যে শুরু হয় জন্য কাজ করতে পারেন অথবা যে কোনো ভূমিকা ছাড়াই দ্রুত চালানো এবং প্রম্পট ছেড়ে দেব। ' একটি ইন্টারেক্টিভ পরিষেবা দিয়ে এটি করা (যা প্রম্পট রাখে) এবং কেবল প্রথম পরিষেবাটি শুরু হবে।


0

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

সুতরাং আসুন আমরা স্বীকার করি যে এটি ডকারের (এবং কুবারনেটস / ওপেনশিফ্ট) ডিজাইনারদের থেকে ভাল অনুশীলনের দিকে মনোনিবেশ করা উচিত এবং আমাদের কর্মক্ষেত্রগুলি পুনরায় উদ্ভাবন করা উচিত নয় (এসএসএইচ প্রয়োজনীয় নয় - আমরা docker exec / kubectl exec / oc rshএটি প্রতিস্থাপনের জন্য ডিজাইন করেছি)।

  • অধিক তথ্য

/devops/447/why-it-is-rec सुझावed-to-run-only-one-process-in-a-container

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