# Remove docker images
Remove obsolete docker images.
## Prerequisite
Install Docker.
## Supported tag syntax
The tags following this regex are supported:
^[vV]?(\d{1,5})(\.\d{1,5})?(\.\d{1,5})?(-.*)?$
ex) Supported tags:
1.0
1.0-SNAPSHOT
v2.10.1
2.0-BR291-SNAPSHOT
8-jdk
ex) Non supported tag:
123456.1 (major version has more than 5 digits)
ver1.2
## Canonical version
If the tag matches the following regex, it is recognized as a canonical (non snapshot) version.
^[vV]?(\d{1,5})(\.\d{1,5})?(\.\d{1,5})?
## Snapshot version
If the tag ends with "-SNAPSHOT", it is recognized as a snapshot version.
## Branch
If non "-SNAPSHOT" string follows, it is recognized as a branch.
ex) Branch: BR102(canonical version)
1.4-BR102
ex) Branch: BR102(snapshot version)
1.4-BR102-SNAPSHOT
## How it works
1. Invoke "docker images" to obtain the list of docker image.
| Image name | tag |
-|-
| foo/myapp | 1.0 |
| foo/myapp | 1.0-SNAPSHOT |
| bar/app | 1.2 |
| foo/myapp | 1.1 |
| foo/myapp | 1.1-SNAPSHOT |
| foo/myapp | 1.2 |
| bar/app | 2.2 |
| foo/myapp | 1.3 |
2. Grouping the list by image name.
| Image name | tag |
-|-
| foo/myapp | 1.0 |
| foo/myapp | 1.0-SNAPSHOT |
| foo/myapp | 1.3 |
| foo/myapp | 1.1 |
| foo/myapp | 1.1-SNAPSHOT |
| foo/myapp | 1.2 |
| bar/app | 2.2 |
| bar/app | 1.2 |
3. Grouping the list by canonical/snapshot version.
| Image name | tag |
-|-
| foo/myapp | 1.0-SNAPSHOT |
| foo/myapp | 1.1-SNAPSHOT |
| foo/myapp | 1.0 |
| foo/myapp | 1.3 |
| foo/myapp | 1.1 |
| foo/myapp | 1.2 |
| bar/app | 2.2 |
| bar/app | 1.2 |
4. Sort by version number.
| Image name | tag |
-|-
| foo/myapp | 1.0-SNAPSHOT |
| foo/myapp | 1.1-SNAPSHOT |
| foo/myapp | 1.0 |
| foo/myapp | 1.1 |
| foo/myapp | 1.2 |
| foo/myapp | 1.3 |
| bar/app | 1.2 |
| bar/app | 2.2 |
5. Apply the following rule.
For snapshot version, keep the latest version. For canonical version, keep the three newest versions. You can modify the keep count by argument.
| Image name | tag | delete |
-|-|-
| foo/myapp | 1.0-SNAPSHOT | delete |
| foo/myapp | 1.1-SNAPSHOT | keep |
| foo/myapp | 1.0 | delete |
| foo/myapp | 1.1 | keep |
| foo/myapp | 1.2 | keep |
| foo/myapp | 1.3 | keep |
| bar/app | 1.2 | keep |
| bar/app | 2.2 | keep |
6. Invoke "docker rmi" to remove image
## Argument
- --version
Show tool version.
- --dry-run
Do not invoke "docker rmi" instead, just show the images that will be deleted.
- --keep [count]
Specify keep count for canonical versions. Default to 3.
- --keep-snapshot [count]
Specify keep count for snapshot versions. Default to 1.
- --repository-type [type]
Specify docker image repository type. Can use 'docker' and 'ibmcr'. The 'docker' means docker image repository. The 'ibmcr' means IBM Cloud Registry. Default to 'docker'.
## IBM Cloud Registry
If you want to use IBM Cloud Registry, specify '--repository-type ibmcr'. In this case, you need to login IBM Cloud Registry in advance.
$ ibmcloud login
$ ibmcloud cr login
$ remove_docker_images --repository-type ibmcr
If you want to execute it in non-interactive environment such as in CI server, you can use API key.
$ export IBMCLOUD_API_KEY=YOUR_CONTAINER_REGISTRY_APIKEY
$ ibmcloud login
$ ibmcloud cr login
$ remove_docker_images --repository-type ibmcr
You can create API key at web console:
- Manage => IAM => Service IDs => Create
- Input name and click Create.
- Click Access Policies.
- Click Assign access.
- Select IAM services.
- Click drop down 'No access' and select Container Registry.
- In 'Service access', check Reader and Writer.
- Click Add.
- Click Assign.
- Click API keys.
- Click Create.
- Input Name and click Create.
- Now, you can copy the API Key.
## Binary
Linux(x86_64):
[0.2.0](http://static.ruimo.com/release/remove_docker_images/0.2.0/remove_docker_images)