π 2017-Oct-19 ⬩ βοΈ Ashwin Nanjappa ⬩ π·οΈ cheatsheet, docker ⬩ π Archive
You need to create a Dockerfile that describes the plan to build an image. Here is a simple Dockerfile named Dockerfile
that creates an image based off busybox
Linux image into which we are copying a local file:
FROM busybox
COPY haha.cpp /somedir/haha.cpp
$ docker build .
$ docker build -f Dockerfile .
This looks for a Dockerfile
in the current directory and also uses all the content of the current directory as the build context. Having a big build context with lots of files and directories in it can slow down a Docker build.
The build ends printing the hash of the image it has created. This image can be run using docker run
commands (see below) by using this hash.
$ docker build -f /path/to/Dockerfile path/of/build/context
To list all the images and tags from a Docker Hub repository: there does not seem to be a command to do this.
To pull an image imagename
:
$ docker pull <imagename>
$ docker pull ubuntu
$ docker pull nvidia/cuda
For a list of Docker image names that I find useful, go here.
When no tag is specified, like above, docker automatically pulls the image with the tag latest
.
Notice that we are not specifying the domain name or URL of any Docker registry. In such cases, Docker will look for and pull imagename
from the default Docker registry: https://hub.docker.com/
The image name can be a single word (ubuntu
) or a relative path (nvidia/cuda
). For a single word image name, its tags can be seen listed at the https://hub.docker.com/_/ubuntu
. The image name with a path has its repositories listed at https://hub.docker.com/u/nvidia
and the tags of a particular image at https://hub.docker.com/r/nvidia/cuda
.
20.04
tag:$ docker pull ubuntu:20.04
Note how the :
character is used to separate the image name and the tag. In the case of Ubuntu, the list of available tags can be viewed here. Not all registries may support viewing tags like this.
$ docker pull <registry.domain>/imagename
You might need to first authenticate to the registry domain before the pull will work:
$ docker login <registry.domain>
After a successful login, Docker will store a key provided by the registry server in your ~/.docker/config.json
. It will reuse this key for subsequent pull or push to this registry.
$ docker images
This is the same as this command:
$ docker image ls
What is listed are the images that you either pulled from a registry or built locally.
$ docker images -a
--no-trunc
option:$ docker images --no-trunc
latest
tag:$ docker rmi repo1/foobar2
tag123
tag:$ docker rmi repo1/foobar2:tag123
$ docker image prune
$ docker image prune -a
$ docker image prune -a --filter "until=168h"
$ docker system prune
This is useful when your filesystem runs out of space due to docker images.
$ docker system prune -a
This pretty much removes all Docker data on your system. This is useful when you really want to clean out everything.
$ docker system df
In this output, the size of the Images is the disk space occupied by your Docker images.
$ docker run image_name
This is only useful if running the container runs a service or a daemon inside it automatically.
$ docker run -it image_name /bin/bash
This is usually the method to use to have interactive access to a container.
$ docker ps
$ docker ps -a
--no-trunc
option:$ docker ps --no-trunc
$ docker stop container_name
$ docker rm 45235345
$ docker cp ecstatic_moore:/etc/lsb-release my_lsb_release
$ docker cp 763338cb8aa1:/etc/lsb-release my_lsb_release
As shown above, either the container name or the container ID can be used as the source.
$ docker cp my_details ecstatic_moore:/etc/my_details
$ docker cp my_details 763338cb8aa1:/etc/lsb-release
Tried with: Docker 18.09.6 and Ubuntu 18.04