繁体   English   中英

如何用 docker-compose 标记 docker 图像

[英]How to tag docker image with docker-compose

我想通过 docker-compose 构建图像并为其设置特定标签。 文档说:

Compose 将构建并使用生成的名称标记它,然后使用该图像。

但是我找不到指定标签的方法,对于构建的图像,我总是看到“最新”标签。

似乎文档/工具已更新,您现在可以将image标记添加到脚本中。 这对我来说是成功的。

例子:

version: '2'
services:

  baggins.api.rest:
    image: my.image.name:rc2
    build:
      context: ../..
      dockerfile: app/Docker/Dockerfile.release
    ports:
      ...

https://docs.docker.com/compose/compose-file/#build

原始答案15 年 11 月 20 日

截至今天,没有特定标签的选项。 Docker compose 只是发挥了它的魔力,并像您看到的那样分配了一个标签。 在调用 docker-compose 之后,您始终可以有一些脚本调用docker tag <image> <tag>

现在有一个如上所述或这里的选项

build: ./dir
image: webapp:tag

如果您指定 image 和 build,那么 Compose 会使用 image 中指定的 webapp 和可选标签命名构建的镜像:

build: ./dir
image: webapp:tag

这会生成一个名为webapp和标记tag的图像,从./dir

https://docs.docker.com/compose/compose-file/#build

你可以试试:

services:
  nameis:
    container_name: hi_my
    build: .
    image: hi_my_nameis:v1.0.0

它对我有用:https://docs.docker.com/build/customize/bake/compose-file/#specification

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
      tags:
        - spring-postgres:1.0
        - spring-postgres:latest
    ports:
      - 8080:8080

然后运行docker compose build --no-cache output 如下:

> docker compose build --no-cache
[+] Building 192.9s (13/13) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                              0.0s 
 => => transferring dockerfile: 457B                                                                                                                              0.0s 
 => [internal] load .dockerignore                                                                                                                                 0.0s 
 => => transferring context: 2B                                                                                                                                   0.0s 
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jre-focal                                                                                   0.0s 
 => [internal] load metadata for docker.io/library/maven:3.8.5-eclipse-temurin-17                                                                                 0.0s 
 => [builder 1/5] FROM docker.io/library/maven:3.8.5-eclipse-temurin-17                                                                                           0.0s 
 => CACHED [stage-1 1/3] FROM docker.io/library/eclipse-temurin:17-jre-focal                                                                                      0.0s 
 => [internal] load build context                                                                                                                                 0.0s 
 => => transferring context: 1.05kB                                                                                                                               0.0s 
 => CACHED [builder 2/5] WORKDIR /code                                                                                                                            0.0s 
 => [builder 3/5] COPY pom.xml pom.xml                                                                                                                            0.0s 
 => [builder 4/5] COPY src .                                                                                                                                      0.0s 
 => [builder 5/5] RUN mvn clean -DskipTests -T 2C -X -am install                                                                                                192.5s 
 => [stage-1 2/3] COPY --from=builder /code/target/*.jar app.jar                                                                                                  0.0s 
 => exporting to image                                                                                                                                            0.0s 
 => => exporting layers                                                                                                                                           0.0s 
 => => writing image sha256:a5827124abc899efcfbc8db150f72f5ff8034d1ab93418dee5c15525ae4e42a1                                                                      0.0s 
 => => naming to docker.io/library/spring-postgres-backend                                                                                                        0.0s 
 => => naming to docker.io/library/spring-postgres:1.0                                                                                                            0.0s 
 => => naming to docker.io/library/spring-postgres:latest                                                                                                         0.0s 

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

在控制台上方 output spring-postgres:1.0spring-postgres:latest

确保 Dockerfile 中的 FROM 语句包含正确的图像名称。

如果您已经构建了镜像,则可以使用docker tag命令重新标记它:

docker tag imagename imagename:v1.0

docker tag imagename:v1.0 imagename:v1.1

如果您的存储库附加了多个标签,并且您想删除其中之一,则可以使用docker rmi命令:

$ docker rmi imagename:v1.0
Untagged imagename:v1.0

参考:

我想补充一点,您还可以通过环境变量或 .env 文件管理标签版本。

https://docs.docker.com/compose/environment-variables/#the-env-file

export TAG=1.11

例子:

version: '3.3'
services:

  baggins.api.rest:
    image: my.image.name:{$TAG}
    build:
      context: ../..
      dockerfile: app/Docker/Dockerfile.release
    ports:
      ...

docker-compose config进行验证

根据官方文档: https://docs.docker.com/compose/environment-variables/set-environment-variables/

您可以从您的 .env 文件中设置环境变量

$ cat .env
TAG=v1.5

然后,您可以检索它并将其用作图像的标签。

$ cat docker-compose.yml
services:
  web:
    image: "webapp:${TAG}"

您可以通过命令docker compose convert来验证它

$ docker compose convert

services:
  web:
    image: 'webapp:v1.5'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM