PA0 is a guide to GNU/Linux development environment configuration. You are guided to install a GNU/Linux development environment. All PAs and Labs are done in this environment. If you are new to GNU/Linux, and you encounter some troubles during the configuration, which are not mentioned in this lecture note (such as "No such file or directory"), that is your fault. Go back to read this lecture note carefully. Remember, the machine is always right!
Docker is an implementation of the lightweight virtualization technology. Virtual machines built by this technology is called "container". By using Docker, it is very easy to deploy GNU/Linux applications.
If you already have one copy of GNU/Linux distribution different from that we recommend, and you want to use your copy as the development environment, we still encourage you to install docker on your GNU/Linux distribution to use the same GNU/Linux distribution we recommend over docker to avoid issues brought by platform disparity. Refer to Docker online Document for more information about installing Docker for GNU/Linux. It is OK if you still insist on your GNU/Linux distribution. But if you encounter some troubles because of platform disparity, please search the Internet for trouble-shooting.
It it also OK to use traditional virtual machines, such as VMWare or VirtualBox, instead of Docker. If you decide to do this and you do not have a copy of GNU/Linux, please install Debian 9 distribution in the virtual machine. Also, please search the Internet for trouble-shooting if you have any problems about virtual machines.
Download Docker from this website according to your host operating system,
then install Docker with default settings.
Reboot the system if necessary.
If your operating system can not meet the requirement of installing Docker,
please upgrade your operating system.
Do not install
Docker Toolbox instead.
It seems not very stable in Windows since it is based on VirtualBox.
Dockerfile is the configuration file used to build a Docker image.
Now we are going to prepare a Dockerfile with proper contentby using the
terminal working environment.
- If your host is GNU/Linux or Mac, you can use the default terminal in the system.
- If your host is Windows, open
Type the following commands after the prompt, one command per line.
Every command is issued by pressing the
The contents after a
# is the comment about the command,
and you do not need to type the comment.
mkdir mydocker # create a directory with name "mydocker" cd mydocker # enter this directory
Now use the text editor in the host to new a file called
- Windows: Type command
notepad Dockerfileto open Notepad.
- MacOS: Type command
open -e Dockerfileto open TextEdit.
- GNU/Linux: Use your favourite editor to open Dockerfile.
Now copy the following contents into Dockerfile:
# setting base image FROM debian # new a directory for sshd to run RUN mkdir -p /var/run/sshd # installing ssh server RUN apt-get update RUN apt-get install -y openssh-server # installing sudo RUN apt-get install -y sudo # make ssh services use IPv4 to let X11 forwarding work correctly RUN echo AddressFamily inet >> /etc/ssh/sshd_config # defining user account imformation ARG username=ics ARG userpasswd=ics # adding user RUN useradd -ms /bin/bash $username && (echo $username:$userpasswd | chpasswd) # adding user to sudo group RUN adduser $username sudo # setting running application CMD /usr/sbin/sshd -D
We choose the Debian distribution as the base image,
since it can be quite small.
userpasswd above to your favourite account settings.
Save the file and exit the editor.
For Windows user,
notepad will append suffix
.txt to the saved file.
This is unexpected.
Use the following command to rename the file.
mv Dockerfile.txt Dockerfile # rename the file to remove the suffix in Windows
Building Docker image
Keep the Internet conntected. Type the following command to build our image:
docker build -t ics-image .
This command will build an image with a tag
using the Dockerfile in the current directory (mydocker).
In particular, if your host is GNU/Linux,
all Docker commands should be executed with root privilege,
or alternatively you can add your account to the group
docker before executing any docker commands.
If it is the first time you run this command,
Docker will pull the base image
debian from Docker Hub.
This will cost several minutes to finish.
After the command above finished, type the following command to show Docker images:
This command will show information about all Docker images.
REPOSITORY TAG IMAGE ID CREATED SIZE ics-image latest 7d9495d03763 4 minutes ago 210 MB debian latest fb434121fc77 4 hours ago 100 MB
If you see a repository with name
ics-image, you are done with building image.
Now we can remove the directory mentioned above.
cd .. # go back to the parent directory rm -r mydocker # remove the `mydocker` directory
Creating Debian container
After building the image, now we can create a container. Type the following command:
docker create --name=ics-vm -p 20022:22 ics-image
This command will create a container with the following property:
- the name of the container is
- the Docker image is
ics-image, which we just built
- the default SSH port (
22) in the container is bound to port
20022in the docker host
If the above command fails because a container with the same name already exists, type the following command to remove the existing container:
docker rm ics-vm
Then create the container again.
To see whether the container is created successfully, type the following command to show containers:
docker ps -a
This command will show information about all Docker containers.
If you see a container with name
ics-vm, you are done with creating container.