如何用以前的网络和卷升级docker容器

如何用以前的网络和卷升级docker容器

简介

这篇文章主要是关于容器镜像的升级机制。有各种方法可以将容器升级到其最新的镜像。这里我们使用了一些简单易行的方法。首先,我们讨论了快速测试的手动方法。然后我们尝试了一些自动方法。这些方法将监视图像,如果有任何新的更新,它们会用更新的图像创建一个新的容器。

方法

  • 手动但使用CLI

  • 自动但使用CLI

  • 自动但使用Docker Compose

手动但使用CLI

在这里,我们将按照以下步骤来实现图像升级的目标。

  • 用旧图像创建一个容器

  • 在本地系统上下载更新的图像

  • 用更新的镜像创建一个新的容器,但使用旧的卷和网络

  • 删除旧的容器

第1步:创建一个旧的图像Docker容器

使用下面的命令来创建一个bushbox容器。

示例

$ docker run -itd --name old_cont --volume myvolume:/volumes --network
mynetwork busybox:unstable

输出

eb08fe5971190abc85aa7ca8ed44d1d85e6ea0fafeda26bb59785897bbd056ae

进入这个图像,在卷目录内创建一个文件。

$ docker exec -it old_cont sh
/ # cd volumes/
/volumes # touch myfile.txt
/volumes # ls
myfile.txt
/volumes # exit

第2步:用新镜像创建一个容器

这个容器有最新的bushbox的图像。

示例

$ docker run -itd --name new_cont --volume myvolume:/volumes --network mynetwork busybox:latest

输出

ab15dea992f46c27dfdb4a290e2dec3fbb10b3821694dbc12f18935d9e651c20

进入新的容器内部,检查数据是否存在。

$ docker exec -it new_cont sh
/ # cd volumes/
/volumes # ls
myfile.txt
/volumes # exit

因此,卷和网络保持不变。只有容器的图像被改变为最新的。

第3步:移除旧容器

示例

$ docker rm -f old_cont

输出

old_cont

在下一个方法中,我们将在 “瞭望塔 “图像的帮助下,将上述过程自动化。

自动但使用CLI

在这里,我们将从一个叫做 “watchtower “的额外图像中获得帮助。这个 “瞭望塔 “将检查版本库中是否有任何更新的镜像。一旦有任何更新被推送到版本库,这个 “瞭望塔 “就会自动下载更新的镜像,并创建一个新的更新的容器,其中包含所有链接到旧容器的旧数据。

第1步:创建一个容器

首先,我们需要用旧图像创建一个容器。

docker run -itd --name old_cont busybox:unstable
unstable: Pulling from library/busybox
2461e8255644: Pull complete
Digest:
sha256:f4ed5f2163110c26d42741fdc92bd1710e118aed4edb19212548e8ca4e5fca22
Status: Downloaded newer image for busybox:unstable
81470b0f373557b3cb057e86113f6e11ce0baec23844e1370f519e043ff3db53

容器已经创建并运行。

第2步:现在创建瞭望塔容器

在这里创建 “watchtower “容器,并添加上述容器的名称进行升级。

示例

$ docker run -itd --name watch_container -v
/var/run/docker.sock:/var/run/docker.sock containrrr/watchtower old_cont

输出

Unable to find image 'containrrr/watchtower:latest' locally
latest: Pulling from containrrr/watchtower
560f024ada32: Pull complete
03aa1c411c91: Pull complete
4e2295fcaa5d: Pull complete
Digest:
sha256:897304ffb41533954deda3ca9dd140fa1ca41e5d7e0bc6d6352606931145779c
Status: Downloaded newer image for containrrr/watchtower:latest
db82aafdb60ed17b3faf8d6df138aead91f9483257febc02af96ba4ed53d225d

现在这将照顾到一切,每当docker hub上的busybox:unstable被更新,watchtower就会自动将这个容器升级到更新的镜像。

自动但使用Docker Compose

我们将创建一个Docker Compose文件。这个组合文件将有多个需要被监控的容器。一个名为 “watchtower “的容器将监视所有这些容器。每当任何一个容器的镜像有更新时,它将为该镜像创建一个新的容器。

第1步:创建一个Docker Compose文件

Docker compose总共包含三个服务或容器。两个容器”old_cont“和”test_cont“被第三个容器”watch_cont“所监控。

version: "3"
services:
   old_cont:
      image: busybox:latest
      container_name: busybox_container
      command: sleep infinity

   test_cont:
      image: busybox:unstable
      container_name: testing_container
      command: sleep infinity
   watch_cont:
      image: containrrr/watchtower
      container_name: watchtower_container
   volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      command: --interval 60 busybox_container testing_container

watchtower将等待60秒,检查docker hub仓库中是否有任何更新的镜像。如果我们不给-interval选项,它将等待24小时。

第2步:启动容器

要启动所有这些容器,请使用下面的命令。

$docker compose up -d

这将创建并以分离模式运行所有这些容器。

结论

我们成功的为容器创建了一个升级周期。即使在生产环境中不使用这些方法,因为我们有专门的软件来完成这项任务。一些高级工具被用于更新和升级的任务。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程