如何让 docker 启动容器的时候每次都使用最新的镜像?

在使用 docker 时,我们经常使用最新的容器镜像来运行我们的微服务,但是 docker run 或者 docker compose 发现 docker 镜像的标签已经在本地服务器了,它不再会从注册服务 (registry) 那儿下载最新的镜像了。

比如下面的 docker compose 文件,因为使用了 latest 标签,在每次启动时 m-ui 和 m-proxy 就不会自动更新到最新版本。

version: "3.4"

services:  
  m-ui:
    image: "surfirst.some-registry.io/m-ui:latest"
    container_name: m-ui    
    ports:
      - "2081:80"

  m-proxy:
    image: "surfirst.some-registry.io/m-proxy:latest"
    container_name: m-proxy
    depends_on:
      - m-ui
    ports:
      - "80:80"

这就导致每次我们启动 docker 脚本或者 docker compose 都不会自动更新我们的服务。

那么如何解决这个问题呢?

我们可以在运行 docker run 和 docker compose up 之前使用 docker pull 命令获取最新的镜像。docker pull 命令不会下载完整的镜像,它只会下载 docker 镜像中有变化的那一层。

下面的命令使用 docker pull 获取最新的 m-ui:

docker pull surfirst.some-registry.io/m-ui:latest
latest: Pulling from enrollment-proxy
a603fa5e3b41: Already exists
c39e1cda007e: Already exists
90cfefba34d7: Already exists
a38226fb7aba: Already exists
62583498bae6: Already exists
9802a2cfdb8d: Already exists
56e3654a01ca: Pull complete
c26477c8f62b: Pull complete
Digest: sha256:f4d40bbdc39ad7e82fa0465501965e2d761b00b1f23d0568f95b86e7f54bae37
Status: Downloaded newer image for surfirst.some-registry.io/m-ui:latest
surfirst.azurecr.io/m-ui:latest

结论

为了每次都使用最新的镜像运行我们的微服务,我们可以使用 docker pull 先拉取镜像。这样就不用为 docker run 或者 docker compose 只使用本地缓存的 docker 镜像而烦恼了。

你可能感兴趣的:(架构,Linux,docker,容器,运维)