I first wrote about Docker in 2014. Since that time, Docker has become an integral part of my development workflow.
The goal of this article is to highlight common Docker commands (acting as a cheat sheet). I have not provided a detailed description of every command, therefore please refer to the official Docker documentation.
Docker Information Commands:
docker version docker ps ax docker system info docker df docker system prune
With prolonged usage, it is likely that your Docker installation will become cluttered (old containers, etc.)
Two useful housekeeping commands include
docker system info, which provides a summary of your environment, as well as
docker system prune, which will reclaim space by removing all unused networks, containers, images, and volumes.
Docker Container Commands:
docker container ls docker container ls -a docker container run <img name> docker container run -it <img name> docker container rm <container id> docker container start <container id> docker container stop <container id> docker container kill <container id> docker container exec <container id> docker container attach <container id> docker container logs <container id> docker container inspect <container id> docker container inspect <container id> | grep <keyword> docker container commit <container id> <img name>:<img tag> docker container -v <local dir>:<container dir> <img name>
docker container commands are the most common. Do not underestimate the value of the
docker container inspect commands, especially when used with
container commit command can also be valuable, allowing you to save all changes from a containers read/write layer to the read-only image layer, therefore creating a new image.
docker container -v command creates a new container, which includes a mount point from your local machine. This is very useful for local development, allowing you to map a local directory to a directory within the container.
Docker Image Commands:
docker image ls docker image build -t <img name>:<img tag> . docker image rm <img id>
docker image build -t command will build a Docker image from a Dockerfile. Ensure you navigate to the correct directory before running the command.
Docker Volume Commands:
docker volume create <vol name> docker volume inspect <vol name> docker volume rm <vol name>
docker volume inspect command provides an easy way to locate the volume mount point.
Docker Networking Commands:
docker network ls docker network inspect <network name> docker container run -d -p <host port>:<container port> <img name> docker container port <container id> docker container run -d -P <img id>
docker container port command can be used to verify any port mappings.
-P flag can be used to map all ports mentioned in the EXPOSE directive of a Dockerfile.
Docker Logging Commands:
docker system events docker container logs <container id> docker container logs -f <container id>
docker container logs -f follows the logs, which can be useful when troubleshooting.
Docker Compose Commands:
docker-compose up docker-compose down docker-compose ps
Docker Compose facilitates multi-container design on a single node, using a
Docker Swarm Commands:
docker swarm init docker node ls docker swarm join-token worker docker swarm join docker node promote <node name> docker node demote <node name>
Docker Swarm facilitates multi-node design. The
docker swarm join-token worker command provides the full join command that can be used on other nodes.
Docker Hub Commands:
docker login docker image push <docker id>/<img name>:<img tag> docker image pull <docker id>/<img name>:<img tag> docker image tag <img name>:<img tag> <usr>/<img name>:<img tag>
If you need to push a root image to your Docker ID account, use the
docker image tag command.
- FROM = Base image to start from (usually the OS).
- RUN = Run a command in the environment.
- CMD and ENTRYPOINT = Define default behaviour.
- COPY and ADD = Copy files into the container.
- ENV = Define environment variables inside container.
- ARG = Define build-time argument (set with –build-arg).
- VOLUME = Create a volume.
- EXPOSE = Ports to expose outside of the container.
It is possible to create multi-stage builds, which include multiple
When creating a Dockerfile, I recommend using the Exec format (not Shell), as Shell will launch a new primary process. For example
ENTRYPOINT ["sudo", "-u", java", ...].