আমি একটি বিচ্ছিন্ন পরিবেশ তৈরি জন্য Vagrant বা ডকার ব্যবহার করা উচিত?




docker (7)

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

আমি এই উদ্দেশ্যে Vagrant বা ডকার বিবেচনা করছি। পেশাদার এবং বিপরীত কি, বা কিভাবে এই সমাধান তুলনা করবেন?


Vagrant (এবং Puppet) এর সাথে মিল রেখে ডকার ব্যবহার করার বিষয়ে প্রকৃত ওকলাল জাভা পত্রিকায় প্রকৃতপক্ষে একটি তথ্যপূর্ণ নিবন্ধ রয়েছে:

উপসংহার

ডকারের লাইটওয়েট কন্টেনারগুলি ক্লাসিক ভিএমগুলির তুলনায় দ্রুততর এবং ডেভেলপারদের মধ্যে এবং সিডি এবং ডেভপসের উদ্যোগের অংশ হিসাবে জনপ্রিয় হয়ে উঠেছে। আপনার উদ্দেশ্য বিচ্ছিন্নতা হয়, ডকার একটি চমৎকার পছন্দ। Vagrant একটি ভিএম ম্যানেজার যা আপনাকে পৃথক ভিএমগুলির কনফিগারেশনগুলি স্ক্রিপ্ট করতে এবং সেইসাথে সংস্থানগুলি করতে সক্ষম করে। যাইহোক, এটি ভার্চুয়ালবক্স (অথবা অন্য ভিএম ম্যানেজার) উপর অপেক্ষাকৃত বড় ওভারহেডের উপর নির্ভরশীল একটি ভিএম। এটির জন্য একটি হার্ড ড্রাইভ নিষ্ক্রিয় করা প্রয়োজন যা বিশাল হতে পারে, এতে প্রচুর RAM লাগে এবং কর্মক্ষমতা উপপাদ্য হতে পারে। Docker LXC এর মাধ্যমে কার্নেল cgroups এবং namespace বিচ্ছিন্নতা ব্যবহার করে। এর অর্থ হল আপনি একই কার্নেলটি হোস্ট এবং একই আইল সিস্টেম হিসাবে ব্যবহার করছেন। Vagrant বিমূর্ততা পদ Docker উপরে একটি স্তর, তাই তারা সত্যিই তুলনীয় হয় না। যেমন পুতুল হিসাবে কনফিগারেশন ম্যানেজমেন্ট সরঞ্জাম ব্যাপকভাবে provisioning টার্গেট পরিবেশের জন্য ব্যবহার করা হয়। বিদ্যমান পুতুল-ভিত্তিক সমাধান পুনঃব্যবহার ডকার সঙ্গে সহজ। আপনি আপনার সমাধান স্লাইস করতে পারেন, তাই অবকাঠামো Puppet সঙ্গে ব্যবস্থা করা হয়; মিডলওয়্যার, ব্যবসা আবেদন নিজেই, বা উভয় ডকার সঙ্গে বিধান করা হয়; এবং ডকার Vagrant দ্বারা আবৃত করা হয়। সরঞ্জামের এই পরিসরের সাথে, আপনি আপনার দৃশ্যকল্পের জন্য যা ভাল তা করতে পারেন।

DevOps এ ডকার কনটেইনারগুলি কীভাবে নির্মাণ, ব্যবহার এবং অর্কেস্ট্র করবেন http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0


Vagrant সঙ্গে এখন আপনি একটি প্রদানকারী হিসাবে ডকার থাকতে পারে। http://docs.vagrantup.com/v2/docker/ । ডকার প্রদানকারীর পরিবর্তে ভার্চুয়ালবক্স বা ভিএমওয়্যার ব্যবহার করা যেতে পারে।

