# Multiple Image Tags with Docker Compose

Contents

Recently I answered a question on Stack Overflow

How to use multiple image tags with docker-compose?

The validated answer was based on extends, but it cannot by used anymore in Compose file format 3.x. As suggested by a user, the Extension fields capability added in the version 3.4 of Docker Compose can replace it to achieve the same goal: reuse a single definition to set several tags.

## Use YAML extension to define multiple tags

Here is how to use YAML extensions in this case.

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24  version: "3.4" # Define common behavior x-ubi-httpd: &default-ubi-httpd build: ubi-httpd # Other settings can also be shared image: ubi-httpd:latest # Define one service by wanted tag services: # Use the extension as is ubi-httpd: *default-ubi-httpd # Override the image tag ubi-httpd_major: << : *default-ubi-httpd image: ubi-httpd:1 ubi-httpd_minor: << : *default-ubi-httpd image: ubi-httpd:1.0 # Using an environment variable defined in a .env file for e.g. ubi-httpd_patch: << : *default-ubi-httpd image: "ubi-httpd:${UBI_HTTPD_PATCH}"  It uses an .env file to define environment variables.  1 2 3  $ cat .env # ---- UBI HTTP ----- # UBI_HTTPD_PATCH=1.0.1 

## Build images

Images can be built now with all the defined tags.

 1 2 3 4 5 6 7 8  $docker-compose build # ...$ docker images | grep ubi-httpd # ubi-httpd 1 8cc412411805 3 minutes ago 268MB # ubi-httpd 1.0 8cc412411805 3 minutes ago 268MB # ubi-httpd 1.0.1 8cc412411805 3 minutes ago 268MB # ubi-httpd latest 8cc412411805 3 minutes ago 268MB 

Images could also be pushed in the same way.