ডকারের ধারকটির চিত্র পরিবর্তন হওয়ার পরে কীভাবে আপগ্রেড করবেন


518

ধরা যাক আমি সরকারী মাইএসকিএল: 5.6.21 চিত্রটি টানছি

আমি বেশ কয়েকটি ডকার পাত্রে তৈরি করে এই চিত্রটি স্থাপন করেছি।

মাইএসকিউএল 5.6.22 প্রকাশ না হওয়া পর্যন্ত এই পাতাগুলি কিছু সময়ের জন্য চলছে। মাইএসকিএল-এর আনুষ্ঠানিক চিত্র: নতুন প্রকাশের সাথে 5.6 আপডেট হয় তবে আমার পাত্রে এখনও 5.6.21 চলছে run

আমি কীভাবে আমার বিদ্যমান সমস্ত পাত্রে চিত্রটিতে পরিবর্তনগুলি (যেমন মাইএসকিউএল ডিগ্রো আপগ্রেড করব) প্রচার করব? এটি করার সঠিক ডকার উপায় কী?

উত্তর:


578

উত্তরগুলি মূল্যায়ন করার পরে এবং বিষয়টি অধ্যয়নের পরে আমি সংক্ষেপে বলতে চাই।

পাত্রে আপগ্রেড করার ডকার উপায়টি নিম্নলিখিত বলে মনে হচ্ছে:

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

docker pull mysql
docker stop my-mysql-container
docker rm my-mysql-container
docker run --name=my-mysql-container --restart=always \
  -e MYSQL_ROOT_PASSWORD=mypwd -v /my/data/dir:/var/lib/mysql -d mysql

আপনি হোস্টে (ভলিউম হিসাবে মাউন্ট করা ডিরেক্টরিতে) বা বিশেষ ডেটা-কেবল পাত্রে (গুলি) ডেটা সঞ্চয় করতে পারেন । এটি সম্পর্কে আরও পড়ুন

ধারকগুলির মধ্যে অ্যাপ্লিকেশনগুলি আপগ্রেড করা (যেমন। Yum / apt-get আপগ্রেড সহ) একটি এন্টি-প্যাটার্ন হিসাবে বিবেচিত হয় । অ্যাপ্লিকেশন পাত্রে অপরিবর্তনীয় বলে মনে করা হয় , যা পুনরুত্পাদনযোগ্য আচরণের গ্যারান্টি দেয়। কিছু অফিসিয়াল অ্যাপ্লিকেশন চিত্র (বিশেষত মাইএসকিএল: 5.6) এমনকি স্ব-আপডেট করার জন্য ডিজাইন করা হয়নি (অ্যাপটি-আপগ্রেড আপগ্রেড কাজ করবে না)।

যারা তাদের উত্তর দিয়েছেন তাদের আমি ধন্যবাদ জানাতে চাই, যাতে আমরা সমস্ত ভিন্ন পন্থা দেখতে পারি।


31
যদি ডেটা মাইগ্রেশন প্রয়োজন হয়? নতুন সার্ভারটি ডেটা মাউন্ট করতে পারে না কারণ এটি পুরানো ফর্ম্যাটে রয়েছে, এটি একটি স্থানান্তর ঘটছে তা জানতে হবে এবং ডেটার উপস্থাপনা পরিবর্তন করতে হবে।
ডোর রটম্যান

12
আমি মনে করি, চিত্র ডিজাইনারদের উচিত এটির জন্য অ্যাকাউন্টিং করা এবং কন্টেইনারটির প্রথম রান করার সময় কাস্টম (যেমন, ডেটা মাইগ্রেশন) কমান্ড চালু করার অনুমতি দেওয়া উচিত ing
ইয়ারোস্লাভ স্টাভিনিচি 19

2
একটি প্রাসঙ্গিক নিবন্ধ: intercityup.com/blog/running-upgrading-mysql-server-docker
ডোর রটম্যান

