如果基本图像被更新,如何自动更新码头容器

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

假设我有一个基于ubuntu:latest...。现在有一个安全更新和ubuntu:latest在码头回购中更新。

(1)我如何知道本地的形像及其货柜正在落后?

2)是否有一些最佳做法可以自动更新本地映像和容器,以跟踪码头回购更新,这将使你在常规的ubuntu机器上运行无人值守的升级。

提问于
用户回答回答于

我也有过同样的问题,我认为可以简单地通过一个cron作业调用来解决这个问题。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
用户回答回答于

我们使用一个脚本来检查一个正在运行的容器是否用最新的映像启动。我们还使用upstartinit脚本启动对接者映像。

#!/usr/bin/env bash
set -e
BASE_IMAGE="registry"
REGISTRY="registry.hub.docker.com"
IMAGE="$REGISTRY/$BASE_IMAGE"
CID=$(docker ps | grep $IMAGE | awk '{print $1}')
docker pull $IMAGE

for im in $CID
do
    LATEST=`docker inspect --format "{{.Id}}" $IMAGE`
    RUNNING=`docker inspect --format "{{.Image}}" $im`
    NAME=`docker inspect --format '{{.Name}}' $im | sed "s/\///g"`
    echo "Latest:" $LATEST
    echo "Running:" $RUNNING
    if [ "$RUNNING" != "$LATEST" ];then
        echo "upgrading $NAME"
        stop docker-$NAME
        docker rm -f $NAME
        start docker-$NAME
    else
        echo "$NAME up to date"
    fi
done

看上去就像

docker run -t -i --name $NAME $im /bin/bash

扫码关注云+社区