আপনি Vagrant সঙ্গে বিধান জন্য ডকার ব্যবহার করতে পারেন দয়া করে নোট করুন। এটি একটি প্রদানকারী হিসাবে ডকার ব্যবহার করার চেয়ে অনেক ভিন্ন। docs.vagrantup.com/v2/provisioning/docker.html

এই আপনি ডকার সঙ্গে Chef বা Puppet প্রতিস্থাপন করতে পারেন মানে। আপনি সরবরাহকারী হিসাবে শেফ সঙ্গে ডকার হিসাবে প্রদানকারী (ভিএম) মত সমন্বয় ব্যবহার করতে পারেন। অথবা আপনি প্রভিশার হিসাবে সরবরাহকারী এবং ডকার হিসাবে ভার্চুয়ালবক্স ব্যবহার করতে পারেন।


আমি ডকারের লেখক।

সংক্ষিপ্ত উত্তর হল যে যদি আপনি মেশিন পরিচালনা করতে চান, আপনি Vagrant ব্যবহার করা উচিত। এবং যদি আপনি অ্যাপ্লিকেশন পরিবেশগুলি তৈরি এবং চালাতে চান তবে আপনাকে ডকার ব্যবহার করতে হবে।

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

এটি একটি সাধারণ ভুল ধারণা যে আপনি শুধুমাত্র লিনাক্সে ডকার ব্যবহার করতে পারেন। এটা ভুল আপনি ম্যাক, এবং উইন্ডোজ এ ডকার ইনস্টল করতে পারেন। ম্যাক এ ইনস্টল করার সময়, ডকার একটি ছোট লিনাক্স ভিএম (ডিস্কে 25 মেগাবাইট!) বান্ডিল করে যা আপনার ধারকটির জন্য মোড়ক হিসাবে কাজ করে। ইনস্টল একবার এই সম্পূর্ণ স্বচ্ছ হয়; আপনি ঠিক একই ভাবে ডকার কমান্ড লাইন ব্যবহার করতে পারেন। এটি আপনাকে উভয় বিশ্বের সেরা সরবরাহ করে: আপনি পাত্রে ব্যবহার করে আপনার অ্যাপ্লিকেশনটি পরীক্ষা এবং বিকাশ করতে পারেন, যা খুব লাইটওয়েট, পরীক্ষা করা সহজ এবং কাছাকাছি যেতে সহজ (উদাহরণস্বরূপ https://hub.docker.com পুনঃব্যবহারযোগ্য পাত্রে ভাগ করার জন্য দেখুন ডকার কমিউনিটির), এবং আপনাকে ভার্চুয়াল মেশিনগুলি পরিচালনার বিচিত্র বিবরণগুলি সম্পর্কে চিন্তা করতে হবে না, যা কোনও উপায়ে শেষ হওয়ার উপায়।

তত্ত্বের মধ্যে ডকারের জন্য একটি বিমূর্তকরণ স্তর হিসাবে Vagrant ব্যবহার করা সম্ভব। আমি দুটি কারণে এইরকম সুপারিশ করছি:

  • প্রথমত, ভোগার ডকারের জন্য একটি ভাল বিমূর্ততা নয়। Vagrant ভার্চুয়াল মেশিন পরিচালনা করার জন্য ডিজাইন করা হয়েছে। ডকার একটি অ্যাপ্লিকেশন রানটাইম পরিচালনা করার জন্য ডিজাইন করা হয়েছে। এর অর্থ ডকার, নকশা দ্বারা, একটি অ্যাপ্লিকেশনের সাথে সমৃদ্ধ উপায়ে যোগাযোগ করতে পারে এবং অ্যাপ্লিকেশান রানটাইম সম্পর্কে আরও তথ্য রয়েছে। ডকারের প্রাইমাইটিভ প্রসেস, লগ স্ট্রিমস, পরিবেশ ভেরিয়েবল এবং উপাদানগুলির মধ্যে নেটওয়ার্ক লিঙ্কগুলি। Vagrant মধ্যে primitives মেশিন, ব্লক ডিভাইস, এবং ssh কী। Vagrant সহজে স্ট্যাকের নিচে বসতে পারে, এবং এটি একটি পাত্রে সঙ্গে একযোগে যোগাযোগ করতে পারে একমাত্র উপায় এটি একটি অন্য ধরনের মেশিনের ভান করে, যে আপনি "বুট" এবং "লগ ইন" করতে পারেন। সুতরাং, নিশ্চিত, আপনি একটি ডকার প্লাগইন দিয়ে "ভানেন্ট আপ আপ" টাইপ করতে পারেন এবং চমত্কার কিছু ঘটবে। ডকার কী করতে পারে তার পুরো প্রস্থে এটি একটি বিকল্প? কয়েক দিনের জন্য নেটিভ ডকারের চেষ্টা করুন এবং নিজের জন্য দেখুন :)

  • দ্বিতীয়, লক ইন যুক্তি। "আপনি Vagrant একটি বিমূর্তকরণ হিসাবে ব্যবহার করলে, আপনি ডকার মধ্যে লক করা হবে না!"। ভ্যাগ্রেন্টের দৃষ্টিকোণ থেকে, যা যন্ত্রগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছে, এটি নিখুঁত ধারণা তৈরি করে: কেবল অন্য ধরণের মেশিনের পাত্রে নয়? অ্যামাজন ইসি 2 এবং ভিএমওয়্যারের মতোই, আমাদের অবশ্যই আমাদের সংস্থান সরঞ্জামগুলিকে কোনো বিশেষ বিক্রেতার সাথে সংযুক্ত করতে সাবধান হবেনা! এটি লক-ইন তৈরি করবে - এটিকে ভালগ্রাসের সাথে সরাতে আরও ভাল করে তুলবে। এই ছাড়া ডকার সম্পূর্ণরূপে বিন্দু মিস্। ডকার মেশিন সরবরাহ না; এটি একটি লাইটওয়েট পোর্টেবল রানটাইম আপনার অ্যাপ্লিকেশন wraps যা কোথাও বাদ দেওয়া যেতে পারে।