4
@ স্ট্যাটিক_আরটি docker rename my-mysql-container trash-containerনতুন তৈরির আগে কেমন ?
ফ্রাঙ্কলিন ইউ

4
কন্টেইনারটি ম্যানুয়ালি না থামিয়ে, মুছে ফেলা এবং আবার এটি তৈরি করে (নতুন ছবিটি যা টানা হয়েছে তার উপর ভিত্তি করে) আপডেট করার জন্য কি অল-ইন-ওয়ান কমান্ড থাকবে?
মিশাল পেরিন

83

আমি হোস্ট ডিরেক্টরিতে লিঙ্ক হিসাবে মাউন্ট ভলিউম পছন্দ করি না, তাই আমি সম্পূর্ণ ডকার পরিচালিত কনটেইনার সহ ডকার পাত্রে উন্নীত করার জন্য একটি প্যাটার্ন নিয়ে এসেছি। এর সাথে একটি নতুন ডকার ধারক তৈরি করা নতুন কন্টেইনারটিকে --volumes-from <container>আপডেট ইমেজ সহ ডকার পরিচালিত ভলিউমের মালিকানা দেবে।

docker pull mysql
docker create --volumes-from my_mysql_container [...] --name my_mysql_container_tmp mysql

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

এই মুহুর্তে, আমি সাধারণত কিছু ভুল হয়ে যাওয়ার পরে নিজেকে সুরক্ষার জাল দেওয়ার জন্য ধারকটির কাছে আমার কাছে থাকা সমস্ত ব্যাকআপ স্ক্রিপ্টগুলি চালাব

docker stop my_mysql_container
docker start my_mysql_container_tmp

এখন আপনার কাছে নতুন ধারকটিতে যে ডেটা থাকার কথা রয়েছে তা নিশ্চিত করার এবং স্যানিটি চেক চালানোর সুযোগ পাবেন।

docker rm my_mysql_container
docker rename my_mysql_container_tmp my_mysql_container

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

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


3
কেন আপনি ডকারের ধারক মধ্যে হোস্ট ভলিউম মাউন্ট করতে পছন্দ করেন না? (আমি অবিকল করছি যাতে আমি করছেন বিরুদ্ধে আর্গুমেন্ট আগ্রহী: -) আমি করেছি মাউন্ট উদাহরণ: ./postgres-data/:/var/lib/postgres/data- অর্থাৎ হোস্ট Dir মাউন্ট ./postgres-data/, আমার পোস্টগ্রি ধারক ভিতরে)।
KajMagnus

4
@ কাজম্যাগনাস আমি ডকার প্রচুর ঝাঁক ব্যবহার করি এবং আমি আমার পাত্রে একটি ঝুলিতে ভালভাবে কাজ করতে লিখতে পছন্দ করি। যখন আমি একটি ঝাঁকিতে একটি ধারক স্পিন করি তখন আমার কোন ধারণাগুলি নেই যে কোন ঝাঁক নোড কনটেইনারটি বেঁচে চলেছে, তাই আমি যে ডেটা চাই তা সম্বলিত হোস্ট পাথের উপর নির্ভর করতে পারি না। যেহেতু ডকার ১.৯ (আমার মনে হয়) ভলিউমগুলি হোস্টগুলিতে ভাগ করা যায় যা আমার বর্ণিত পদ্ধতিটি ব্যবহার করে ধারকগুলিকে আপগ্রেড এবং মাইগ্রেট করে তোলে ree একটি বিকল্পের মধ্যে নিশ্চিত হওয়া দরকার যে সমস্ত সোর্ম নোডগুলিতে কিছু নেটওয়ার্ক ভলিউম মাউন্ট করা আছে তবে এটি বজায় রাখার জন্য বিশাল ব্যথা বলে মনে হচ্ছে।
মাইস্মিথ

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

32

কেবলমাত্র আরও সাধারণ (মাইএসকিএল নির্দিষ্ট নয়) উত্তর দেওয়ার জন্য ...

  1. সংক্ষেপে

