কম্পিউটার

ডকার কন্টেইনারগুলির একটি পুঙ্খানুপুঙ্খ ভূমিকা নির্দেশিকা

একটা বড় প্রতিশ্রুতি দিয়ে শুরু করি। আপনি একেবারে আজকের এই নিবন্ধটি পছন্দ করবে. এটা দীর্ঘ, বিস্তারিত এবং অত্যন্ত দরকারী হতে যাচ্ছে. GRUB, GRUB2 ভাবুন। এখানে একই জিনিস. কেবলমাত্র আমরা ডকারকে মোকাবেলা করব, একটি চমৎকার বিতরণ প্ল্যাটফর্ম যা একটি সহজ, সুবিধাজনক উপায়ে লিনাক্স কন্টেইনার (LXC) প্রযুক্তিকে মোড়ানো।

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


বিষয়বস্তুর সারণী


  1. ভূমিকা
  2. ডকার বাস্তবায়ন
  3. শুরু করা হচ্ছে
  4. ডকার কমান্ড
  5. ছবি টানুন
  6. একটি ডকার কন্টেইনার শুরু করুন
  7. Apache এবং SSH ইনস্টল করুন
    1. পরিষেবা শুরু করুন
    2. অ্যাপাচি পরিষেবা
    3. SSH পরিষেবা
  8. ওয়েব সার্ভার চালু আছে কিনা তা পরীক্ষা করুন
    1. ইনকামিং পোর্টগুলি প্রকাশ করুন
    2. IP ঠিকানা চেক করুন
    3. নতুন কনফিগারেশন পরীক্ষা করা হচ্ছে
  9. SSH কাজ করে কিনা তা পরীক্ষা করুন
    1. অপেক্ষা করুন, রুট পাসওয়ার্ড কি?
  10. প্রতিশ্রুতি ছবি
  11. ডকারফাইল
    1. ছবি তৈরি করুন
    2. পরীক্ষা চিত্র
  12. বিকল্প বিল্ড
    1. কপি নির্দেশনা
  13. পাত্রের সুবিধা
  14. আপনি যে সমস্যার সম্মুখীন হতে পারেন এবং সমস্যা সমাধান করতে পারেন
  15. অতিরিক্ত কমান্ড
    1. exec এবং সংযুক্তির মধ্যে পার্থক্য
    2. শুরু এবং চালানোর মধ্যে পার্থক্য
    3. নির্মাণ এবং তৈরির মধ্যে পার্থক্য
  16. এটা একটা শুরু মাত্র...
  17. আরো পড়া
  18. উপসংহার

ভূমিকা

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

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

পাত্রগুলোও একইভাবে তাদের পথ চলা শুরু করে। প্রথমত, আমাদের chroot ছিল, কিন্তু কারাগারের পরিবেশের ভিতরে চলমান প্রক্রিয়াগুলি একই নামস্থান ভাগ করেছে এবং একই সংস্থানগুলির জন্য লড়াই করেছে। তারপর, আমরা kexec সিস্টেম কল পেয়েছি, যা আমাদের BIOS-এর মধ্য দিয়ে না গিয়ে অন্য কার্নেলের প্রসঙ্গে বুট করতে দেয়। তারপরে, কন্ট্রোল গ্রুপগুলি আসে, যা আমাদের সিস্টেম রিসোর্স যেমন সিপিইউ, মেমরি এবং অন্যান্যকে সাবগ্রুপে ভাগ করার অনুমতি দেয়, এইভাবে সিস্টেমে চলমান প্রসেসগুলির আরও ভাল নিয়ন্ত্রণের অনুমতি দেয়।

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

বেশ কিছু প্রতিযোগী প্রযুক্তি ওপেনভিজেডের মতো একই ধরনের সমাধান দেওয়ার চেষ্টা করেছে, কিন্তু সম্প্রদায়টি শেষ পর্যন্ত মেইনলাইন কার্নেলের অভ্যন্তরে নেটিভ সক্ষমতায় তার ফোকাসকে সংকুচিত করেছে এবং এটি ভবিষ্যতের দিক বলে মনে হচ্ছে। তবুও, LXC ব্যবহার করা কিছুটা কঠিন থেকে যায়, কারণ পাত্রগুলি চালানোর জন্য যথেষ্ট পরিমাণে প্রযুক্তিগত জ্ঞান এবং স্ক্রিপ্টিং প্রয়োজন।

এখানেই ডকার জায়গায় আসে। এটি পরিকাঠামোর ব্যাকএন্ড সম্পর্কে উদ্বেগ ছাড়াই নতুন ধারক দৃষ্টান্ত তৈরি করার একটি সহজ পদ্ধতি অফার করে। ভাল প্রায়. কিন্তু অসুবিধার মাত্রা অনেক কম।

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

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

ডকার বাস্তবায়ন