আপনি আপনার অ্যাপ্লিকেশন জন্য চয়ন রানটাইম আপনি আপনার মেশিনের ব্যবস্থা কিভাবে সঙ্গে কিছুই করার আছে! উদাহরণস্বরূপ এটি অন্য কোনও সংস্থার দ্বারা সরবরাহিত মেশিনে অ্যাপ্লিকেশনগুলি স্থাপন করার জন্য বেশ ঘন ঘন (উদাহরণস্বরূপ আপনার সিস্টেম প্রশাসক দ্বারা সজ্জিত EC2 ইনস্ট্যান্স, সম্ভবত Vagrant ব্যবহার করে), বা বেয়ার মেটাল মেশিনগুলিতে যা Vagrant কোনও সংস্থান করতে পারে না। বিপরীতভাবে, আপনি Vagrant ব্যবহার করতে পারেন এমন সংস্থান মেশিনগুলিতে যা আপনার অ্যাপ্লিকেশন বিকাশের সাথে কিছু করার নেই - উদাহরণস্বরূপ একটি ব্যবহারযোগ্য উইন্ডোজ আইআইএস বক্স বা কিছু। অথবা আপনি ডাগার ব্যবহার না করে এমন প্রকল্পের জন্য সংস্থান মেশিনগুলিতে ভ্যাগেন্ট ব্যবহার করতে পারেন - উদাহরণস্বরূপ তারা নির্ভরশীলতা ব্যবস্থাপনা এবং স্যান্ডবক্সিংয়ের জন্য রুবিজেম এবং RVM এর সমন্বয় ব্যবহার করে।

সারাংশ: Vagrant মেশিন পরিচালনার জন্য, এবং ডকার বিল্ডিং এবং চলমান অ্যাপ্লিকেশন পরিবেশের জন্য হয়।


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

