मेरे पास एक ही मुद्दा था और सोचा था कि इसे unattended-upgrade
रोज़ाना कॉल करने वाली क्रोन नौकरी से हल किया जा सकता है ।
मेरा इरादा इसे एक स्वचालित और त्वरित समाधान के रूप में रखना है ताकि यह सुनिश्चित हो सके कि उत्पादन कंटेनर सुरक्षित और अद्यतन है क्योंकि यह मुझे अपनी छवियों को अपडेट करने और नवीनतम सुरक्षा अपडेट के साथ एक नया डॉकटर छवि तैनात करने में कुछ समय ले सकता है।
गितुब हुक के साथ छवि निर्माण और तैनाती को स्वचालित करना भी संभव है
मैंने एक बुनियादी डॉकटर छवि बनाई है, जो रोज़ाना सुरक्षा अपडेट की स्वचालित रूप से जाँच और स्थापना करता है (सीधे द्वारा चला सकता है docker run itech/docker-unattended-upgrade
)।
मुझे यह जांचने के लिए एक और अलग दृष्टिकोण भी आया कि क्या कंटेनर को अपडेट की आवश्यकता है।
मेरा पूरा कार्यान्वयन:
Dockerfile
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y supervisor unattended-upgrades \
&& rm -rf /var/lib/apt/lists/*
COPY install /install
RUN chmod 755 install
RUN /install
COPY start /start
RUN chmod 755 /start
सहायक स्क्रिप्ट
इंस्टॉल
#!/bin/bash
set -e
cat > /etc/supervisor/conf.d/cron.conf <<EOF
[program:cron]
priority=20
directory=/tmp
command=/usr/sbin/cron -f
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
EOF
rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/start"]
शुरू
#!/bin/bash
set -e
echo "Adding crontab for unattended-upgrade ..."
echo "0 0 * * * root /usr/bin/unattended-upgrade" >> /etc/crontab
# can also use @daily syntax or use /etc/cron.daily
echo "Starting supervisord ..."
exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
संपादित करें
मैंने एक छोटा टूल डॉक-रन विकसित किया जो डॉक कंटेनर के रूप में चलता है और इसे सभी या चयनित रनिंग कंटेनरों के अंदर पैकेज को अपडेट करने के लिए इस्तेमाल किया जा सकता है, इसका उपयोग किसी भी मनमाने कमांड को चलाने के लिए भी किया जा सकता है।
निम्नलिखित कमांड के साथ आसानी से परीक्षण किया जा सकता है:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
जो डिफ़ॉल्ट रूप से date
सभी चल रहे कंटेनरों में कमांड निष्पादित करेगा और परिणाम प्रदर्शित करेगा। यदि आप update
इसके बजाय से गुजरते हैं, exec
तो सभी चलने वाले कंटेनरों में इसका apt-get update
पालन किया जाएगाapt-get upgrade -y