আমরা কিছু দুর্দান্ত জিনিস করার আগে একটু বেশি বিরক্তিকর জিনিস। যাইহোক, ডকার বেশিরভাগই এলএক্সসি সম্পর্কে, তবে শুধু নয়। এটিকে এক্সটেনসিবল করার জন্য ডিজাইন করা হয়েছে এবং এটি libvirt এবং systemd এর সাথেও ইন্টারফেস করতে পারে। একটি উপায়ে, এটি এটিকে প্রায় একটি হাইপার-হাইপারভাইজারের মতো করে তোলে, কারণ ভবিষ্যতের বৃদ্ধির সম্ভাবনা রয়েছে এবং যখন অতিরিক্ত মডিউল যোগ করা হয়, তখন এটি কার্যকরভাবে Xen বা KVM এর মতো ক্লাসিক হাইপারভাইজার বা libvirt এবং বন্ধুদের ব্যবহার করে কিছু প্রতিস্থাপন করতে পারে।

এটি একটি পাবলিক ডোমেইন ইমেজ হতে, যদি আপনি বিস্মিত.

শুরু করা হচ্ছে

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

yum install docker-io

সফ্টওয়্যারটি ইনস্টল হয়ে গেলে, আপনি এটি ব্যবহার করা শুরু করতে পারেন। যাইহোক, আপনি প্রথমবার ডকার কমান্ড চালানোর চেষ্টা করার সময় নিম্নলিখিত দুটি সমস্যার সম্মুখীন হতে পারেন:

ডকার <যেকোনো একটি আদেশ>
FATA[0000] পান https:///var/run/docker.sock/v1.18/images/json:ডায়াল ইউনিক্স /var/run/docker.sock:এরকম কোনো ফাইল বা ডিরেক্টরি নেই। আপনি কি TLS ছাড়াই একটি TLS-সক্ষম ডেমনের সাথে সংযোগ করার চেষ্টা করছেন?

এবং অন্য ত্রুটি হল:

ডকার <যেকোনো একটি আদেশ>
FATA[0000] পান https:///var/run/docker.sock/v1.18/containers/json:ডায়াল ইউনিক্স /var/run/docker.sock:অনুমতি অস্বীকার করা হয়েছে। আপনি কি TLS ছাড়াই একটি TLS-সক্ষম ডেমনের সাথে সংযোগ করার চেষ্টা করছেন?

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

systemctl start docker

এখন আমরা পাগল হয়ে যেতে পারি এবং ডকার ব্যবহার শুরু করতে পারি।

ডকার কমান্ড

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

ছবি টানুন

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

নামকরণের নিয়ম হল repository:tag, উদাহরণস্বরূপ centos:latest. অন্য কথায়, আমরা সর্বশেষ CentOS ইমেজ চাই। তবে প্রয়োজনীয় চিত্রটি সেন্টোস:6.6 হতে পারে। ঠিক আছে, এটা করা যাক.

এখন ডকার ইমেজ কমান্ডটি চালানোর মাধ্যমে চিত্রগুলির তালিকা করা যাক:

একটি ডকার কন্টেইনার শুরু করুন

যেমনটি আমরা আমার মূল টিউটোরিয়ালে দেখেছি, সবচেয়ে সহজ উদাহরণ হল একটি শেল চালানো:

ডকার রান -ti centos:centos7 /bin/bash

তাই আমরা এখানে কি আছে? আমরা একটি BASH শেল সহ CentOS 7 ইমেজ থেকে নিজস্ব TTY (-t) এবং STDIN (-i) সহ একটি নতুন কন্টেইনার ইনস্ট্যান্স চালাচ্ছি। কয়েক সেকেন্ডের মধ্যে, আপনি পাত্রের ভিতরে একটি নতুন শেল পাবেন। এখন, এটি একটি খুব মৌলিক, খুব স্ট্রাইপ-ডাউন অপারেটিং সিস্টেম, কিন্তু আপনি এটির ভিতরে জিনিসগুলি তৈরি করা শুরু করতে পারেন৷

Apache এবং SSH ইনস্টল করুন

আসুন একটি ওয়েব সার্ভার সেটআপ করি, যাতে SSH অ্যাক্সেসও থাকবে। এই লক্ষ্যে, আমাদের কিছু বরং মৌলিক ইনস্টলেশন করতে হবে। Apache (httpd) এবং SSHD (openssh-server) ধরুন এবং সেগুলি কনফিগার করুন। ডকারের সাথে এর কোনও সম্পর্ক নেই, তবে এটি একটি দরকারী অনুশীলন।

