কমান্ড নির্দিষ্ট না করে কীভাবে আমি ডকার পাত্রে একটি সম্পূর্ণ ওএস চালাতে পারি?


25

আমি কোরিওস ডকার ডকুমেন্টেশন অনুসরণ করছি এবং এটিতে কমান্ডগুলি সহ পাতাগুলি শুরু করার উল্লেখ রয়েছে:

docker run someImageName /bin/somebinary

যেখানে someImageNameএকটি চিত্র। যখন / বিন / কারও কারও বাহকটি বের হয়, চিত্রটি আর চলবে না।

আমি কোনও বাইনারি চালানোর জন্য নির্দিষ্ট না করেই কেবল একটি চিত্র চালাতে চাই। পরিবর্তে, আমি কেবল পরিষেবাগুলি (উদাহরণস্বরূপ, systemd / sysvinit) চালাতে চাই যা সাধারণত চিত্রগুলির ওএসের অভ্যন্তরে চালিত হয়

এটি ডোকারের সাথে যে কেউ কখনও করতে চাইবে এমন সাধারণ জিনিস মনে হয়, কিন্তু কোনও আদেশ না দিয়ে চিত্র চালানোর চেষ্টা করে:

2014/02/05 14:49:19 Error: create: No command specified

কমান্ড নির্দিষ্ট করার পরিবর্তে আমি কীভাবে ডকার কনটেইনার শুরু করতে এবং একটি সম্পূর্ণ ওএস চালাতে পারি?



@ ফ্রেডমেগিক ওয়ান্ডারডগ সম্পূর্ণ উত্তর নেই, যদিও উত্তর একই রকম the
মাইকমেকানা

উত্তর:


24

এখানে নথি হিসাবে, আপনি কেবলমাত্র /sbin/initএকক ব্যবহারকারীর থেকে বহু-ব্যবহারকারী মোডে অন্য ইউনিক্স বুট করার মতোই কমান্ড হিসাবে চালিত হন।

/programming/19332662/start-full-container-in-docker

ধারকগুলি সম্পূর্ণ প্রস্ফুটিত ওএসের হতে পারে, তাদের কেবল হবেনা (এটির জন্য ভিএমও করবেন না, এটি কনফিগার এবং পরিচালনা করা আরও জটিল)।

আমি বলব ডকারের পুরো বিন্দুটি হ'ল অ্যাপ্লিকেশন পাত্রে সহজ করা, যাতে আপনাকে কেবল একটি অ্যাপ্লিকেশন কনফিগার করতে হয়, পুরো ওএস নয়।


ধন্যবাদ। / Sbin / init দিয়ে চিত্রটি শুরু করার পরে, আমি দৌড়ে গিয়েছিলাম docker ps -notrunc, ধারক আইডি sudo /usr/sbin/lxc-attach -n containerIDপেতে , তারপরে চলমান চিত্রটিতে .ুকতে। অন্য পোস্টারটিতে যেমন উল্লেখ করা হয়েছে, আমার আসলে দ্বিতীয় আর
ডিআইডি

আপনাকে কোনও ভিএম-তে একটি পূর্ণ বিকাশকারী ওএস চালানোর দরকার নেই তা বলার মতো এটি একটি শারীরিক মেশিনে আপনাকে একটি সম্পূর্ণ ব্লোন্ড ওএস চালানোর দরকার নেই, হ্যাঁ এটি সত্য যে কার্নেলটি মূলত কেবল একটি নিয়মিত x86 / সি হয় প্রোগ্রামটি যে স্টাডলিব ছাড়াই চলে এবং তাই আর ডিআইডি করে, তবে এটি
লাই রায়ান

11

ডকার হ'ল অপারেটিং সিস্টেমের ধারক নয়, অ্যাপ্লিকেশন পাত্রে পরিচালনা ও স্থাপনার জন্য একটি সিস্টেম । দেখে মনে হচ্ছে আপনি কোনও অপারেটিং সিস্টেম বুট করার সাথে ডকার ধারক চালাচ্ছেন la

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

