With my increasing love for python, here is my attempt to get the disk usage of all the containers on some host. Well, since the requirements vary for everyone, so this script is far from complete.
# We will connect to 192.168.122.1 for docker daemon. If that is not the case,
# then change the below.
client = docker.DockerClient(base_url="tcp://192.168.122.1:4243")
# Get list of all containers.
# And now we will iterate over that list to get stats for all the containers.
for val in cls:
stats[val.name] = val.stats(stream=False)
# Get the disk usage for root and /tmp from containers with docker.exec
stats[val.name]['df-root'] = ( str(val.exec_run(r'df -kh --output="size,used,avail,pcent" /', stream=False).splitlines()).replace("'","").split()[1:] )
stats[val.name]['df-tmp'] = ( str((val.exec_run(r'df -kh --output="size,used,avail,pcent" /tmp ', stream=False).splitlines()[1:]+[''])).replace("'","").split()[1:] )
# Now if you want, we have dict of all the data and we can process the
# way we like it, for example create a html table for disk usage only.
for st in stats:
for i in stats[st]['df-root']:
print ('<td>%s</td>'%(i) )
for i in stats[st]['df-tmp']:
print ('<td>%s</td>'%(i) )
So, I have a few dockers. Every now and then I want to run some command on all of them. Doing ‘docker exec’ is tiresome. I found this neat solution with ansible that I thought I should share with you.
To get started, you need to have the “docker.py” script. This script will be used as python script inventory for ansible. So, use the following command and get the script:
curl 'https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/docker.py' -o docker.p
Once done, check that all is well, with :
You should not get any errors or warnings and see a list of dockers running on your host. If you get error for docker-py then you can install the same with :
pip install docker-py
And now is the good time to open the docker.py script to check the documentation. It adds all the docker hosts as entry in itself. But cool thing I liked is the fact that it creates a group for all running dockers – which is very very useful.
Now, if I want to set the Timezone (TZ) on all the running dockers in one go, I can do this:
ansible -i docker.py -m shell -a 'rm -f /etc/localtime; ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime' running
And just in case, the above does not work for you and you have a common username/password on all the machines, then another thing you would love is following:
# Export the docker host. If that is localhost, then you do not need this.
# This is GOOD to set option. This is the default IP address for docker
# and setting this to first IP address of the docker network is good idea
# that would ensure that ansible can login to each docker.
# And note - you need to have ssh running on all the dockers for the commands to work
ansible -i docker.py -m setup -u root -a 'filter=ansible_eth[0-2]' all
When you search with “docker search”, you would notice that the description of the image is truncated. Sometimes you want to see full description, to do so, you can use –no-trunc option. So, for example you want to search for fedora images, you can use the following command:
docker search --no-trunc fedora