কিভাবে, আপনার মধ্যে কেউ কেউ চিৎকার করতে পারে, অপেক্ষা করুন, আপনার একটি পাত্রের ভিতরে SSH এর প্রয়োজন নেই, এটি একটি নিরাপত্তা ঝুঁকি এবং কী নয়। ঠিক আছে, সম্ভবত, হ্যাঁ এবং না, আপনার কী প্রয়োজন এবং আপনি কিসের জন্য ধারকটি ব্যবহার করতে চান তার উপর নির্ভর করে। তবে নিরাপত্তার কথা বাদ দেওয়া যাক। অনুশীলনের উদ্দেশ্য হল যে কোনও পরিষেবা কীভাবে সেটআপ এবং চালাতে হয় তা শেখা।

পরিষেবা শুরু করুন

আপনি একটি init স্ক্রিপ্ট বা একটি systemd কমান্ড ব্যবহার করে আপনার Apache শুরু করতে চাইতে পারেন। এটি পুরোপুরি কাজ করবে না। বিশেষত CentOS-এর জন্য, এটি সিস্টেমডের সাথে আসে, তবে আরও গুরুত্বপূর্ণভাবে, ধারকটির নিজস্ব সিস্টেমড নেই। আপনি চেষ্টা করলে, কমান্ড ব্যর্থ হবে.

systemctl শুরু httpd
ডি-বাস সংযোগ পেতে ব্যর্থ:পরিষেবা পরিচালকের সাথে কোনও সংযোগ নেই৷

এই সমস্যার চারপাশে হ্যাক রয়েছে, এবং আমরা ভবিষ্যতের টিউটোরিয়ালে এর মধ্যে কয়েকটি সম্পর্কে জানব। কিন্তু সাধারণভাবে, কন্টেইনারগুলির হালকা এবং সহজ প্রকৃতির প্রেক্ষিতে, আপনার প্রক্রিয়াগুলি চালানোর জন্য আপনার সত্যিই একটি সম্পূর্ণরূপে উন্নত স্টার্টআপ পরিষেবার প্রয়োজন নেই। এটি কিছু জটিলতা যোগ করে।

অ্যাপাচি পরিষেবা

Apache (HTTPD) চালানোর জন্য, শুধু /usr/sbin/httpd - বা আপনার ডিস্ট্রোতে একটি সমতুল্য কমান্ড চালান। পরিষেবাটি শুরু হওয়া উচিত, সম্ভবত একটি সতর্কতা দিয়ে যে আপনি httpd.conf-এ আপনার ServerName নির্দেশিকা কনফিগার করেননি। আমরা আমার বরং ব্যাপক Apache গাইডে এটি কীভাবে করতে হয় তা শিখেছি।

/usr/sbin/httpd
AH00558:httpd:172.17.0.4 ব্যবহার করে সার্ভারের সম্পূর্ণ যোগ্য ডোমেন নাম নির্ভরযোগ্যভাবে নির্ধারণ করা যায়নি। এই বার্তাটি দমন করতে বিশ্বব্যাপী 'সার্ভারনাম' নির্দেশিকা সেট করুন

SSH পরিষেবা

SSHD দিয়ে, /usr/sbin/sshd চালান।

/usr/sbin/sshd -f /etc/ssh/sshd_config
হোস্ট কী লোড করা যায়নি:/etc/ssh/ssh_host_rsa_key
হোস্ট কী লোড করা যায়নি:/etc/ssh/ssh_host_dsa_key
হোস্ট কী লোড করা যায়নি:/etc/ssh/ssh_host_ecdsa_key
হোস্ট কী লোড করা যায়নি:/etc/ssh/ssh_host_ed25519_key

আপনিও ব্যর্থ হবেন, কারণ আপনার কাছে সব চাবি থাকবে না। সাধারণত, স্টার্টআপ স্ক্রিপ্টগুলি এটি গ্রহণ করে, তাই পরিষেবাটি সঠিকভাবে শুরু হওয়ার আগে আপনাকে একবার ssh-keygen কমান্ডটি চালাতে হবে। দুটি কমান্ডের যে কোনো একটি কাজ করবে:

/usr/bin/ssh-keygen -t rsa -f <ফাইলের পথ>

/usr/bin/ssh-keygen -A
ssh-keygen:নতুন হোস্ট কী তৈরি করা হচ্ছে:RSA1 RSA DSA ECDSA ED25519

ওয়েব সার্ভার চালু আছে কিনা তা পরীক্ষা করুন

এখন, পাত্রের ভিতরে, আমরা দেখতে পাচ্ছি যে অ্যাপাচি আসলেই চলছে।

ps -ef|grep অ্যাপাচি
apache      87    86  0 10:47? 00:00:00 /usr/sbin/httpd
apache      88    86  0 10:47? 00:00:00 /usr/sbin/httpd
apache      89    86  0 10:47? 00:00:00 /usr/sbin/httpd
apache      90    86  0 10:47? 00:00:00 /usr/sbin/httpd
apache      91    86  0 10:47? 00:00:00 /usr/sbin/httpd

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

ইনকামিং পোর্টগুলি প্রকাশ করুন

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

