如何基地自动更新您的码头集装箱

假设我有一个基于ubuntu:latest的平凡容器ubuntu:latest 。 现在有一个安全更新和ubuntu:latest更新在码头回购。

1)我如何知道我的本地图像和它的容器在后面运行?

2)是否有一些最佳做法可以自动更新本地映像和容器以遵循docker repo更新,这在实践中会为您提供与在常规ubuntu-machine上运行无人值守升级相同的细节


我们使用脚本来检查正在运行的容器是否启动了最新的映像。 我们也使用upstart初始化脚本来启动Docker镜像。

#!/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

而init看起来像

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

“码头方式”将是使用码头中心自动化构建。 当上游容器重建时,Repository Links功能将重建您的容器,Webhooks功能将向您发送通知。

它看起来像webhooks仅限于HTTP POST调用。 你需要设置一个服务来捕捉它们,或者使用POST之一来发送邮件服务。

我没有看过它,但新的Docker通用控制平面可能具有检测更新的容器和重新部署的功能。


我有同样的问题,并认为它可以通过每天调用unattended-upgrade的cron作业简单解决。

我的意图是将此作为自动快速解决方案,以确保生产容器的安全性和更新,因为它可能需要我花一些时间来更新我的映像并部署具有最新安全更新的新Docker映像。

还可以使用Github钩子自动化图像构建和部署

我创建了一个基本的docker镜像,每天自动检查和安装安全更新(可以通过docker run itech/docker-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,作为docker容器运行,可用于更新所有或选定运行容器中的软件包,也可用于运行任意命令。

可以使用以下命令轻松测试:

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

链接地址: http://www.djcxy.com/p/30143.html

上一篇: How to automatically update your docker containers, if base

下一篇: How to scale Docker containers in production