Tôi đã có cùng một vấn đề và nghĩ rằng nó có thể được giải quyết đơn giản bằng một công việc định kỳ gọi unattended-upgrade
hàng ngày.
Ý định của tôi là có một giải pháp tự động và nhanh chóng để đảm bảo rằng thùng chứa sản xuất được bảo mật và cập nhật vì đôi khi tôi có thể cập nhật hình ảnh của mình và triển khai hình ảnh docker mới với các cập nhật bảo mật mới nhất.
Cũng có thể tự động hóa việc xây dựng và triển khai hình ảnh với các móc Github
Tôi đã tạo một hình ảnh docker cơ bản với nó tự động kiểm tra và cài đặt các bản cập nhật bảo mật hàng ngày (có thể chạy trực tiếp bằng cách docker run itech/docker-unattended-upgrade
).
Tôi cũng đã gặp một cách tiếp cận khác để kiểm tra xem container có cần cập nhật hay không.
Thực hiện đầy đủ của tôi:
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
Kịch bản trợ giúp
Tải về
#!/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"]
khởi đầu
#!/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
Biên tập
Tôi đã phát triển một công cụ docker-run nhỏ chạy như container docker và có thể được sử dụng để cập nhật các gói bên trong tất cả hoặc các container đang chạy, nó cũng có thể được sử dụng để chạy bất kỳ lệnh tùy ý nào.
Có thể dễ dàng kiểm tra bằng lệnh sau:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
mà theo mặc định sẽ thực thi date
lệnh trong tất cả các container đang chạy và hiển thị kết quả. Nếu bạn vượt qua update
thay vì exec
nó sẽ thực thi apt-get update
theo sau apt-get upgrade -y
trong tất cả các container đang chạy