ডকার সমাধান:
দেখে মনে হচ্ছে ডকার-কমপোজ 1.5++ ভেরিয়েবল প্রতিস্থাপন সক্ষম করেছে: https://github.com/docker/compose/reLives
সর্বশেষতম ডকার রচনা আপনাকে আপনার রচনা ফাইল থেকে পরিবেশের পরিবর্তনগুলি অ্যাক্সেস করতে দেয়। সুতরাং আপনি আপনার পরিবেশের ভেরিয়েবলগুলি উত্স করতে পারেন, তারপরে এভাবে রচনা করুন:
set -a
source .my-env
docker-compose up -d
তারপরে আপনি ডকার-কমপোজ.মিলের মধ্যে ভেরিয়েবলগুলি $ AR ভারিয়েবল using ব্যবহার করে উল্লেখ করতে পারেন:
db:
image: "postgres:${POSTGRES_VERSION}"
এবং এখানে ডক্স থেকে আরও তথ্য এখানে নেওয়া হয়েছে: https://docs.docker.com/compose/compose-file/#variable-substistance
আপনি যখন এই কনফিগারেশনটির সাথে ডকার-রচনাটি চালান, তখন রচনাটি শেলটির মধ্যে POSTGRES_VERSION পরিবেশের পরিবর্তনশীল সন্ধান করে এবং এর মানটিকে প্রতিস্থাপিত করে this উদাহরণস্বরূপ, রচনাটি কনফিগারেশনটি চালানোর আগে চিত্রটিকে পোস্টগ্র্যাগ: 9.3 এ সমাধান করে।
যদি পরিবেশের পরিবর্তনশীল সেট না করা থাকে তবে একটি ফাঁকা স্ট্রিং সহ বিকল্পগুলি রচনা করুন। উপরের উদাহরণে, যদি POSTGRES_VERSION সেট না করা থাকে তবে চিত্র বিকল্পের মানটি পোস্টগ্রিজ:।
উভয় AR ভেরিয়েবল এবং $ AR ভারিবেল} বাক্য গঠন সমর্থিত। Shell AR ভারিএবল-ডিফল্ট as এবং $ AR ভার্শিয়াল / ফু / বার as এর মতো প্রসারিত শেল-স্টাইল বৈশিষ্ট্যগুলি সমর্থিত নয়।
আপনার যদি কনফিগারেশনের মানটিতে আক্ষরিক ডলার সাইন লাগাতে হয় তবে একটি ডাবল ডলার চিহ্ন ($$) ব্যবহার করুন।
এবং আমি বিশ্বাস করি যে এই বৈশিষ্ট্যটি এই টানার অনুরোধে যুক্ত করা হয়েছিল: https://github.com/docker/compose/pull/1765
বেস সমাধান:
আমি লক্ষ্য করেছি যে ডকের পরিবেশগত ভেরিয়েবল সমর্থন নিয়ে লোকদের সমস্যা রয়েছে। ডকারে এনভায়রনমেন্ট ভেরিয়েবলের সাথে ডিল করার পরিবর্তে, বাশের মতো বেসিকগুলিতে ফিরে যাই! এখানে ব্যাশ স্ক্রিপ্ট এবং একটি .env
ফাইল ব্যবহার করে আরও নমনীয় পদ্ধতি ।
.Env ফাইলের একটি উদাহরণ:
EXAMPLE_URL=http://example.com
# Note that the variable below is commented out and will not be used:
# EXAMPLE_URL=http://example2.com
SECRET_KEY=ABDFWEDFSADFWWEFSFSDFM
# You can even define the compose file in an env variable like so:
COMPOSE_CONFIG=my-compose-file.yml
# You can define other compose files, and just comment them out
# when not needed:
# COMPOSE_CONFIG=another-compose-file.yml
তারপরে এই বাশ স্ক্রিপ্টটি একই ডিরেক্টরিতে চালান, যা সবকিছু সঠিকভাবে স্থাপন করতে হবে:
#!/bin/bash
docker rm -f `docker ps -aq -f name=myproject_*`
set -a
source .env
cat ${COMPOSE_CONFIG} | envsubst | docker-compose -f - -p "myproject" up -d
আপনার রচনা ফাইলটিতে কেবল আপনার এনভিভ ভেরিয়েবলগুলি সাধারণ ব্যাশ সিনট্যাক্সের (যেমন ফাইল থেকে ${SECRET_KEY}
সন্নিবেশ করানোর জন্য ) সাথে উল্লেখ করুন।SECRET_KEY
.env
নোটটি COMPOSE_CONFIG
আমার .env
ফাইলে সংজ্ঞায়িত করা হয়েছে এবং আমার ব্যাশ স্ক্রিপ্টে ব্যবহৃত হয়েছে তবে আপনি সহজেই ব্যাশ স্ক্রিপ্টের {$COMPOSE_CONFIG}
সাথে প্রতিস্থাপন করতে পারেন my-compose-file.yml
।
এছাড়াও নোট করুন যে আমি আমার সমস্ত পাত্রে "মাইপ্রজেক্ট" উপসর্গের সাথে নাম রেখে এই স্থাপনার লেবেল করেছি। আপনি যে কোনও নাম ব্যবহার করতে পারেন তবে এটি আপনার পাত্রে সনাক্ত করতে সহায়তা করে যাতে আপনি পরে এগুলি সহজেই উল্লেখ করতে পারেন। আপনার ধারকরা রাষ্ট্রহীন, ধরে নেওয়া উচিত যে সেগুলি হওয়া উচিত, এই স্ক্রিপ্টটি আপনার .env ফাইল প্যারাম এবং আপনার রচনা YAML ফাইল অনুযায়ী আপনার পাত্রে দ্রুত মুছে ফেলা এবং পুনরায় প্রচার করবে।
আপডেট
যেহেতু এই উত্তরটি বেশ জনপ্রিয় বলে মনে হচ্ছে, তাই আমি একটি ব্লগ পোস্ট লিখেছিলাম যা আমার ডকার মোতায়েনের কর্মপ্রবাহকে আরও গভীরতার সাথে বর্ণনা করে: http://lukeswart.net/2016/03/lets-deploy-part-1/ আপনি যুক্ত করার পরে এটি সহায়ক হতে পারে ডিগ্রি কনফিগারেশন, এনগিনেক্স কনফিগারেশন, লেটসেক্রিপ্ট সার্টস এবং লিঙ্কযুক্ত ধারকগুলির মতো আরও জটিলতা।