अपनी छवि बदलने के बाद डॉक कंटेनर को अपग्रेड कैसे करें


518

मान लीजिए कि मैंने आधिकारिक mysql: 5.6.21 चित्र खींच लिया है ।

मैंने कई डॉकटर कंटेनर बनाकर इस छवि को तैनात किया है।

ये कंटेनर कुछ समय से MySQL 5.6.22 के रिलीज़ होने तक चल रहे हैं। Mysql की आधिकारिक छवि: 5.6 नई रिलीज़ के साथ अपडेट हो जाती है, लेकिन मेरे कंटेनर अभी भी 5.6.21 पर चलते हैं।

मैं अपने सभी मौजूदा कंटेनरों में छवि में परिवर्तन (अर्थात MySQL डिस्ट्रो को अपग्रेड) कैसे करूं? ऐसा करने का उचित डॉकर तरीका क्या है?

जवाबों:


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

आप होस्ट (या वॉल्यूम के रूप में घुड़सवार निर्देशिका) या विशेष डेटा-केवल कंटेनर (ओं) में डेटा स्टोर कर सकते हैं । इसके बारे में और पढ़ें

अपग्रेडिंग एप्लिकेशन (जैसे यम / एप्ट-अप अपग्रेड) कंटेनरों के भीतर एक एंटी-पैटर्न माना जाता है । अनुप्रयोग कंटेनरों को अपरिवर्तनीय माना जाता है , जो प्रतिलिपि प्रस्तुत करने योग्य व्यवहार की गारंटी देगा। कुछ आधिकारिक एप्लिकेशन छवियां (mysql: 5.6 विशेष रूप से) भी स्व-अद्यतन करने के लिए डिज़ाइन नहीं की गई हैं (उपयुक्त-अपग्रेड काम नहीं करेगा)।

मैं हर किसी को धन्यवाद देना चाहता हूं जिन्होंने अपना जवाब दिया, इसलिए हम सभी अलग-अलग दृष्टिकोण देख सकते हैं।


31
क्या होगा यदि डेटा माइग्रेशन की आवश्यकता है? नया सर्वर डेटा को माउंट नहीं कर सकता है क्योंकि यह एक पुराने प्रारूप में है, यह जानना आवश्यक है कि एक माइग्रेशन हो रहा है और डेटा प्रतिनिधित्व को बदल दें।
डोर रोटमैन

12
मुझे लगता है, छवि डिजाइनरों को इसके लिए जिम्मेदार होना चाहिए और कंटेनर के पहले रन के दौरान कस्टम (जैसे, डेटा माइग्रेशन) कमांड लॉन्च करने की अनुमति देना चाहिए।
यारोस्लाव स्टावनिचि


4
@static_rtti 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- ( ./postgres-data/मेरे पोस्टग्रेक्यूएल कंटेनर के अंदर मेजबान डायर को माउंट किया ।)
काजाग्नसस

4
@KajMagnus मैं docker swarms का बहुत उपयोग करता हूं, और मैं अपने कंटेनर को एक झुंड में अच्छा काम करने के लिए लिखना पसंद करता हूं। जब मैं एक झुंड में एक कंटेनर को घुमाता हूं तो मुझे नहीं पता कि कौन सा झुंड नोड कंटेनर पर रहने वाला है, इसलिए मैं उस डेटा को होस्ट पथ पर भरोसा नहीं कर सकता जिसमें मुझे चाहिए। चूंकि डॉकटर 1.9 (मुझे लगता है) वॉल्यूम को मेजबानों पर साझा किया जा सकता है, जो मेरे द्वारा वर्णित विधि का उपयोग करके कंटेनरों को एक हवा में अपग्रेड और माइग्रेट करता है। एक विकल्प यह सुनिश्चित करने के लिए होगा कि कुछ नेटवर्क वॉल्यूम सभी झुंड नोड्स पर मुहिम की जाती है, लेकिन यह एक विशाल दर्द को बनाए रखने के लिए लगता है।
kMaiSmith

धन्यवाद! ठीक है, बढ़ते होस्ट वॉल्यूम कुछ ऐसा लगता है जैसे मैं भी अब बचना चाहता हूं। कम से कम थोड़ी देर बाद अगर मेरा ऐप लोकप्रिय हो जाता है और उसे एक से अधिक सर्वरों के पैमाने की जरूरत होती है
काजाग्नस