পরিষেবাদি চিত্র নিবন্ধের সাথে সিঙ্ক্রোনাইজ করুন ( https://docs.docker.com/compose/compose-file/#image ):

docker-compose pull 

ডকার-রচনা ফাইল বা চিত্র পরিবর্তিত হলে ধারক পুনরুদ্ধার করুন:

docker-compose up -d
  1. পটভূমি

ডকার-কমপোজ ব্যবহারের জন্য কনটেইনার ইমেজ ম্যানেজমেন্ট অন্যতম কারণ ( https://docs.docker.com/compose/references/up/ দেখুন )

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

মাউন্ট করা বাহ্যিক "ভলিউম" ( https://docs.docker.com/compose/compose-file/#volume দেখুন ) বা ডেটা ধারক মাধ্যমে ডেটা ম্যানেজমেন্ট দিকটি ডকার-রচনা দ্বারা আচ্ছাদিত ।

এটি সম্ভাব্য পশ্চাদগম্য সামঞ্জস্যতা এবং ডেটা মাইগ্রেশন সম্পর্কিত সমস্যাগুলি ছোঁয়াচে ফেলেছে, তবে এগুলি "প্রয়োগকারী" সমস্যা, ডকার নির্দিষ্ট নয়, যা রিলিজ নোট এবং পরীক্ষার বিরুদ্ধে পরীক্ষা করতে হবে ...


সংস্করণ দিয়ে আপনি এটি কীভাবে করেন? উদাহরণস্বরূপ নতুন চিত্রটি ফু / চিত্র: 2 এবং ডকার-কমপোজ.আইএমএল এর চিত্র আছে: ফু / চিত্র: 1?
dman

ধন্যবাদ. সেরা উত্তর!
মিক

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

23

আমি যুক্ত করতে চাই যে আপনি যদি এই প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে করতে চান (@ ইয়ারোস্লাভ বর্ণিত একই সেটিংস সহ একটি নতুন ধারক ডাউনলোড, থামান এবং পুনরায় চালু করতে চান) আপনি ওয়াচটাওয়ারটি ব্যবহার করতে পারেন। এমন একটি প্রোগ্রাম যা আপনার পাত্রে https://github.com/v2tec/watchtower পরিবর্তন করা হয় তখন স্বয়ংক্রিয়ভাবে আপডেট হয়


20

এই উত্তরগুলির জন্য বিবেচনা করুন:

  • ডাটাবেস নাম app_schema
  • ধারকটির নাম app_db
  • মূল পাসওয়ার্ডটি হ'ল root123

ধারকের ভিতরে অ্যাপ্লিকেশন ডেটা সংরক্ষণ করার সময় কীভাবে মাইএসকিউএল আপডেট করবেন

এটি একটি খারাপ অনুশীলন হিসাবে বিবেচনা করা হয় , কারণ আপনি যদি ধারকটি হারিয়ে ফেলেন তবে আপনি ডেটা হারাবেন। যদিও এটি একটি খারাপ অনুশীলন, এটি করার সম্ভাব্য উপায় এখানে:

1) এসকিউএল হিসাবে একটি ডাটাবেস ডাম্প করুন:

docker exec app_db sh -c 'exec mysqldump app_schema -uroot -proot123' > database_dump.sql

2) চিত্র আপডেট করুন:

docker pull mysql:5.6

3) ধারক আপডেট করুন:

docker rm -f app_db
docker run --name app_db --restart unless-stopped \
-e MYSQL_ROOT_PASSWORD=root123 \
-d mysql:5.6

4) ডাটাবেস ডাম্প পুনরুদ্ধার:

docker exec app_db sh -c 'exec mysql -uroot -proot123' < database_dump.sql

একটি বাহ্যিক ভলিউম ব্যবহার করে কীভাবে মাইএসকিউএল ধারক আপডেট করবেন

