In my last post I covered all of the basics of getting started with Docker. In this post, I'll dive more deeply into the most common uses for the Docker CLI. I'm assuming that you've already got a working local Docker install. If not, you can refer back to my previous post.
This is the most important, and likely the most commonly used Docker command. This is the command that is used to run container images. You can use it with images that you've built yourself, or you can use it to run images from a remote repository like DockerHub.
docker run IMAGE
This is the most basic way to use the run command. Docker will look for the named image locally first, and if it cannot find it, it will check to see if it's available from Docker Hub and download it. The image runs in the foreground and can be exited by pressing ctrl+c.
docker run IMAGE COMMAND [ARGS]
Most Docker images will define a specific command to be executed when the container is run, but you can specify a custom command to run instead by adding it to your docker run command after the image tag. Optionally, you can also append any arguments that should be passed to your custom command. Keep in mind that the container will only run as long as the command executed continues to run. If your custom command exits for any reason, so will the container.
docker run -it IMAGE
By default, you cannot provide any input to a running container via STDIN. In order to respond to prompts, you need to add the
--interactive option to run the image in interactive mode, and the
--tty option to connect your terminal's STDIN to the container's. You can combine both options using the shorthand option
docker run -p HOST_PORT:CONTAINER_PORT
Often when running a container, you will want to make a connection from your local host machine into your local docker container. This is only possible if you use the
-p option to specify a local host port to connect to the internal port exposed by the container.
docker run -d IMAGE
If you don't need to interact with your container and you'd rather not block your terminal shell, you can use
-d to run your container in the background.
NOTE: All of these options can be combined as desired.
You can use
exec to run arbitrary commands inside of a running container. I use this most often when troubleshooting problems in containers that I'm building. If your container has
bash or another shell available, you can use it to get an interactive shell inside of a container.
docker exec CONTAINER COMMAND [ARGS]
This is similar to docker run, but instead of giving it the name of a container image, you provide the ID or name of a running container. The command you specify will run inside the specified container in the foreground of your shell. You can use the
-d options with
exec just like you can with
🔗Managing Containers and Images
List all of your running containers with their metadata
docker list -a
List all containers including inactive ones
docker stop CONTAINER
Terminate the container specified by the given ID or name via
SIGTERM. This is the most graceful way to stop a container.
docker kill CONTAINER
Terminate the container specified by the given ID or name via
docker rm CONTAINER
Delete the container specified by the given ID. This will completely remove it and it will no longer appear in
docker ps -a
Starts a real-time display of stats like CPU and memory usage for your running containers. Press Ctrl + c to exit.
docker image list
List all the container images present in your local docker registry.
docker image remove IMAGE_NAME[:TAG]
Delete the given image from your local repository
docker image prune -a
Over time, you will accumulate a lot of images that take up disk space but are not in use. This command will bulk delete any image you have stored locally that isn't currently being used in a container (including stopped containers).
docker build is the the other crucial docker command. This command builds a portable container image from your Dockerfile and stores it in your local Docker registry.
docker build PATH
This is the most basic usage for
build. PATH is a relative path for the folder your dockerfile is in. The image is stored within docker and tagged with a hash derived from the image's contents.
docker build -t REPOSITORY_NAME[:VERSION_TAG] PATH
The automatically generated hash image names aren't easy to remember or refer back to, so I usually add a custom tag at build time using the
-t option. If you don't provide a version tag, it will default to
You may find that you need to re-tag an image after it's built. This is what
docker tag is for.
docker tag SOURCE_IMAGE[:VERSION_TAG] TARGET_IMAGE[:VERSION_TAG]
tag you simply need to provide a source image repository name and version tag and repository name and version tag for the new tag. As always, the version tags are optional and default to
In order to pull images from private registries, you'll need to use docker login.
docker login [REGISTRY_HOST]
registry host defaults to hub.docker.com. You will be prompted for your username and password.
push is used to publish docker images to a remote registry.
docker push REPOSITORY_NAME[:VERSION_TAG]
Publish the specified image to a registry. If your repository name does not include a registry host, it will be published to [Docker Hub][https://hub.docker.sh]. If you want to use a custom registry, you will need to use
docker tag to re-tag the image such that the repository name includes the registry host name (ex:
docker tag my-image-repo my-registry.com/my-image-repo). You will most likely need to use
docker login to login to your registry first.
Congratulations! You're on your way to being a Docker expert. However, it's worth noting that this list really only scratches the surface of the commands available in the Docker CLI. For more information check out the CLI docs or simply type
docker --help at your shell. You can also use
--help with most other docker CLI commands.
This Dot Labs is a modern web consultancy focused on helping companies realize their digital transformation efforts. For expert architectural guidance, training, or consulting in React, Angular, Vue, Web Components, GraphQL, Node, Bazel, or Polymer, visit thisdotlabs.com.
This Dot Media is focused on creating an inclusive and educational web for all. We keep you up to date with advancements in the modern web through events, podcasts, and free content. To learn, visit thisdot.co.