Labeling and filtering containers
With Docker 1.6, a feature has been added to label containers and images, through which we can attach arbitrary key-value metadata to them. You can think of them as environment variables, which are not available to running applications inside containers but they are available to programs (Docker CLI) that are managing images and containers. Labels attached to images also get applied to containers started via them. We can also attach labels to containers while starting them.
Docker also provides filters to containers, images, and events, which we can use in conjunction with labels to narrow down our searches.
For this document, let's assume that we have an image with the label, distro=centos.
root@Docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nskselvan/nsk latest b2f0c17eed23 2 months ago 197MB
centos-latest latest 2083898799b1 2 months ago 197MB
wordpress latest 224b7eef6944 3 months ago 408MB
mysql 5.7 b4e78b89bcf3 3 months ago 412MB
registry 2 28525f9a6e46 3 months ago 33.2MB
localhost:5000/reg latest 28525f9a6e46 3 months ago 33.2MB
centos latest 196e0ce0c9fb 3 months ago 197MB
localhost:5000/centos-ka latest 196e0ce0c9fb 3 months ago 197MB
As you can see from the preceding screenshot, if we use filters with the docker images command, we only get an image where the corresponding label is found in the image's metadata.
To start the container with the --label/-l option, run the following command:
root@Docker:~# docker run --label environment=test centos date
Thu Feb 15 06:21:09 UTC 2018
Let's start a container without a label and start two others with the same label:
root@Docker:~# docker run --name container1 centos date
Thu Feb 15 06:22:13 UTC 2018
root@Docker:~# docker run --name tcontainer1 --label environment=test centos date
Thu Feb 15 06:23:01 UTC 2018
root@Docker:~# docker run --name tcontainer2 --label environment=test centos date
Thu Feb 15 06:23:20 UTC 2018
If we list all the containers without a label, we will see all the containers, but if we use label, then we get only containers, which matches the label.
Docker attaches label metadata to containers while starting them and matches the label while listing them or other related operations
We can list all the labels attached to a container through the inspect command
root@Docker:~# docker inspect -f '{{.Config.Labels}}' tcontainer1
map[build-date:20170911 environment:test license:GPLv2 name:CentOS Base Image vendor:CentOS]
root@Docker:~# docker inspect -f '{{.Config.Labels}}' tcontainer2
map[license:GPLv2 name:CentOS Base Image vendor:CentOS build-date:20170911 environment:test]
With Docker 1.6, a feature has been added to label containers and images, through which we can attach arbitrary key-value metadata to them. You can think of them as environment variables, which are not available to running applications inside containers but they are available to programs (Docker CLI) that are managing images and containers. Labels attached to images also get applied to containers started via them. We can also attach labels to containers while starting them.
Docker also provides filters to containers, images, and events, which we can use in conjunction with labels to narrow down our searches.
For this document, let's assume that we have an image with the label, distro=centos.
root@Docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nskselvan/nsk latest b2f0c17eed23 2 months ago 197MB
centos-latest latest 2083898799b1 2 months ago 197MB
wordpress latest 224b7eef6944 3 months ago 408MB
mysql 5.7 b4e78b89bcf3 3 months ago 412MB
registry 2 28525f9a6e46 3 months ago 33.2MB
localhost:5000/reg latest 28525f9a6e46 3 months ago 33.2MB
centos latest 196e0ce0c9fb 3 months ago 197MB
localhost:5000/centos-ka latest 196e0ce0c9fb 3 months ago 197MB
As you can see from the preceding screenshot, if we use filters with the docker images command, we only get an image where the corresponding label is found in the image's metadata.
To start the container with the --label/-l option, run the following command:
root@Docker:~# docker run --label environment=test centos date
Thu Feb 15 06:21:09 UTC 2018
Let's start a container without a label and start two others with the same label:
root@Docker:~# docker run --name container1 centos date
Thu Feb 15 06:22:13 UTC 2018
root@Docker:~# docker run --name tcontainer1 --label environment=test centos date
Thu Feb 15 06:23:01 UTC 2018
root@Docker:~# docker run --name tcontainer2 --label environment=test centos date
Thu Feb 15 06:23:20 UTC 2018
If we list all the containers without a label, we will see all the containers, but if we use label, then we get only containers, which matches the label.
Docker attaches label metadata to containers while starting them and matches the label while listing them or other related operations
We can list all the labels attached to a container through the inspect command
root@Docker:~# docker inspect -f '{{.Config.Labels}}' tcontainer1
map[build-date:20170911 environment:test license:GPLv2 name:CentOS Base Image vendor:CentOS]
root@Docker:~# docker inspect -f '{{.Config.Labels}}' tcontainer2
map[license:GPLv2 name:CentOS Base Image vendor:CentOS build-date:20170911 environment:test]