বাহ্যিক ভলিউম ব্যবহার করা ডেটা পরিচালনা করার একটি ভাল উপায় এবং এটি মাইএসকিউএল আপডেট করা সহজ করে তোলে। ধারকটি হারানো কোনও ডেটা হারাবে না। আপনি একক হোস্টে মাল্টি-কনটেইনার ডকার অ্যাপ্লিকেশন পরিচালনা করার সুবিধার্থে ডকার-রচনা ব্যবহার করতে পারেন :

1) docker-compose.ymlআপনার অ্যাপ্লিকেশনগুলি পরিচালনা করতে ফাইলটি তৈরি করুন :

version: '2'
services:
  app_db:
    image: mysql:5.6
    restart: unless-stopped
    volumes_from: app_db_data
  app_db_data:
    volumes: /my/data/dir:/var/lib/mysql

2) মাইএসকিউএল আপডেট করুন ( docker-compose.ymlফাইল হিসাবে একই ফোল্ডার থেকে ):

docker-compose pull
docker-compose up -d

দ্রষ্টব্য: উপরের শেষ কমান্ডটি মাইএসকিউএল চিত্র আপডেট করবে, পুনরায় তৈরি করবে এবং নতুন চিত্রটি দিয়ে ধারকটি শুরু করবে।


ধরা যাক আমার কাছে একটি বিশাল ডাটাবেস রয়েছে (বেশ কয়েকটি জিবি), পুরো ডাটাবেসটি আমদানি না করা পর্যন্ত আমার ডেটা অ্যাক্সেসযোগ্য হবে? এটি একটি বিশাল "ডাউনটাইম" হতে পারে
হেলিম্যাক

যেহেতু আপনি উল্লেখ করেছেন docker-compose, এই কাজ করবে? stackoverflow.com/a/31485685/65313
sivabudh

1
volumes_fromনতুন কীটির পক্ষে কী এখন অবচয় করা হয়েছে (এমনকি রচনা ফাইলের 3 সংস্করণে সরানো হয়েছে) volumes
ফ্রাঙ্কলিন ইউ

docker pull image_uri:tag && docker restart container_running_that_imageআমার জন্য কাজ। দরকার নেই docker-compose pull && docker-compose up -d
ইউরি পোজনিয়াক

16

উপরে অনুরূপ উত্তর

docker images | awk '{print $1}' | grep -v 'none' | grep -iv 'repo' | xargs -n1 docker pull

1
উজ্জ্বল! বেশ ভোট পেয়ে তা বেশ অবাক করে দিয়েছিল। এখন কেবলমাত্র অনুপস্থিত জিনিস হ'ল আপডেট হওয়া সমস্ত পাত্রে পুনরায় চালু করতে হবে।
sorin

7
দুর্ভাগ্যক্রমে এটি বিদ্যমান ধারকটিকে আপডেট করবে না। এটি কেবল টানা চিত্রটিকে আপডেট করবে তবে বিদ্যমান ধারকটি পরিবর্তনযোগ্য এবং এখনও এটি তৈরি করতে ব্যবহৃত মূল চিত্র ব্যবহার করে। এটি কেবলমাত্র যদি আপনি চিত্র থেকে একটি নতুন ধারক তৈরি করেন তা কার্যকর হয় তবে যে কোনও বিদ্যমান ধারক এখনও মূল চিত্রের উপর ভিত্তি করে রয়েছে।
এরিক বি

অ্যামেজিং। আপনার যদি ধারকটির নির্দিষ্ট সংস্করণটি টানতে হয় তবে এটি এটি করুন: ডকার ইমেজ | awk '{মুদ্রণ $ 1 ":" $ 2}' | grep -v 'কিছুই না' | গ্রেপ -iv 'রেপো' | xargs -n1 ডকার টান
রজারভিলা

11

