MY HUMBLE EFFORT TO SIMPLIFY DOCKER PART II
Solving the “It works on my machine” syndrome
I covered the basics of creating and building Docker images in part I (if you haven’t read that yet, I would recommend it since this part is based on it). In this part, I’ll explain how to run and delete an image of the container you’ve built.
Running an image is as simple as docker run -it image\_name:tag
. Let’s break it down; tag is the one you set when building it; note that if you remove it, then docker assumes you point to the latest. The meaning of -it
isinteractive terminalWhich is loading the terminal driver in an interactive mode in a foreground mode, basically a way to run commands on the docker from our terminal. Thus, in our case docker run -it my\_app
will suffice.
Once we run the container, docker names it (weirdly) and set an id. To get this information, rundocker ps And below is its output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
71ed79a8d99f my_app “/bin/bash” 6sec ago Up 5sec eager_elbakyan
to simply stop a container, we can use the command docker stop container\_id
where in our case, docker stop 71ed79a8d99f
. It’s also possible to enter exit in the terminal to get the same outcome. Duly note, this command doesn’t delete the container — more on that as we advance.
Furthermore, if you’d like to get all types of containers, just run docker ps -a
and now it will be shown with an exit status. If you’d like to rerun it, just type docker start container\_id
, btw docker allows using the name instead of the container_id and, it is possible to set the name of the image as follows: docker run -it — name dvir\_app my\_app
Sometimes we would like to run a container without connecting to it; in this case, we can use the -d
flag (detached): docker run -d image\_name
.
If eventually, we would like to connect the docker, we’ll just need to run: docker exec -it container\_id /bin/bash
and simple as that, we will get a terminal into our running docker. More commands can be found at the official site:
Among the commands I’ve written above, there are a few more popular:
docker run --rm -it image\_name
will remove the docker’s file system after we close the container.
docker run —-env my\_life=”/now/or\_never.txt” -it image\_name
Usually, we use some environment variables on our container, the —-env
flag helps you set it during a run.
We can use the --entrypoint
flag to change the entry point set in the docker image. for example, if the docker image is set to run a service, but we would like to get a bash terminal before it runs it, we can simply set it like this:
docker run -it --entrypoint /bin/bash image\_name
or in a shorter version docker run -it image\_name /bin/bash
.
Lastly, I would like to touch the how to delete an image/container. Those files usually weigh quite a lot, so most of keeping our system clean and sharp. The command docker rmi image\_name/id
will delete the image; if we would like to remove a container, simply type docker rm image\_id
. Both won’t clear the space of those files, so a different command needs to be used:
docker image prune
, it will clean the dangling image (as I wrote in part I). A deadlier command is docker system prune
Which removes all stopped containers, unused networks, dangling images, and build cache.
Finally, to destroy everything and start from scratch docker system prune -a
, more on that can be found on the official documentation:
There are also official Docker images of all the well-known distributions, such as Ubuntu, Postgres, and more, which are stored in a repository called docker hub:
Docker Hub Container Image Library | App Containerization
You can even upload your container there. So, how can you download from it?
Just do docker pull
. For example, if we want to download ubuntu, we’ll search it in the hub and reach it: https://hub.docker.com/_/ubuntu. All the listed images are visible on the tag tab, and we will choose depending on the need. Eventually docker pull ubuntu:latest
will pull the latest image from the docker hub (since we haven’t specified the exact repo, the default is the hub).
That’s it for this part; I hope you’ve found it relevant and as simplified as it can be. More on networks, volumes, using docker-compose, etc. on part III
Top comments (0)