আপনি যদি কেবল কোনও ডিফল্ট CMDএবং ENTRYPOINTআপনার পাত্রে কীভাবে নির্দিষ্ট করতে পারেন তা সন্ধান করে থাকেন , তবে আপনি ডকফার্মিল ব্যবহার করে বিল্ড-টাইমে এটি করতে পারেন ।


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

5
আপনি আপনার ধারকগুলিতে খুব বেশি ক্র্যাম করার চেষ্টা করছেন - এগুলি কোনও অপারেটিং সিস্টেম নয়। প্রক্রিয়া তদারকি প্রতিটি পাত্রে বাইরে পরিচালনা করা উচিত।
EEAA

1
সুতরাং যদি কোনও প্রক্রিয়া মারা যায় ... কেবল পুরো ধারকটি পুনরায় চালু করুন? আমি অনুমান করি যে এটি এত ব্যয়বহুল নয় তাই এটি ঠিক আছে। এটাকে অদ্ভুত লাগছে - আমার
ধারকটিতে

1
হ্যাঁ, এটি ধারণা। তোমার ধারক একটি হয়েছে /sbin/init, কিন্তু এটা না আছে এটা আছে। আপনি সম্ভবত একটি ডিফল্ট উবুন্টু ধারক বা এরকম কিছু ব্যবহার করেছেন। এই ধারকগুলিতে প্রচুর পরিমাণে বিট রয়েছে যা আপনি ইচ্ছা করলে অপসারণ করতে পারেন।
EEAA

1
@ ভালকো সিপুলি আপনি অবশ্যই এই মতামতটি মুক্ত রাখতে পারেন। আমি এখনও বজায় রেখেছি যে কোনও ধারকটির ভিতরে একাধিক প্রক্রিয়া চালানো প্রথম স্থানে ধারকগুলি ব্যবহার করার অনেক কারণকে অবজ্ঞা করে। কোনও ধারকের ভিতরে কোনও ওএস চালানোর জন্য কোনও জায়গা আছে? সম্ভবত। এটি একটি ব্যতিক্রম, যদিও, এবং পক্ষে / কনস সম্পর্কে খুব বেশি আলোচনা ছাড়া করা উচিত নয়।
EEAA

5

একটি ধারকটিতে একটি সম্পূর্ণ অপারেটিং সিস্টেম চালানোর জন্য নিম্নলিখিত ডকফেরাইল তৈরি করুন:

FROM fedora:25

CMD /sbin/init

তারপরে কনটেইনারটি তৈরি এবং শুরু করুন এবং এর ভিতরে চলমান পরিষেবাগুলি অনুসন্ধান করতে এটির ভিতরে একটি শেল প্রবেশ করুন:

docker build -t os .
docker run -d --privileged --name os os
docker exec -it os bash

ধারক ভিতরে পুরো সিস্টেমযুক্ত পরিষেবা। সুন্দর।


0
docker pull ubuntu

প্রয়োজনের তুলনায় একই চিত্র থেকে চালান। নতুন ধারক তৈরি করা হবে এবং তারপরে এটি শুরু করা এবং একে একে নিজের কনফিগারেশন সংরক্ষণ করে থামানো যাবে। আপনার সুবিধার জন্য আপনার প্রতিটি পাত্রে "- নাম" দিয়ে একটি নাম দেওয়া ভাল।

ফাই:

docker run --name MyContainer1 <ubuntu image>
docker run --name MyContainer2 <ubuntu image>
docker run --name MyContainer3 <ubuntu image>

এটাই.

$ docker ps
CONTAINER ID        IMAGE            CREATED          STATUS               NAMES
a7e789711e62        67759a80360c   12 hours ago     Up 2 minutes         MyContainer1
87ae9c5c3f84        67759a80360c   12 hours ago     Up About a minute    MyContainer2
c1524520d864        67759a80360c   12 hours ago     Up About a minute    MyContainer3

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

docker start MyContainer1

পাত্রে উঠতে এবং আপনি যা করতে চান তা করতে:

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