首页 > 解决方案 > 如何自动将版本为标签的 docker php 图像标记为最新?

问题描述

对于我的自定义 docker php 构建系统,我有以下 docker-compose

version: "3.7"
services:
  base72:
    build:
      context: .
      dockerfile: ./dockerfiles/7.2/Dockerfile
    image: myapp/php7.2:$VERSION_PHP_72
    stdin_open: true
    tty: true

  develop72:
    build:
      context: .
      dockerfile: ./dockerfiles/7.2/Dockerfile_develop
    links:
      - base72
    image: myapp/php7.2-dev:$VERSION_PHP_72
    volumes:
      - "./www:/var/www/html"
nginx:
    image: nginx:alpine
    ports:
      - 7880:7880
    links:
      - "develop72:develop72"
    volumes:
      - "./www:/var/www/html"
      - "./dist/nginx.conf:/etc/nginx/nginx.conf:ro"

我用以下内容构建它buildspec.yml

version: 0.2

phases:
  install:
    runtime-versions:
      docker: 18
  pre_build:
   commands:
     - docker login -u $USER -p $TOKEN
  build:
    commands:
     - docker-compose build
  post_build:
    commands:
      - docker-compose up -d
      - docker push myapp/php7.2
      - docker push myapp/php7.2-dev

通过一个.env文件,我实现了一个版本控制系统方法 docker images:

VERSION_PHP_72=20191218212112

每个版本号都是格式中的当前日期YYYYMMDDHHMMSS。所以我希望我从我的 env 文件构建的版本也被认为是最新的。你知道我该怎么做吗?

标签: dockerdocker-composeaws-codebuild

解决方案


docker tag可以为现有图像分配标签。我强烈建议您同时推送您的图像的时间戳版本,以便部署已知良好的版本并在事情不顺利时回滚。(这在 Kubernetes 中也很重要。)

我会尝试这样的序列:

build:
  commands:
   - docker-compose build
post_build:
  commands:
    - . ./.env && docker tag myapp/php7.2:$VERSION_PHP_72 myapp/php7.2:latest
    - . ./.env && docker push myapp/php7.2:$VERSION_PHP_72 myapp/php7.2:latest
    - . ./.env && docker tag myapp/php7.2-dev:$VERSION_PHP_72 myapp/php7.2-dev:latest
    - . ./.env && docker push myapp/php7.2-dev:$VERSION_PHP_72 myapp/php7.2-dev:latest

推荐阅读