我如何自动将一个 docker php 版本标记为最新的图像标记为最新?
How I can automatically mark a docker php image that has its version as a tag as latest?
对于我的自定义 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 文件构建的版本也被认为是最新的。你知道我该怎么做吗?
对于解决方案,您需要以下 2 个组件:
docker commit
允许您为容器指定标签
docker-compose ps -q
这将允许您获取特定服务的容器。
上面的命令将合并到这个单行文件中:
docker commit $(docker-compose ps -q ^service^) ^image_name^:latest
其中:
* ^service^
:您在docker-compose.yml
中定义的docker-compose服务
* ^image_name^
: 你要推送到容器中的镜像是最新的。
所以为了推送 myapp/php7.2-dev
你需要 运行:
docker commit $(docker-compose ps -q develop72) myapp/php7.2-dev:latest
因此结束 codebuild.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 commit $(docker-compose ps -q base72) myapp/php7.2:latest
- docker commit $(docker-compose ps -q develop72) myapp/php7.2-dev:latest
- docker push myapp/php7.2
- docker push myapp/php7.2-dev
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
对于我的自定义 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 文件构建的版本也被认为是最新的。你知道我该怎么做吗?
对于解决方案,您需要以下 2 个组件:
docker commit
允许您为容器指定标签docker-compose ps -q
这将允许您获取特定服务的容器。
上面的命令将合并到这个单行文件中:
docker commit $(docker-compose ps -q ^service^) ^image_name^:latest
其中:
* ^service^
:您在docker-compose.yml
中定义的docker-compose服务
* ^image_name^
: 你要推送到容器中的镜像是最新的。
所以为了推送 myapp/php7.2-dev
你需要 运行:
docker commit $(docker-compose ps -q develop72) myapp/php7.2-dev:latest
因此结束 codebuild.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 commit $(docker-compose ps -q base72) myapp/php7.2:latest
- docker commit $(docker-compose ps -q develop72) myapp/php7.2-dev:latest
- docker push myapp/php7.2
- docker push myapp/php7.2-dev
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