আমি Vagrant সঙ্গে অভিজ্ঞতা একটি শালীন পরিমাণ আছে এবং অত্যন্ত এটি সুপারিশ করতে পারেন। এটি অবশ্যই LXC ভিত্তিক ভিএম ভিত্তিক একটি ভারী ওজনের সমাধান। যাইহোক, আমি একটি উপযুক্ত ল্যাপটপ খুঁজে পেয়েছি (8 গিগাবাইট RAM, i5 / i7 CPU) ডেভেলপমেন্ট টুলিংয়ের পাশাপাশি Vagrant / VirtualBox ব্যবহার করে VM চালানোর কোন সমস্যা নেই।

Vagrant সঙ্গে সত্যিই মহান জিনিস এক স্বয়ংক্রিয়ভাবে কনফিগারেশন জন্য Puppet / Chef / শেল স্ক্রিপ্ট সঙ্গে ইন্টিগ্রেশন। আপনি যদি আপনার উত্পাদন পরিবেশটি কনফিগার করতে এই বিকল্পগুলির মধ্যে একটি ব্যবহার করেন তবে আপনি এমন একটি ডেভেলপমেন্ট পরিবেশ তৈরি করতে পারেন যা আপনি পেতে যাচ্ছেন তার সমান কাছাকাছি, এবং আপনি যা চান তা ঠিক।

Vagrant সঙ্গে অন্য দুর্দান্ত জিনিস আপনি আপনার অ্যাপ্লিকেশন কোড বরাবর আপনার Vagrantfile সংস্করণ করতে পারেন। এর অর্থ হল আপনার দলের অন্য সবাই এই ফাইলটি ভাগ করে নিতে পারে এবং আপনি নিশ্চিত যে সবাই একই পরিবেশ কনফিগারেশনের সাথে কাজ করছে।

Interestingly, Vagrant এবং ডকার আসলে প্রশংসাসূচক হতে পারে। Vagrant বিভিন্ন ভার্চুয়ালাইজেশন প্রদানকারীর সমর্থন করার জন্য বর্ধিত করা যেতে পারে, এবং এটি সম্ভব যে ডকার একটি এমন প্রদানকারী যা নিকট ভবিষ্যতে সহায়তা পায়। বিষয়টির সাম্প্রতিক আলোচনার জন্য https://github.com/dotcloud/docker/issues/404 দেখুন।


তারা খুব পরিপূরক।

আমি বেশ কয়েক মাস ধরে আমার সমস্ত প্রকল্পগুলির জন্য ভার্চুয়ালবক্স, ভ্যাগেন্ট এবং ডকারের সমন্বয় ব্যবহার করছি এবং দৃঢ়ভাবে নিম্নলিখিত সুবিধাগুলি অনুভব করেছি।

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

এখানে একটি সাধারণ Vagrantfile হয়

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "mark2"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  [3000, 5000, 2345, 15672, 5672, 15674, 27017, 28017, 9200, 9300, 11211, 55674, 61614, 55672, 5671, 61613].each do |p|
    config.vm.network :forwarded_port, guest: p, host: p
  end
  config.vm.network :private_network, ip: "192.168.56.20"
  config.vm.synced_folder ".", "/vagrant", :type => "nfs"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
  end
  # Bootstrap to Docker
  config.vm.provision :shell, path: "script/vagrant/bootstrap", :privileged => true
  # Build docker containers
  config.vm.provision :shell, path: "script/vagrant/docker_build", :privileged => true
  # Start containers
  # config.vm.provision :shell, path: "script/vagrant/docker_start", :privileged => true
end

বুটস্ট্র্যাপ ফাইল যে ডকার ইনস্টল করে এই মত দেখায়

#!/usr/bin/env bash
echo 'vagrant  ALL= (ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
apt-get update -y
apt-get install htop -y
apt-get install linux-image-extra-`uname -r` -y
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install lxc-docker -y
apt-get install curl -y