docker-composeএকটি কাস্টম তৈরি করার সময় এটি ব্যবহার করে দেখতে কেমন লাগে তা এখানে Dockerfile

  1. পার্থক্য করার জন্য পরবর্তী সংস্করণ নম্বর যুক্ত করে প্রথমে আপনার কাস্টম ডকফায়াইল তৈরি করুন। উদাঃ docker build -t imagename:version . এটি আপনার নতুন সংস্করণ স্থানীয়ভাবে সঞ্চয় করবে।
  2. চালান docker-compose down
  3. docker-compose.ymlআপনি প্রথম ধাপে সেট করা নতুন চিত্রের নামটি প্রতিফলিত করতে আপনার ফাইল সম্পাদনা করুন ।
  4. চালান docker-compose up -d। এটি চিত্রটির জন্য স্থানীয়ভাবে দেখাবে এবং আপনার আপগ্রেড হওয়া ব্যবহার করবে।

-EDIT-

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

  1. যাচাই করে নিন যে আমার ডকফায়াইলটি এটি দেখতে দেখতে চাই।
  2. আমার ডকার-রচনা ফাইলটিতে আমার চিত্রের সংস্করণ নম্বর সেট করুন।
  3. যদি আমার চিত্রটি এখনও নির্মিত না হয়: চালান docker-compose build
  4. চালান docker-compose up -d

আমি তখন বুঝতে পারি নি, তবে ডকার-রচনাটি আমার কন্টেইনারটিকে কেবল প্রথম কমান্ডের পরিবর্তে এক কমান্ড দিয়ে নতুন চিত্রটিতে আপডেট করার জন্য যথেষ্ট স্মার্ট।


বাস্তব পরিস্থিতিতে আপনি নিজের হাত ব্যবহার করতে পারবেন না এবং এই পরিবর্তনগুলি করতে পারবেন না। আপনার সমাধান সমস্যা সমাধানের স্বয়ংক্রিয় উপায়গুলিকে সমর্থন করে না।
কার্লোস ভেজ্কেজ লসাদা

7
সুতরাং আপনি বলছেন যে কারণ আমার সমাধানটি স্বয়ংক্রিয় নয়, এটি বৈধ নয়? এটি কি ওপি থেকে প্রয়োজনীয়? এবং অন্যান্য উত্তরগুলি অটোমেশনকে বোঝায়? সত্যিই বিভ্রান্ত। এবং, আমি মনে করি যে নিম্নাঞ্চলীরা এখানে আসার অন্যদের প্রতি বিরূপ আচরণ করছে। আমার উত্তর জিজ্ঞাসা করা প্রশ্নের 100% বৈধ।
gdbj

এই উত্তরের জন্য ধন্যবাদ, আমি বুঝতে পারি না যে আপনি docker-compose up -dপ্রথমে সমস্ত কিছু থামানোর প্রয়োজন ছাড়াই কেবল চালাতে পারবেন।
র‌্যাডিক্যান্ড

4

আপনি যদি ডকার রচনাটি ব্যবহার করতে না চান তবে আমি পোর্টেইনারের সুপারিশ করতে পারি । এটিতে একটি পুনরায় তৈরি ফাংশন রয়েছে যা সর্বশেষতম চিত্রটি টানার সময় আপনাকে একটি ধারক পুনরায় তৈরি করতে দেয়।


2

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


ধারকগুলি পুনরায় চালু করার অর্থ কী? নেই docker restartকমান্ড, কিন্তু আমি নিশ্চিত নই এটি ইমেজ পরিবর্তন কুড়ান হবে। এবং আমার পাতাগুলির ভিতরে থাকা ডেটার সাথে কী ঘটে?
ইয়ারোস্লাভ স্টাভিনিচী

1
দুঃখিত, আমি ডকার পুনঃসূচনা করতে চাইনি। আমার অর্থ ডকার আরএম-কন্টেন্টার; ডক রান NEW_IMAGE AGE আপনার বর্গাকার কনটেইনার ডেটা অদৃশ্য হয়ে যাবে। এজন্য লোকেরা সাধারণত ডেটা সঞ্চয় করতে ভলিউম ব্যবহার করে।
seanmcl