32

बस एक और अधिक सामान्य (mysql विशिष्ट नहीं) उत्तर देने के लिए ...

  1. संक्षेप में

सेवा छवि रजिस्ट्री ( https://docs.docker.com/compose/compose-file/#image ) के साथ सिंक्रनाइज़ करें :

docker-compose pull 

डॉकटर-कंपोज़ फ़ाइल या छवि बदल जाने पर कंटेनर को फिर से बनाएँ:

docker-compose up -d
  1. पृष्ठभूमि

कंटेनर छवि प्रबंधन docker- रचना का उपयोग करने का एक कारण है (देखें https://docs.docker.com/compose/reference/up/ )

यदि किसी सेवा के लिए मौजूदा कंटेनर हैं, और कंटेनर के निर्माण के बाद सेवा के कॉन्फ़िगरेशन या छवि को बदल दिया गया था, तो डॉकटर-कंपोजर कंटेनरों को रोककर और पुन: निर्मित करके परिवर्तनों को बदल देता है (घुड़सवार संस्करणों को संरक्षित करता है)। कम्पोज़ को बदलावों को लेने से रोकने के लिए, --no-विश्राम ध्वज का उपयोग करें।

डेटा प्रबंधन पहलू भी माउंटेड एक्सटर्नल "वॉल्यूम" (देखें https://docs.docker.com/compose/compose-file/#volumes ) या डेटा कंटेनर के माध्यम से डॉकटर-कंपोज़ द्वारा कवर किया जा रहा है ।

यह संभावित पिछड़े संगतता और डेटा माइग्रेशन के मुद्दों को अछूता छोड़ देता है, लेकिन ये "लागू" मुद्दे हैं, न कि डॉक विशिष्ट, जिन्हें रिलीज नोट्स और परीक्षणों के खिलाफ जांचना है ...


आप संस्करण के साथ यह कैसे करते हैं? उदाहरण नई छवि foo / छवि है: 2 और docker-compose.yml छवि है: foo / छवि: 1?
dman

धन्यवाद। सबसे बढ़िया उत्तर!
मिक

हालांकि यह निश्चित रूप से जाने का रास्ता है, लेकिन किसी को यह पता होना चाहिए कि कंटेनर में किसी भी तरह के बदलाव के बाद भी कंटेनर खो जाएगा। इसलिए कंटेनर को सिर्फ माउंटेड वॉल्यूम में रखना अभी भी आवश्यक है।
पेट्र बोदनोर

23

मैं यह जोड़ना चाहूंगा कि यदि आप इस प्रक्रिया को स्वचालित रूप से करना चाहते हैं (@Yaroslav द्वारा बताए गए समान सेटिंग्स के साथ एक नया कंटेनर डाउनलोड करें, बंद करें और पुनः आरंभ करें) आप वॉचटावर का उपयोग कर सकते हैं। एक प्रोग्राम जो ऑटो आपके कंटेनरों को अपडेट करता है जब वे https://github.com/v2tec/watchtower बदले जाते हैं


20

इस उत्तर पर विचार करें:

  • डेटाबेस का नाम है app_schema
  • कंटेनर का नाम है app_db
  • रूट पासवर्ड है root123

कंटेनर के अंदर एप्लिकेशन डेटा संग्रहीत करते समय MySQL कैसे अपडेट करें

यह एक बुरा अभ्यास माना जाता है , क्योंकि यदि आप कंटेनर खो देते हैं, तो आप डेटा खो देंगे। यद्यपि यह एक बुरा अभ्यास है, यहाँ यह करने का एक संभावित तरीका है:

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

बाहरी वॉल्यूम का उपयोग करके MySQL कंटेनर को कैसे अपडेट करें

बाहरी वॉल्यूम का उपयोग करना डेटा को प्रबंधित करने का एक बेहतर तरीका है, और यह MySQL को अपडेट करना आसान बनाता है। कंटेनर को खोने से कोई डेटा नहीं खोएगा। आप एक एकल होस्ट में मल्टी-कंटेनर डॉकर एप्लिकेशन को प्रबंधित करने की सुविधा के लिए डॉक-कंपोज़ का उपयोग कर सकते हैं :

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) अपडेट MySQL ( docker-compose.ymlफ़ाइल के समान फ़ोल्डर से ):

docker-compose pull
docker-compose up -d

नोट: ऊपर दिया गया अंतिम कमांड MySQL इमेज को अपडेट करेगा, नए इमेज के साथ कंटेनर को रीक्रिएट और स्टार्ट करेगा।


मान लीजिए कि मेरे पास एक विशाल डेटाबेस (कई जीबी) है, क्या मेरा डेटा तब तक अप्राप्य रहेगा जब तक कि पूरा डेटाबेस आयात नहीं हो जाता? यह एक विशाल "डाउनटाइम" हो सकता है
नरकमीक

चूंकि आपने उल्लेख किया है docker-compose, क्या यह काम करेगा? stackoverflow.com/a/31485685/65313
शिवाबुध

1
volumes_fromकुंजी अब नई volumesकुंजी के पक्ष में पदावनत (यहां तक ​​कि रचना फ़ाइल के संस्करण 3 में हटा दी गई है) है ।
फ्रैंकलिन यू

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
प्रतिभाशाली! काफी आश्चर्य है कि यह अधिक वोट नहीं मिला। अब केवल एक चीज गायब है जो अद्यतन किए गए सभी कंटेनरों को पुनः आरंभ करने के लिए होगी।
सोरिन

7
दुर्भाग्य से यह मौजूदा कंटेनर को अपडेट नहीं करेगा। यह केवल खींची गई छवि को अपडेट करेगा, लेकिन मौजूदा कंटेनर अपरिवर्तनीय है और अभी भी इसे बनाने के लिए उपयोग की गई मूल छवि का उपयोग कर रहा है। यह केवल तभी काम करता है जब आप छवि से एक नया कंटेनर बनाते हैं, लेकिन कोई भी मौजूदा कंटेनर अभी भी मूल छवि पर आधारित है।
एरिक बी।

गजब का। यदि आपको कंटेनर के विशिष्ट संस्करण को खींचने की आवश्यकता है, तो इसे इस तरह से करें: docker छवियाँ | awk '{प्रिंट $ 1 ":" $ 2} "| grep -v 'कोई नहीं' | grep -iv 'रेपो' | xargs -n1 docker खींचना
rogervila

11

यहां docker-composeएक कस्टम का निर्माण करते समय इसका उपयोग करने जैसा दिखता है Dockerfile

  1. अपने कस्टम डॉकरीफाइल को पहले बनाएं, अगले संस्करण नंबर को अलग करने के लिए। Ex: docker build -t imagename:version . यह आपके नए संस्करण को स्थानीय रूप से संग्रहीत करेगा।
  2. Daud docker-compose down
  3. docker-compose.ymlचरण 1 पर आपके द्वारा निर्धारित नए छवि नाम को प्रतिबिंबित करने के लिए अपनी फ़ाइल को संपादित करें ।
  4. भागो docker-compose up -d। यह छवि के लिए स्थानीय रूप से दिखेगा और आपके अपग्रेड किए गए का उपयोग करेगा।

-EDIT-

ऊपर दिए गए मेरे कदम अधिक क्रियात्मक हैं क्योंकि उन्हें होना चाहिए। मैंने अपने वर्कफ़्लो build: .-कम्पोज़ फ़ाइल के पैरामीटर को शामिल करके अपने वर्कफ़्लो को अनुकूलित किया है । कदम अब यह दिखता है:

  1. सत्यापित करें कि मेरी डॉकफाइल वह है जो मैं चाहता हूं कि वह दिखे।
  2. मेरे डॉकटर-कम्पोज़ फ़ाइल में मेरी छवि नाम का संस्करण क्रमांक सेट करें।
  3. अगर मेरी छवि अभी तक नहीं बनी है: चलाएं docker-compose build
  4. Daud docker-compose up -d

मुझे उस समय एहसास नहीं हुआ, लेकिन डॉकटर-कंपोज़ काफी स्मार्ट है कि वह अपने कंटेनर को नई छवि के साथ एक कमांड के साथ अपडेट करें, बजाय इसके पहले इसे नीचे लाने के।


वास्तविक स्थिति में आप अपने हाथों का उपयोग नहीं कर सकते हैं और उन परिवर्तनों को कर सकते हैं। समस्या को हल करने के लिए आपका समाधान स्वचालित तरीकों का समर्थन नहीं करता है।
कार्लोस वाज़केज़ लोसादा

7
इसलिए आप कह रहे हैं कि क्योंकि मेरा समाधान स्वचालित नहीं है, यह मान्य नहीं है? क्या यह ओपी की आवश्यकता है? और क्या अन्य उत्तर स्वचालन पर प्रभाव डाल रहे हैं? वाकई उलझन में है। और, मुझे लगता है कि डाउनवोट्स यहां आने वाले अन्य लोगों के प्रति असंतोष कर रहे हैं। पूछे गए प्रश्न के लिए मेरा उत्तर 100% मान्य है।
gdbj

इस उत्तर के लिए धन्यवाद, मुझे यह भी महसूस नहीं हुआ कि आप docker-compose up -dपहले सब कुछ रोकने की आवश्यकता के बिना बस चला सकते हैं ।
मूलांक

4

यदि आप डॉकर कंपोज का उपयोग नहीं करना चाहते हैं, तो मैं पोर्टेनेर की सिफारिश कर सकता हूं । इसमें एक रीक्रिएट फंक्शन है जिससे आप लेटेस्ट इमेज को खींचते हुए एक कंटेनर को दोबारा बना सकते हैं।


2

आपको सभी छवियों को फिर से बनाने और सभी कंटेनरों को फिर से शुरू करने की आवश्यकता है, या किसी तरह यम सॉफ़्टवेयर को अपडेट करें और डेटाबेस को पुनरारंभ करें। कोई अपग्रेड पथ नहीं है लेकिन आप खुद को डिजाइन करते हैं।


कंटेनरों को फिर से शुरू करने से आपका क्या मतलब है? नहीं है docker restartआदेश है, लेकिन मुझे यकीन है कि नहीं कर रहा हूँ यह छवि परिवर्तन लेने होंगे। और कंटेनरों के अंदर मेरे डेटा का क्या होता है?
यारोस्लाव स्टावनिचि

1
क्षमा करें, मेरा मतलब यह नहीं था कि डॉकटर पुनरारंभ है। मेरा मतलब है docker rm -f CONTANER; docker ने NEW_IMAGE चलाया। आपके sql कंटेनर में डेटा गायब हो जाएगा। इसीलिए आमतौर पर लोग डेटा को स्टोर करने के लिए वॉल्यूम का इस्तेमाल करते हैं।
seanmcl

यदि आपके पास अपना सारा डेटा अलग-अलग कंटेनरों या होस्ट मशीन में संस्करणों में रखा गया है तो nas @seanmcl ने कहा कि नए माईस्क्कल के साथ एक ही डेटा से जुड़े नए कंटेनर बनाएं। यदि आपने ऐसा नहीं किया है (आपको चाहिए) लेकिन आप mysql को अपडेट करने के लिए docker 1.3 में उपलब्ध docker exec कमांड का उपयोग कर सकते हैं और इसे कंटेनर के अंदर पुनः आरंभ कर सकते हैं।
उस्मान इस्माइल

2

Http://blog.stefanxo.com/2014/08/update-all-docker-images-at-online/ से लेना

आप निम्न कमांड पाइपलाइन का उपयोग करके अपनी सभी मौजूदा छवियों को अपडेट कर सकते हैं:

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

6
यह छवियों को अपडेट करेगा, लेकिन कंटेनर को नहीं। कंटेनर अपरिवर्तनीय है और यह एक अद्यतन छवि से एक नया कंटेनर बनाने के बिना आधार छवि नहीं बदला जा सकता है।
एरिक बी।

2

सुनिश्चित करें कि आप सभी निरंतर डेटा (कॉन्फ़िगरेशन, लॉग या एप्लिकेशन डेटा) के लिए वॉल्यूम का उपयोग कर रहे हैं, जिसे आप उस कंटेनर के अंदर प्रक्रियाओं की स्थिति से संबंधित कंटेनरों पर संग्रहीत करते हैं। अपने डॉकरीफाइल को अपडेट करें और अपने इच्छित परिवर्तनों के साथ छवि को फिर से बनाएं, और कंटेनरों को अपने उचित स्थान पर घुड़सवार संस्करणों के साथ पुनः आरंभ करें।


1

यह कुछ ऐसा है जिसे मैं अपनी छवियों के लिए भी संघर्ष कर रहा हूं। मेरे पास एक सर्वर वातावरण है जिससे मैं एक डॉकर छवि बनाता हूं। जब मैं सर्वर को अपडेट करता हूं, तो मैं सभी उपयोगकर्ताओं को पसंद करूंगा जो मेरी डॉकर छवि के आधार पर कंटेनर चला रहे हैं जो नवीनतम सर्वर में अपग्रेड करने में सक्षम होंगे।

आदर्श रूप से, मैं डॉकर छवि का एक नया संस्करण उत्पन्न करना पसंद करूंगा और सभी कंटेनरों को उस छवि के पिछले संस्करण के आधार पर स्वचालित रूप से नई छवि में अपडेट करना होगा "।" लेकिन यह तंत्र मौजूद नहीं है।

तो मैं अब तक के साथ आने में सक्षम होने वाला अगला सबसे अच्छा डिजाइन कंटेनर अपडेट खुद को प्रदान करने का एक तरीका प्रदान करना है - इसी तरह कि कैसे एक डेस्कटॉप एप्लिकेशन अपडेट के लिए जांच करता है और फिर खुद को अपग्रेड करता है। मेरे मामले में, इसका मतलब शायद एक स्क्रिप्ट को तैयार करना होगा जिसमें एक प्रसिद्ध टैग से गिट पुल शामिल है।

छवि / कंटेनर वास्तव में नहीं बदलता है, लेकिन उस कंटेनर के "आंतरिक" बदल जाते हैं। आप कल्पित, यम, या जो कुछ भी आप पर्यावरण के लिए उपयुक्त है, उसी के साथ करने की कल्पना कर सकते हैं। इसके साथ ही, मैं myserver को अपडेट करूंगा: रजिस्ट्री में नवीनतम छवि ताकि कोई भी नया कंटेनर नवीनतम छवि पर आधारित हो।

मुझे सुनने में दिलचस्पी होगी कि क्या कोई पूर्व कला है जो इस परिदृश्य को संबोधित करती है।


7
यह अपरिवर्तनीय अवसंरचना की अवधारणा और इसके कुछ लाभों के खिलाफ जाता है। आप अपने एप्लिकेशन / वातावरण को यह देखने के लिए परीक्षण कर सकते हैं कि यह काम करता है और यदि आप अंदर घटकों को अपडेट करते हैं तो इसकी गारंटी नहीं है। कॉन्फ़िगरेशन से डेटा से बंटवारे वाले कंटेनर कोड आपको अपडेट करते हैं, परीक्षण करते हैं कि वर्तमान में हम काम कर रहे हैं और उत्पादन में तैनात हैं, यह जानते हुए कि परीक्षण की गई छवि से उत्पादन एक तक कोड की कोई अलग पंक्ति नहीं है। वैसे भी, सिस्टम आपको इसे अपनी पसंद के अनुसार भी प्रबंधित करने देता है।
गमुसेला

बहुत अच्छा बिंदु gususlera। सहमत हैं कि यह मौजूदा डॉकटर कंटेनर के 'इंटर्नल' को अपडेट करने के लिए एक प्रतिमान है।
bjlevine

1

अपडेट करें

यह मुख्य रूप से कंटेनर को क्वेरी करने के लिए अपडेट नहीं करना है क्योंकि बिल्डिंग इमेजेज करने का तरीका है

मेरे पास एक ही मुद्दा था इसलिए मैंने डॉक-रन बनाया , एक बहुत ही सरल कमांड-लाइन टूल जो डॉक कंटेनर के अंदर चलता है अन्य रनिंग कंटेनर में पैकेज को अपडेट करने के लिए ।

यह docker-py का उपयोग करता है कंटेनरों को चलाने और पैकेजों को अपडेट करने या किसी भी एकल एकल कमांड को चलाने के लिए करता है

उदाहरण:

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

डिफ़ॉल्ट रूप से यह चलेगा date सभी चल रहे कंटेनरों में कमांड और परिणाम लौटाएगा लेकिन आप कोई भी आदेश जारी कर सकते हैं जैसेdocker-run exec "uname -a"

पैकेज अपडेट करने के लिए (वर्तमान में केवल apt-get का उपयोग करके):

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, तो छवि बढ़ेगी।)
सीटीएल-अल्ट-डेलोर

@ यारोस्लाव की छवि इस समस्या का एक बेहतर समाधान है। उपरोक्त वास्तव में चीजों को करने का डॉकटर-तरीका नहीं है।
Joost van der Laan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.