এখন আমার যে সমস্ত পরিষেবাদি চলছে তা পেতে আমার একটি ডকার_আউট স্ক্রিপ্ট রয়েছে যা এইরকম কিছু দেখায়

#!/bin/bash
cd /vagrant
echo Starting required service containers
export HOST_NAME=192.168.56.20
# Start MongoDB
docker run --name=mongodb --detach=true --publish=27017:27017 --publish=28017:28017 dockerfile/mongodb
read -t5 -n1 -r -p "Waiting for mongodb to start..." key
# Start rabbitmq
docker run --name=rabbitmq --detach=true --publish=5671:5671 --publish=5672:5672 --publish=55672:55672 --publish=15672:15672 --publish=15674:15674 --publish=61613:61613 --env RABBITMQ_USER=guest --env RABBITMQ_PASS=guest rabbitmq
read -t5 -n1 -r -p "Waiting for rabbitmq to start..." key
# Start cache
docker run --name=memcached --detach=true --publish=11211:11211  ehazlett/memcached
read -t5 -n1 -r -p "Waiting for cache to start..." key
# Start elasticsearch
docker run --name=elasticsearch --detach=true --publish=9200:9200 --publish=9300:9300 dockerfile/elasticsearch
read -t5 -n1 -r -p "Waiting for elasticsearch to start..." key
echo "All services started"

এই উদাহরণে আমি মংডোডি, এলাস্টিসার্চ, রবিট এমকিউ এবং মেমচ্যাড চালাচ্ছি

একটি নন-ডকার শেফ একাকী কনফিগারেশন বেশ জটিল হবে।

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

আপনি যদি আগ্রহী হন তবে আমার নিজের ওয়েব সাইটে ডেভেলপমেন্ট পরিবেশ সম্পর্কে আরো বিস্তারিত নিবন্ধ রয়েছে

একটি Vagrant / ডকার উন্নয়ন পরিবেশ বাস্তবায়ন


Vagrant-lxc জন্য একটি প্লাগইন যা Vagrant সরবরাহ করার জন্য আপনি LXC ব্যবহার করতে দিন। ডিফল্ট ভার্চুয়াল ভিএম (ভার্চুয়ালবক্স) এর সমস্ত বৈশিষ্ট্যগুলিতে এটির বৈশিষ্ট্য নেই তবে এটি ডকার কন্টেইনারগুলির চেয়ে আরও বেশি নমনীয়তা আপনাকে দিতে হবে। লিঙ্কটিতে একটি ভিডিও রয়েছে যা তার যোগ্যতা দেখানোর যোগ্য।


নিশ্চিতভাবে ডক্কার জয়!

আপনি Vagrant ভার্চুয়াল মেশিন পরিচালনার জন্য যখন Docker সফ্টওয়্যার পাত্রে পরিচালনার জন্য জানি হতে পারে। আপনি যদি পার্থক্য সম্পর্কে সচেতন না হন, তবে এখানে: একটি সফ্টওয়্যার ধারক একই যন্ত্র এবং কার্নেলকে অন্যান্য সফ্টওয়্যার কন্টেইনারগুলির সাথে ভাগ করতে পারে। কন্টেইনারগুলি ব্যবহার করে আপনি অর্থ সংরক্ষণ করেন কারণ আপনি একাধিক অপারেটিং সিস্টেম (কার্নেল) -এ সম্পদগুলি নষ্ট করেন না, আপনি পৃথক পৃথক বিচ্ছিন্নতা রেখে সার্ভার প্রতি আরো সফ্টওয়্যার প্যাক করতে পারেন।

অবশ্যই তার নিজস্ব pitfals এবং চ্যালেঞ্জ যত্ন একটি নতুন শৃঙ্খলা।

আপনার প্রয়োজনীয়তা একক মেশিন সম্পদ সীমা ক্রস যদি ডকার Swarm জন্য যান।





docker