রান কমান্ড দিয়ে একটি নতুন কন্টেইনার শুরু করার সময়, কোন পোর্ট খুলতে হবে তা নির্দিষ্ট করতে আপনি -p বিকল্প ব্যবহার করতে পারেন। আপনি একটি একক পোর্ট বা পোর্টের একটি পরিসর বেছে নিতে পারেন এবং আপনি হোস্ট পোর্ট (হোস্টপোর্ট) এবং কন্টেইনার পোর্ট (কন্টেইনারপোর্ট) উভয়কেই ম্যাপ করতে পারেন। উদাহরণস্বরূপ:

  • -p 80 কন্টেইনার পোর্ট 80 প্রকাশ করবে। এটি স্বয়ংক্রিয়ভাবে হোস্টের একটি র্যান্ডম পোর্টে ম্যাপ করা হবে। আমরা পরে শিখব কিভাবে সঠিক পোর্ট সনাক্ত করতে হয়।
  • -p 80:80 কন্টেইনার পোর্টকে হোস্ট পোর্ট 80-এ ম্যাপ করবে। এর মানে আপনার কনটেইনারের অভ্যন্তরীণ IP ঠিকানা জানার দরকার নেই। অভ্যন্তরীণ NAT এর একটি উপাদান জড়িত, যা ডকার ভার্চুয়াল ইন্টারফেসের মাধ্যমে যায়। আমরা শীঘ্রই এ বিষয়ে আলোচনা করব। তাছাড়া, যদি আপনি এই পদ্ধতিটি ব্যবহার করেন, শুধুমাত্র একটি একক ধারক পোর্ট 80 এর সাথে আবদ্ধ করতে সক্ষম হবে। আপনি যদি বিভিন্ন IP ঠিকানা সহ একাধিক ওয়েব সার্ভার ব্যবহার করতে চান, তাহলে আপনাকে সেগুলিকে আলাদা পোর্টে সেট আপ করতে হবে।

ডকার রান -ti -p 22:22 -p 80:80 ইমেজ-1:সর্বশেষ
FATA[0000] ডেমন থেকে ত্রুটির প্রতিক্রিয়া:কন্টেইনার 64bd520e2d95a699156f5d40331d1aba972039c3c201a97268d61c6ed17e1619 শুরু করা যাবে না:0.0.0.0>র জন্য বাঁধাই ইতিমধ্যেই ব্যর্থ হয়েছে:0.0.0.

অনেক অতিরিক্ত বিবেচনা আছে. আইপি ফরওয়ার্ডিং, ব্রিজড নেটওয়ার্ক, পাবলিক এবং প্রাইভেট নেটওয়ার্ক, সাবনেট রেঞ্জ, ফায়ারওয়াল নিয়ম, লোড ব্যালেন্সিং এবং আরও অনেক কিছু। এই মুহুর্তে, আমাদের এসব নিয়ে চিন্তা করার দরকার নেই।

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

আইপি ঠিকানা চেক করুন

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

ডকার পরিদর্শন <কন্টেইনারের নাম বা আইডি>

এটি একটি খুব দীর্ঘ বিবরণের তালিকা দেবে, অনেকটা KVM XML কনফিগারেশনের মতো, এটি ছাড়া এটি JSON-এ লেখা, যা ডেটার জন্য আরেকটি আধুনিক এবং কুৎসিত বিন্যাস। পাঠযোগ্য কিন্তু অত্যন্ত কুৎসিত.

