আমি এমন একটি ডকফাইল তৈরি করছি যা একটি কাস্টম অ্যাপ্লিকেশন চালায় যা জাভার নির্দিষ্ট সংস্করণে আবদ্ধ।
আমি সেন্টোস 7 বেস ইমেজটি ব্যবহার করছি কারণ আমি যে নিবন্ধটি উল্লেখ করছিলাম সেটি ব্যবহার করছিলাম এবং কারণ আমাকে কিছু ব্যবহার করতে হবে, এটি যে কোনও হিসাবে ভাল। আমি কোন ইউজারল্যান্ড ব্যবহার করছি তা আমি সত্যই যত্নশীল নই। এই চিত্রটির মূল বিষয় হল সফ্টওয়্যারটি হোস্ট করা হচ্ছে, লিনাক্স বিতরণ নিজেই কেবল একটি সমাপ্তির মাধ্যম - গুরুত্বপূর্ণভাবে, জেডিকে অন্যান্য অ্যাপ্লিকেশন বা ব্যবহারকারীরা ব্যবহার করবেন না।
যেমনটি বলা হয়েছে, আমার অ্যাপ্লিকেশনটি জাভাটির নির্দিষ্ট সংস্করণের সাথে আবদ্ধ যা আমি ব্যবহার করছি - জাভা সংস্করণের যে কোনও আপডেটের জন্য সফ্টওয়্যারটি প্রকাশের আগে সেই নির্দিষ্ট সংস্করণ সহ একটি সম্পূর্ণ রিগ্রেশন টেস্টের প্রয়োজন হবে।
আমি যে নিবন্ধটি অনুসরণ করছিলাম সেটি প্রাসঙ্গিক ডকফেরফিল জেডিকে ইনস্টলের অংশগুলির মতো দেখতে শুরু হয়েছিল:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
এটি যথেষ্ট সুনির্দিষ্ট নয়, যেকোন সময় চিত্রগুলি তৈরি হবে এটি জাভার একটি এলোমেলো সংস্করণ পাবে, যা আমি চাই না, আমার জাভাটির একটি নির্দিষ্ট সংস্করণ প্রয়োজন।
আমি দেখতে ডকার ফাইলটি পরিবর্তন করেছি:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7 \
&& yum clean all
এবং ডকারের চিত্রটি ভাল তৈরি করছিল। সেটা ছিল ডিসেম্বরে।
এই সপ্তাহে, আমার সফ্টওয়্যারটির একটি আলাদা অংশে একটি ছোট পরিবর্তন করার প্রয়োজন ছিল এবং চিত্রটির একটি নতুন সংস্করণ পুনর্নির্মাণ করা প্রয়োজন, তবে চিত্র তৈরি এখন ব্যর্থ হয়েছে।
বিল্ডটি এখন ব্যর্থ হয়েছে কারণ জাভা প্যাকেজের সেই নির্দিষ্ট সংস্করণটি আর উপলভ্য নয় (কমপক্ষে, আমি মনে করি এটিই আমাকে বলছে):
Error: Package: 1:java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64 (base)
Requires: java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Available: 1:java-1.8.0-openjdk-headless-1.8.0.65-3.b17.el7.x86_64 (base)
java-1.8.0-openjdk-headless = 1:1.8.0.65-3.b17.el7
Installing: 1:java-1.8.0-openjdk-headless-1.8.0.71-2.b15.el7_2.x86_64 (updates)
java-1.8.0-openjdk-headless = 1:1.8.0.71-2.b15.el7_2
আমি কীভাবে আমার ডকফিলিলটি পুনর্নির্মাণ করব যাতে আমি সর্বদা জাভার নির্দিষ্ট সংস্করণটি ব্যবহার করতে পারি (উদাহরণস্বরূপ, আমি চাই জাভাটির সংস্করণটি 1.8.0 আপডেট 65 হবে)?
একটি নেতিবাচক উত্তরটি ঠিক আছে - যদি সাধারণভাবে বিভিন্ন লিনাক্স প্যাকেজিং প্রক্রিয়াগুলি না চায় তবে লোকেরা তাদের সংগ্রহস্থলগুলি এর মতো ব্যবহার করতে পারে, ঠিক আছে - আমি জেডিকে আমার নিজের সংস্করণটি একটি জিপ ফাইল হিসাবে সর্বদা প্যাকেজ করতে পারি এবং কেবল যে কোনও জায়গায় এটি আনপ্যাক করব can চিত্রটি নির্মাণের অংশ হিসাবে পরিবেশ, তবে এটি এমন এক ঝামেলা যা আমি করতে পছন্দ করি না।
অন্য লোকেরা কীভাবে এটি করে? জেডিকে ইনস্টল করার কি অন্য উপায় আছে যাতে আমার সর্বশেষ আপডেটগুলি (এফআরওএম ক্লজ এবং ইয়ম আপডেটে বেস ইমেজ দ্বারা সংজ্ঞায়িত) সহ ওএস ডিস্ট্রিবিউশনটির সাম্প্রতিক সংস্করণটি পাওয়া যায় তবে জেডিকে একটি নির্দিষ্ট সংস্করণ ইনস্টল করতে পারি?
এই ধরণের প্রয়োজনীয়তার জন্য কি লিনাক্স সংস্করণটি আরও উপযুক্ত (আমি সেন্টোসে বিবাহিত নই, ইউজারল্যান্ড লিনাক্স বিতরণ আমার পক্ষে বিশেষ গুরুত্বপূর্ণ নয়)?
yum install -y $package --disablerepo=updates