Let's try: Docker
We can manage to build an environment with less resources than Virtual Machine.
Hello all guys~
This time is for programming contents after short period of psychology in those couple of episodes.
I have been involving coding in various languages such as Bash, JAVA, Python, and NodeJS. Therefore, I need one tool to accommodate me for them.
Source: https://www.docker.com/company/newsroom/media-resources
Docker is one of elementary tools of all developers, I guess. We can manage to build an environment with less resources than Virtual Machine and need more command line skill to deal with.
What is this for?
For example, we need to develop a program with tens dependencies. Only that operation can spend whole day. And the target OS is Unix but our laptops are Windows. At last, there are 3 Unix machines for production, means whole day for installing those dependencies again.
Today, we have this, Docker.
Docker is as a ready-to-use box. It contains dependencies and OS as we desire for our development.
What is in the Docker box?
Docker is a program. We need image of Docker as a definition of works. An image consists of necessary components. Once we have the image, we can build a container based on that image and open the container to work on it.
Install Docker
Firstly, we have to visit https://hub.docker.com/ and register. Then download the installer and install it.
We can find this icon at the Taskbar as the left-handed figure when we finished installing Docker.
Try this command on Terminal (cmd in case of Windows).
1
docker -v
If it shows a version number like above, we completely installed Docker. Yeah.
Try an image
Let’s try “Hello world” image.
1. Download the image
At Docker Hub, we can find the command to download this (link) and its description.
The command to download is:
1
docker pull hello-world
2. Verify the image
The command to list all images is:
1
2
3
docker images
# or
docker image ls
3. Build a container from the image
Run this
1
docker run hello-world
Each image will generate different output when build a container. This example just shows a welcome message.
Try Other image: Jupyter
These days, I often code in Python using Jupyter. This is how I use docker for Jupyter.
1. Build a container
1
2
3
4
# download image
docker pull jupyter/minimal-notebook
# build container + open port 1880 + named "jupyter"
docker run -it -p 8888:8888 – name jupyter jupyter/minimal-notebook
After run, we can put options as below:
-it
from-i
(interactive) to enable typing commands in Terminal and-t
(pseudo-TTY) means display result of the commands.-p
from--port
means connect ports of container to ones of the computer. As you see, command connects port 8888:8888 that is port 8888 of Jupyter container to port 8888 of this computer. In real case we should check the ports from image documents.--name
to give a name for this container to comfort us in next uses. If we don’t give its name, a random name will be created.
All options can be found here.
2. Work on the container
The link to Jupyter browser will be created after run the container.
3. Restart the container
Let say, we need to pause working this time. Use this command:
1
docker stop jupyter
Then if we have time and start working again.
1
docker start jupyter && docker attach jupyter
Frequently used commands
- Check if the port 8888 is unused
1
2
3
4
# cmd on Windows
netstat -na | find "8888"
# terminal on Unix
netstat -na | grep "8888"
- List all images
1
2
docker images
docker image ls
- Remove an image
1
2
3
4
5
6
# remove one image
docker image rm {image_id}
# remove unused images
docker images prune
# remove all images
docker image rm $(docker images -q)
- Run a container from the image
1
docker run [-i=interaction] [-t=pseudo-tty] [-d=background] [-p=port {container_port}:{host_port}] [--name {name}] [-v=mount_volume {host_path}:{container_path}] [--link=connect_containers {container_name_or_id}:{link_alias} image [entry_point]
- start/stop a container
1
2
3
docker start {container_name}
docker stop {container_name}
docker restart {container_name}
- Run a command to a started container
1
2
3
4
# make sure the container is started
docker restart {container_name}
# execute command
docker exec [-i=interaction] [-t=pseudo-tty] [-u=user {username}] container_name {entry_point}
- Show console of a started container
1
docker attach {container_name}
- Remove a container
1
2
3
4
# remove one container
docker rm {container_name}
# remove all containers
docker rm $(docker ps -a -q)
All command is documented this link.
Real world usages
Based on my own projects, I used docker containers on both development servers and production. Also use Git to transfer source code.
Hope soon I can have a chance to talk about it.
Bye~