ডকার distracted_euclid পরিদর্শন
[{
"AppArmorProfile":"",
"আর্গস":[],
"কনফিগ":{
"AttachStderr":সত্য,
"অ্যাটাচস্টডিন":সত্য,
"AttachStdout":সত্য,
"সিএমডি":[
"/বিন/বাশ"
],
"CpuShares":0,
"Cpuset":"",
"ডোমেন নাম":"",
"এন্ট্রিপয়েন্ট":শূন্য,
"এনভি":[
...
"Exposed Ports":{
"80/tcp":{}
},
"হোস্টনেম":"43b179c5aec7",
"চিত্র":"centos:centos7",
"লেবেল":{},
"MacAddress":"",
...

আমরা এটিকে শুধুমাত্র আইপি ঠিকানায় সংকুচিত করতে পারি।

ডকার পরিদর্শন <কন্টেইনার নাম বা আইডি> | grep -i "ipaddr"
"IPAddress":"172.17.0.20",

নতুন কনফিগারেশন পরীক্ষা করা হচ্ছে

চল নতুন করে শুরু করি। একটি নতুন উদাহরণ চালু করুন, Apache সেটআপ করুন, এটি শুরু করুন। একটি ওয়েব ব্রাউজার খুলুন এবং পরীক্ষা করুন। যদি এটি কাজ করে, তাহলে আপনি সঠিকভাবে আপনার ওয়েব সার্ভার কনফিগার করেছেন। ঠিক কি আমরা চেয়েছিলাম.

docker run -it -p 80:80 centos:centos7 /bin/bash

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

# ডকার পিএস
কন্টেইনার আইডি        ইমেজ               কমান্ড
43b179c5aec7        centos:centos7      "/bin/bash"

পোর্টগুলি তৈরি করা হয়েছে
2 ঘন্টা আগে         2 ঘন্টা পর্যন্ত          0.0.0.0:80->80/tcp

NAMES               distracted_euclid

এবং ব্রাউজারে, আমরা পাই:

ঐচ্ছিক:এখন, অভ্যন্তরীণ IP ঠিকানা পরিসর শুধুমাত্র হোস্টে অ্যাক্সেসযোগ্য হবে। আপনি যদি এটিকে অন্য মেশিন থেকে অ্যাক্সেসযোগ্য করতে চান তবে আপনার NAT এবং IP ফরওয়ার্ডিং প্রয়োজন হবে। এবং যদি আপনি নাম ব্যবহার করতে চান, তাহলে আপনাকে সঠিকভাবে /etc/hosts পাশাপাশি DNS কনফিগার করতে হবে। কন্টেইনারের জন্য, এটি একটি নতুন উদাহরণ চালানোর সময় --add-host="host:IP" নির্দেশিকা ব্যবহার করে করা যেতে পারে।

আরেকটি নোট:মনে রাখবেন যে ডকারের নিজস্ব অভ্যন্তরীণ নেটওয়ার্কিং রয়েছে, অনেকটা ভার্চুয়ালবক্স এবং কেভিএমের মতো, যেমনটি আমরা আমার অন্যান্য টিউটোরিয়ালগুলিতে দেখেছি। এটি একটি মোটামুটি বিস্তৃত /16 নেটওয়ার্ক, তাই আপনার অনেক স্বাধীনতা আছে। হোস্টে:

# /sbin/ifconfig
docker0:flags=4163  mtu 1500
inet 172.17.42.1  নেটমাস্ক 255.255.0.0  সম্প্রচার 0.0.0.0
inet6 fe80::5484:7aff:fefe:9799  prefixlen 64  scopeid 0x20
ইথার 56:84:7a:fe:97:99  txqueuelen 0  (ইথারনেট)
RX প্যাকেট 6199  বাইট 333408 (325.5 KiB)
RX ত্রুটি 0  ড্রপ 0  overruns 0  ফ্রেম 0
TX প্যাকেট 11037  বাইট 32736299 (31.2 MiB)
TX ত্রুটি 0  কমেছে 0 ওভাররান 0  ক্যারিয়ার 0  সংঘর্ষ 0

SSH কাজ করে কিনা তা পরীক্ষা করুন

আমাদের SSH এর সাথে একই ব্যায়াম করতে হবে। আবার, এর অর্থ হল পোর্ট 22 প্রকাশ করা, এবং আমাদের কাছে বেশ কয়েকটি বিকল্প উপলব্ধ রয়েছে। এটিকে আরও আকর্ষণীয় করতে, আসুন একটি র্যান্ডম পোর্ট অ্যাসাইনমেন্ট দিয়ে চেষ্টা করি:

ডকার রান -ti -p 20 -p 80 centos:centos7 /bin/bash

এবং যদি আমরা ডকার পিএস দিয়ে পরীক্ষা করি, বিশেষত পোর্টগুলির জন্য:

0.0.0.0:49176->22/tcp, 0.0.0.0:49177->80/tcp   boring_mcclintock

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

ssh 172.17.42.1 -p 49117

যেভাবেই হোক, আমরা আমাদের যা প্রয়োজন তা পাব, উদাহরণস্বরূপ:

ssh 172.17.0.5
হোস্ট '172.17.0.5 (172.17.0.5)' এর সত্যতা প্রতিষ্ঠিত করা যাবে না। ECDSA কী ফিঙ্গারপ্রিন্ট হল 00:4b:de:91:60:e5:22:cc:f7:89:01:19:3e:61:cb:ea।
আপনি কি নিশ্চিত আপনি সংযোগ চালিয়ে যেতে চান (হ্যাঁ/না)? হ্যাঁ
সতর্কতা:পরিচিত হোস্টের তালিকায় স্থায়ীভাবে '172.17.0.5' (ECDSA) যোগ করা হয়েছে।
[email protected] এর পাসওয়ার্ড:

অপেক্ষা করুন, রুট পাসওয়ার্ড কি?

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

rpm -q -- কি প্রদান করে /etc/passwd
setup-2.8.71-5.el7.noarch

কিন্তু এটি একটি নিরাপত্তা দুর্বলতা। আমরা আমাদের পাত্রে চর্বিহীন হতে চাই. তাই আমরা হোস্টের /etc/shadow থেকে পাসওয়ার্ড হ্যাশকে কন্টেইনারে কপি করতে পারি। পরে, আমরা এটি করার আরও সুগম পদ্ধতি সম্পর্কে শিখব।

আরেকটি বিষয় যা বেশ স্পষ্টভাবে আঘাত করে তা হল আমরা আমাদের সমস্ত কর্মের পুনরাবৃত্তি করছি। এটি কার্যকর নয়, এবং এই কারণেই আমরা আমাদের কন্টেইনারে করা পরিবর্তনগুলি সংরক্ষণ করতে চাই৷ পরবর্তী বিভাগ যে পরিচালনা করে.

প্রতিশ্রুতি ছবি

আপনি কন্টেইনারে পরিবর্তন করার পরে, আপনি এটি কমিট করতে চাইতে পারেন। অন্য কথায়, পরবর্তীতে একটি নতুন কন্টেইনার শুরু করার সময়, আপনাকে স্ক্র্যাচ থেকে সমস্ত পদক্ষেপ পুনরাবৃত্তি করতে হবে না, আপনি আপনার বিদ্যমান কাজটি পুনরায় ব্যবহার করতে এবং সময় এবং ব্যান্ডউইথ বাঁচাতে সক্ষম হবেন। আপনি একটি ইমেজ এর আইডি বা তার উপনামের উপর ভিত্তি করে কমিট করতে পারেন:

ডকার কমিট <কন্টেইনার নাম বা আইডি> <নতুন চিত্র>

উদাহরণস্বরূপ, আমরা নিম্নলিখিতগুলি পাই:

ডকার কমিট 43b179c5aec7 myapache3
1ee373ea750434354faeb1cb70b0177b463c51c96c9816dcdf5562b4730dac54

ছবির তালিকা আবার দেখুন:

ডকারফাইল

আপনার ইমেজ তৈরি করার একটি আরো সুগম উপায় Dockerfiles ব্যবহার করা হয়. In a way, it's like using Makefile for compilation, only in Docker format. Or an RPM specfile if you will. Basically, in any one "build" directory, create a Dockerfile. We will learn what things we can put inside one, and why we want it for our Apache + SSH exercise. Then, we will build a new image from it. We can combine it with our committed images to preserve changes already done inside the container, like the installation of software, to make it faster and save network utilization.

Before we go any further, let's take a look at a Dockerfile that we will be using for our exercise. At the moment, the commands may not make much sense, but they soon will.

FROM myhttptest2:latest

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

EXPOSE 80

RUN mkdir -p /run/httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

What do we have here?

  • The FROM directory tells us what repo:tag to use as the baseline. In our case, it's one of the committed images that already contains the httpd and sshd binaries, SSH keys, and a bit more.
  • EXPOSE 22 - This line exposes port 22 inside the container. We can map it further using the -p option at runtime. The same is true for EXPOSE 80, which is relevant for the Web server.
  • CMD ["/usr/sbin/sshd", "-D"] - This instructions runs an executable, with optional arguments. এটা যে হিসাবে হিসাবে সহজ।
  • RUN mkdir -p /run/httpd - This instruction runs a command in a new layer on top of the base image - and COMMITS the results. This is very important to remember, as we will soon discuss what happens if you don't use the RUN mkdir thingie with Apache.
  • CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] - We run the server, in the foreground. The last bit is optional, but for the time being, you can start Apache this way. Good enough.

As you can see, Dockerfiles aren't that complex or difficult to write, but they are highly useful. You can pretty much add anything you want. Using these templates form a basis for automation, and with conditional logic, you can create all sorts of scenarios and spawn containers that match your requirements.

Build image

Once you have a Dockerfile in place, it's time to build a new image. Dockerfiles must follow a strict convention, just like Makefiles. It's best to keep different image builds in separate sub-directories. যেমনঃ

docker build -t test5 .
Sending build context to Docker daemon 41.47 kB
Sending build context to Docker daemon
Step 0 :FROM myapache4:latest
 ---> 7505c70235e6
Step 1 :EXPOSE 22 80
 ---> Using cache
 ---> 58f11217c3e3
Step 2 :CMD /usr/sbin/sshd -D
 ---> Using cache
 ---> 628c3d6b5399
Step 3 :RUN mkdir -p /run/httpd
 ---> Using cache
 ---> 5fc118f61a4d
Step 4 :CMD /usr/sbin/httpd -D FOREGROUND
 ---> Using cache
 ---> d892acd86198
Successfully built d892acd86198

The command tells us the following:-t repository name from a Dockerfile stored in the current directory (.). এখানেই শেষ. Very simple and elegant.

Test image

Run a new container from the created image. If everything went smoothly, you should have both SSH connectivity, as well as a running Web server in place. Again, all the usual network related rules apply.

Alternative build

Once you have the knowledge how do it on your own, you can try one of the official Apache builds. Indeed, the Docker repository contains a lot of good stuff, so you should definitely invest time checking available templates. For Apache, you only need the following in your Dockerfile - the second like is optional.

FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/

COPY instruction

What do we have above? Basically, in the Dockerfile, we have the declaration what template to use. And then, we have a COPY instructions, which will look for a public-html directory in the current folder and copy it into the container during the build. In the same manner, you can also copy your httpd.conf file. Depending on your distribution, the paths and filenames might differ. Finally, after building the image and running the container:

docker run -ti -p 22 -p 80 image-1:latest
AH00558:httpd:Could not reliably determine the server's fully qualified domain name, using 172.17.0.17. Set the 'ServerName' directive globally to suppress this message
[Thu Apr 16 21:08:35.967670 2015] [mpm_event:notice] [pid 1:tid 140302870259584] AH00489:Apache/2.4.12 (Unix) configured -- resuming normal operations
[Thu Apr 16 21:08:35.976879 2015] [core:notice] [pid 1:tid 140302870259584] AH00094:Command line:'httpd -D FOREGROUND'


Advantages of containers

There are many good reasons why you want to use this technology. But let's just briefly focus on what we gain by running these tiny, isolated instances. Sure, there's a lot happening under the hood, in the kernel, but in general, the memory footprint of spawned containers is fairly small. In our case, the SSH + Apache containers use a tiny fraction of extra memory. Compare this to any virtualization technology.

Problems you may encounter &troubleshooting

Let's go back to the Apache example, and now you will also learn why so many online tutorials sin the sin of copy &pasting information without checking, and why most of the advice is not correct, unfortunately. It has to do with, what do you do if your Apache server seems to die within a second or two after launching the container? Indeed, if this happens, you want to step into the container and troubleshoot. To that end, you can use the docker exec command to attach a shell to the instance.

docker exec -ti boring_mcclintock /bin/bash

Then, it comes down to reading logs and trying to figure out what might have gone wrong. If your httpd.conf is configured correctly, you will have access and error logs under /var/log/httpd:

[auth_digest:error] [pid 25] (2)No such file or directory:AH01762:Failed to create shared memory segment on file /run/httpd/authdigest_shm.25

A typical problem is that you may be a missing /run/httpd directory. If this one does not exist in your container, httpd will start and die. Sounds so simple, but few if any reference mentions this.

While initially playing with containers, I did encounter this issue. Reading online, I found several suggestions, none of which really helped. But I do want to elaborate on them, and how you can make progress in your problem solving, even if intermediate steps aren't really useful.

Suggestion 1:You must use -D FOREGROUND to run Apache, and you must also use ENTRYPOINT rather than CMD. The difference between the two instructions is very subtle. And it does not solve our problem in any way.

ENTRYPOINT ["/usr/sbin/httpd"]
CMD ["-D", "FOREGROUND"]

Suggestion 2:Use a separate startup script, which could work around any issues with the starting or restarting of the httpd service. In other words, the Dockerfile becomes something like this:

...
EXPOSE 80
COPY ./run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh
CMD ["/run-httpd.sh"]

And the contents of the run-httpd.sh script are along the lines of:

#!/bin/bash

rm -rf /run/httpd/*

exec /usr/sbin/apachectl -D FOREGROUND

Almost there. Remove any old leftover PID files, but these are normally not stored under /run/httpd. Instead, you will find them under /var/run/httpd. Moreover, we are not certain that this directory exists.

Finally, the idea is to work around any problems with the execution of a separation shell inside which the httpd thread is spawned. While it does provide us with additional, useful lessons on how to manage the container, with COPY and RUN instructions, it's not what we need to fix the issue.

Step 3 :EXPOSE 80
 ---> Using cache
 ---> 108785c8e507
Step 4 :COPY ./run-httpd.sh /run-httpd.sh
 ---> 582d795d59d4
Removing intermediate container 7ff5b58b40bf
Step 5 :RUN chmod -v +x /run-httpd.sh
 ---> Running in 56fadf4dd2d4
mode of '/run-httpd.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
 ---> 928640f680cf
Removing intermediate container 56fadf4dd2d4
Step 6 :CMD /run-httpd.sh
 ---> Running in f9c6b30795e2
 ---> b2dcc2818a27
Removing intermediate container f9c6b30795e2
Successfully built b2dcc2818a27

This won't work, because apachectl is an unsupported command for managing httpd, plus we have seen problems using startup scripts and utilities earlier, and we will work on fixing this in a separate tutorial.

docker run -ti -p 80 image-2:latest
Passing arguments to httpd using apachectl is no longer supported. You can only start/stop/restart httpd using this script. If you want to pass extra arguments to httpd, edit the /etc/sysconfig/httpd config file.

But it is useful to try these different things, to get the hang of it. Unfortunately, it also highlights the lack of maturity and the somewhat inadequate documentation for this technology out there.

Additional commands

There are many ways you can interact with your container. If you do not want to attach a new shell to a running instance, you can use a subset of docker commands directly against the container ID or name:

docker

For instance, to get the top output from the container:

docker top boring_stallman

If you have too many images, some of which have just been used for testing, then you can remove them to free up some of your disk space. This can be done using the docker rmi command.

# docker rmi -f test7
Untagged:test7:latest
Deleted: d0505b88466a97b73d083434b2dd0e7b59b9a5e8d0438b1bf8c6c
Deleted:5fc118f61bf856f6f3d90e0e71076b737fa7cc58cd56785ea7904
Deleted:628c3d6b53992521c9c1fdda4148693347c3d10b1d130f7e091e7
Deleted:58f11217c3e31206b4e41d07100a797cd4d17e4569b0fdb8b7a18
Deleted:7505c70235e638c54028ea5b63eba2b691de6bee67c2cb5e2861a
...

Then, you can also run your containers in the background. Using the -d flag will do exactly that, and you will get the shell prompt back. This is also useful if you do not mask signals, so if you accidentally break in your shell, you might kill the container when it's running in the foreground.

docker run -d -ti -p 80 image-3:latest

You can also check events, examine changes inside a container's filesystem as well as check history, so you basically have a version control in place, export or import tarred images to and from remote locations, including over the Web, and more.

Differences between exec and attach

If you read through the documentation, you will notice you can connect to a running container using either exec or attach commands. So what's the difference, you may ask? If we look at the official documentation, then:

The docker exec command runs a new command in a running container. The command started using docker exec only runs while the container's primary process (PID 1) is running, and it is not restarted if the container is restarted.

On the other hand, attach gives you the following:

The docker attach command allows you to attach to a running container using the container's ID or name, either to view its ongoing output or to control it interactively. You can attach to the same contained process multiple times simultaneously, screen sharing style, or quickly view the progress of your daemonized process. You can detach from the container (and leave it running) with CTRL-p CTRL-q (for a quiet exit) or CTRL-c which will send a SIGKILL to the container. When you are attached to a container, and exit its main process, the process's exit code will be returned to the client.

In other words, with attach, you will get a shell, and be able to do whatever you need. With exec, you can issue commands that do not require any interaction, but with you use a shell in combination with exec, you will achieve the same result as if you used attach.

Differences between start and run

Start is used to resume the execution of a stopped container. It is not used to start a fresh instance. For that, you have the run command. The choice of words could have been better.

Differences between build and create

The first command is used to create a new image from a Dockerfile. On the other hand, the latter is used to create a new container using command line options and arguments. Create lets you specify container settings, too, like network configurations, resource limitations and other settings, which affect the container from the outside, whereas the changes implemented by the build command will be reflected inside it, once you start an instance. And by start, I mean run. এটা নাও?

This is just a beginning ...

There are a million more things we can do: using systemd enabled containers, policies, security, resource constraints, proxying, signals, other networking and storage options including the super-critical question of how to mount data volumes inside containers so that data does not get destroyed when containers die, additional pure LXC commands, and more. We've barely scratched the surface. But now, we know what to do. And we'll get there. Slowly but surely.

আরো পড়া

I recommend you allocate a few hours and then spend some honest time reading all of the below, in detail. Then practice. This is the only way you will really fully understand and embrace the concepts.

My entire virtualization section

Dockerizing an SSH Deamon Service

Differences between save and export in Docker

Docker Explained:Using Dockerfiles to Automate Building of Images

উপসংহার

We're done with this tutorial for today. Hopefully, you've found it useful. In a nutshell, it does explain quite a few things, including how to get started with Docker, how to pull new images, run basic containers, add services like SSH and Apache, commit changes to a file, expose incoming ports, build new images with Dockerfiles, lots of troubleshooting of problems, additional commands, and more. Eventful and colorful, I'd dare say.

In the future, we will expand significantly on what we learned here, and focus on various helper technologies like supervisord for instance, we will learn how to mount filesystems, work on administration and orchestration, and many other cool things. Docker is a very nice concept, and if used correctly, it can make your virtual world easier and more elegant. The initial few steps are rough, but with some luck, this guide will have provided you with the right dose of karma to get happily and confidently underway. Ping me if you have any requests or desires. Technology related, of course. সম্পন্ন করা হয়েছে.

পুনশ্চ. If you like this article, then you'd better give some love back to Dedoimedo!

চিয়ার্স।


  1. Taming Firefox 4 - বিরক্তিহীন গাইড

  2. KVM ভার্চুয়ালাইজেশনে স্বাগতম - পুঙ্খানুপুঙ্খ ভূমিকা

  3. XenServer + XenCenter পর্যালোচনা

  4. Windows BSOD বিশ্লেষণ - একটি পুঙ্খানুপুঙ্খ ব্যবহারের নির্দেশিকা