Aynı sorunu yaşadım ve unattended-upgrade
her gün çağrılan bir cron işi tarafından çözülebileceğini düşündüm .
Amacım bunu üretim konteynerinin güvenli ve güncel olmasını sağlamak için otomatik ve hızlı bir çözüm olarak kullanmaktır, çünkü görüntülerimi güncellemem ve en son güvenlik güncellemeleriyle yeni bir docker görüntüsünü dağıtmam biraz zaman alabilir.
Github kancaları ile görüntü oluşturma ve yerleştirmeyi otomatikleştirmek de mümkündür
Güvenlik güncelleştirmelerini günlük olarak otomatik olarak kontrol eden ve yükleyen temel bir liman işçisi resmi oluşturdum (doğrudan çalıştırabilir docker run itech/docker-unattended-upgrade
).
Ayrıca , kabın bir güncellemeye ihtiyacı olup olmadığını kontrol etmek için başka bir yaklaşımla karşılaştım.
Uygulamamın tamamı:
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
Yardımcı komut dosyaları
Yüklemek
#!/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"]
Başlat
#!/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
Düzenle
Docker kapsayıcısı olarak çalışan ve paketlerin tümünü veya seçilen çalışan kapsayıcıları güncellemek için kullanılabilecek küçük bir takım docker çalışması geliştirdim , ayrıca herhangi bir rastgele komut çalıştırmak için de kullanılabilir.
Aşağıdaki komutla kolayca test edilebilir:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
varsayılan date
olarak tüm çalışan kapsayıcılarda komut yürütür ve sonuçları görüntüler. Eğer geçerseniz update
yerine exec
o yürütmek olacak apt-get update
izledi apt-get upgrade -y
çalışan tüm kaplarda