যদি আপনার সমস্ত ডেটা পৃথক পাত্রে বা হোস্ট মেশিনে ভলিউমে মাউন্ট থাকে তবে নাস @seanmcl বলেছে যে কেবল একই ডাটাতে সংযুক্ত নতুন মাইএসকিএল দিয়ে নতুন ধারক তৈরি করুন। যদি আপনি এটি না করে থাকেন (তবে আপনার উচিত) তবে আপনি মাইএসকিএল আপডেট করতে এবং এটি ধারকটির ভিতরে পুনরায় চালু করতে ডকার ১.৩ এ উপলব্ধ ডকার এক্সিকিউটিভ কমান্ডটি ব্যবহার করতে পারেন।
উসমান ইসমাইল

2

Http://blog.stefanxo.com/2014/08/update-all-docker-images-at-once/ থেকে নেওয়া

নিম্নলিখিত কমান্ড পাইপলাইনটি ব্যবহার করে আপনি আপনার বিদ্যমান চিত্রগুলি আপডেট করতে পারেন:

docker images | awk '/^REPOSITORY|\<none\>/ {next} {print $1}' | xargs -n 1 docker pull

6
এটি চিত্রগুলি আপডেট করবে তবে ধারক নয় not ধারকটি অপরিবর্তনীয় এবং এর বেস চিত্রটি কোনও আপডেট হওয়া চিত্র থেকে নতুন ধারক তৈরি না করে পরিবর্তন করা যায় না।
এরিক বি

2

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


1

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

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

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

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

আমি এই দৃশ্যের সমাধান করে এমন কোনও পূর্ব শিল্প আছে কিনা তা শুনতে আগ্রহী হব।


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

খুব ভালো পয়েন্ট গসলেলে। সম্মত হন যে এটি বিদ্যমান ডক কনটেইনারটির 'ইন্টার্নাল' আপডেট করার জন্য একটি অ্যান্টি-প্যাটার্ন।
bjlevine

1

হালনাগাদ

এটি মূলত কনটেইনারটি আপডেট করার জন্য নয় কারণ বিল্ডিং চিত্রগুলি হ'ল উপায়

আমার একই সমস্যা ছিল তাই আমি ডকার-রান তৈরি করেছি , একটি খুব সাধারণ কমান্ড-লাইন সরঞ্জাম যা অন্য চলমান পাত্রে প্যাকেজ আপডেট করার জন্য ডকারের ধারকের ভিতরে চলে।

এটি চলমান ডকার পাত্রগুলির সাথে যোগাযোগ করতে এবং প্যাকেজ আপডেট করতে বা যেকোন স্বেচ্ছাসেবক একক কমান্ড চালাতে ডকার-পাই ব্যবহার করে

উদাহরণ:

docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec

ডিফল্টরূপে এটি dateসমস্ত চলমান পাত্রে এবং কমান্ডগুলিতে কমান্ড চালাবে তবে আপনি কোনও আদেশ যেমন ইস্যু করতে পারেনdocker-run exec "uname -a"

প্যাকেজগুলি আপডেট করতে (বর্তমানে কেবলমাত্র অ্যাপটি-গেট ব্যবহার করছেন):

docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run update

আপনি এটি তৈরি করতে পারেন এবং উপনাম রাখতে পারেন এবং এটি নিয়মিত কমান্ড লাইন হিসাবে ব্যবহার করতে পারেন যেমন

alias docker-run='docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run'


এই একটি ভাল ধারণা? (আপনি যদি এটি করেন apt update; apt upgradeতবে চিত্রটি বাড়বে))
ctrl-alt-delor

@Yaroslav এর চিত্র এই সমস্যার আরও ভাল সমাধান। উপরোক্ত জিনিসগুলি করার ডকার-উপায় আসলে নয়।
জুস্ট ভ্যান ডের লান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.