ডকার রান উবুন্টু / বিন / বাশ বনাম ডকার রান উবুন্টু


15

ডকার সংস্করণ 17.06.0-ce

আমি ভিডিও কোর্স দেখে ডকার অধ্যয়ন করছি।

প্রভাষক দেখায়:

sudo docker run -ti ubuntu /bin/bash

চিত্রটি উবুন্টু সহ ডকার চালান। আর আমাকে কী কষ্ট দেয় /bin/bash\। এটি একটি কমান্ড man docker runদেখায় /bin/bash। যে docker run IMAGE [COMMAND]। ঠিক আছে, ঠিক আছে। তবে এর মধ্যে পার্থক্য কী

sudo docker run -ti ubuntu 

এবং

sudo docker run -ti ubuntu /bin/bash

আমার জন্য কেউ নেই। এবং প্রভাষক কমান্ডের দিকে মনোনিবেশ করেন না। তিনি বলেছিলেন যে আমরা কেবল ডকার চালাচ্ছি। এটি অবশ্যই তাঁর প্রথম আদেশ ছিল command এবং তারপরে তিনি দেখান যে আমরা হোস্ট মেশিন থেকে বিচ্ছিন্ন হয়ে পড়েছি, কোনও ক্ষতি ছাড়াই আমরা যা চাই তা নির্দ্বিধায় নষ্ট করতে পারি (যেমন rm -rf / bin)।

আমি চেক করেছি:

$ sudo docker run -ti ubuntu
root@aaf7cd26fe18:/# echo $SHELL
/bin/bash


$ sudo docker run -ti ubuntu /bin/bash
root@6b2570958216:/# echo $SHELL
/bin/bash

ভাল, নিজের জন্য আমি এই /bin/bashঅংশটিকে আবর্জনা হিসাবে ফেলে দেওয়ার সিদ্ধান্ত নিয়েছি ।

তবে যাইহোক আমি আপনাকে জিজ্ঞাসা করার সিদ্ধান্ত নিয়েছি: সম্ভবত ডকার চালানোর দুটি উপায়ের মধ্যে কিছু পার্থক্য রয়েছে? যদি থাকে তবে তা কেমন?

উত্তর:


11

ডক-শ্রমিক চিত্র নির্দিষ্ট করতে পারেন করতে পারেন একটি নির্দিষ্ট কমান্ড ব্যবহার করে ডিফল্টরূপে চালানো যাবে যে Dockerfile মধ্যে ডিরেক্টিভের । এবং:CMD

যদি ব্যবহারকারী আর্গুমেন্ট নির্দিষ্ট করে docker runতবে তারা নির্দিষ্ট করা ডিফল্টকে ওভাররাইড করবে CMD

যেমনটি ঘটে, উবুন্টু ডকফাইফিলের জন্য নির্দিষ্ট ডিফল্ট কমান্ডটি আসলে বাশ:

CMD ["/bin/bash"]

সুতরাং, উবুন্টু চিত্রের নির্দিষ্ট ক্ষেত্রে, এর docker run ... ubuntu /bin/bashথেকে আলাদা নয় docker run ... ubuntu

অবশ্যই, এটি সর্বদা সত্য হওয়া উচিত নয়। একটি ডাটাবেস ইঞ্জিনের জন্য একটি ডকফাইফাইল ডিফল্টরূপে ডাটাবেস কমান্ড চালাতে পারে। সেক্ষেত্রে আপনার যদি একটি ইন্টারেক্টিভ শেলের প্রয়োজন হয় তবে আপনাকে এটি করতে হবে docker run ... /bin/bash

সাধারণভাবে, আপনি ধরে নিতে পারবেন না যে এটি docker runআপনাকে একটি ইন্টারেক্টিভ শেল দেবে। /bin/bashআপনার যদি শেলের প্রয়োজন হয় তবে এটি নির্দিষ্ট করা নিরাপদ ।


2

আপনি কমান্ড, যা আপনার ক্ষেত্রে হয় প্রদান করবেন না যখন /bin/bash, যখন ব্যবহার -ti( iইন্টারেক্টিভ, tটার্মিনাল) আপনাকে ডিফল্ট প্রোগ্রাম যা ব্যবহার নিষ্পন্ন করা হবে সংজ্ঞায়িত করা হয়েছে সংযুক্ত করা হবে runকমান্ড DockerFile

উদাহরণস্বরূপ, যদি কোনও চিত্র অগ্রভাগে কোনও ওয়েব সার্ভার চালায়, আপনি যা ব্যবহার runনা করে /bin/bashযা দেখতে পাবেন তা হ'ল সেই ওয়েব সার্ভারের লগ (ডিফল্ট প্রোগ্রাম যা চালানো হয়েছে)।

কমান্ডটি নির্দিষ্ট করার সময়, আপনি বলছেন যে আমি কী করছি তা ভাবছে না বা চিত্রটিতে চলছে তা আমাকে এই "কমান্ড" চালিয়ে একটি ইন্টারেক্টিভ টার্মিনাল দেয়।

উবুন্টুতে ডিফল্ট কমান্ডটি দেওয়া হয় bashএবং আপনি সরবরাহ না করলে -tiরানার ঠিক পরে কন্টেইনারটি বন্ধ হয়ে যায়। কারণ এটি অ-ইন্টারেক্টিভ মোডে বাশ চালিয়েছিল এবং এটি শেষ হওয়ার পরে ধারকটির আর কিছুই করার নেই।

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