Docker for Windows setup
19 May 2016what
While developing on Windows, sometimes I need to switch to a *nix-like environment. Right now Docker has released the Docker for Windows. But the documents are lacking and I did not use Docker too much before, so sometimes I got confused, and here are some notes.
docker installation
We can download the stable or edge version.
Moreover, we need a Windows 10 pro + with the Hyper-V virtual machine engine enabled. Virtualbox is unusable while using Docker based on Hyper-V. And we may need to configure the Virtual Switch before or after installing Docker, unless we do not have any configuration changed before.
After installation, we get a MobyLinuxVM
virtual machine in Hyper-V Manager. And also the disk is defaultly called MobyLinuxVM.vhdx
, located at:
%PUBLIC%\Documents\Hyper-V\Virtual hard disks
The virtual disk file is always increasing and could become really huge.
docker mirrors / docker 镜像
LUG@USTC or 网易蜂巢的 DockerHub 镜像.
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
start Docker and manage file sharing
If we want to mount a directory / folder, we need to manage the local drive(s) available to the containers. Only after that we can share the directories on that drive to containers. It’s confused at first time, but after figuring out the concepts it’s easy to understand.
-
Double-click the “Docker for Windows” in the start menu.
-
Right-click on the Docker mascot on the notification area on the taskbar, then “Settings…” then “Manage shared drives…” then select the drives then “Ok”. User password is needed.
start, commit, shutdown the images
On Windows, PowerShell
(or Git Bash
) (not cmd
though) is the (better) terminal in *nix replacement. After double-clicking the “Docker for Windows” in the start menu, we could run this inside PowerShell
to check the status.
docker info
docker ps
docker images
jupyter/datascience-notebook is one of the official docker image by Python Jupyter Project. We could (should) use it if we are doing Python / R / data science development. But pay attention that the image is huge (5 ~ 10 GB).
docker pull jupyter/datascience-notebook
After pulling the images, we could start the images. The simpliest way is
docker run -d -p 8888:8888 jupyter/datascience-notebook
But if we want to mount the directory, we should use -v from-dir:to-dir
, and if the directory has the white spaces, we should use -v 'from dir:to dir'
. This really confused me in the beginning, because the quotation marks should wrap the whole parameter string, instead of the substring before the colon! Moreover, if using jupyter/datascience-notebook
, we should mount the folder as /home/jovyan/work
. For example,
docker run -d -p 8888:8888 -v 'C:/all projects:/home/jovyan/work' jupyter/datascience-notebook
# abcde... # container id
According to the #211, if we want to grant the sudo
privilege, we could add --user root -e GRANT_SUDO=yes
:
docker run -d -p 8888:8888 --user root -e GRANT_SUDO=yes jupyter/datascience-notebook
Attention that in this case we could login the system as jovyan
and run sudo apt-get update
inside the terminal opened in jupyter notebook in the browser, but if we login the system directly using docker exec -it
, we would become the user root
.
After some manipulations, we could use commit
to save a snapshot of the container.
docker commit $(docker ps -aq) testcontainer
If we want to shut down the container, use ‘rm’, optionally with -f
:
docker rm -f $(docker ps -aq)
After running rm
in the PowerShell
, we could exit Docker for Windows.
running
While running jupyter/datascience-notebook
, we could “log in” to the bash
inside:
docker exec -it $(docker ps -aq) /bin/bash
Or access the jupyter notebook using browser using one of the addresses:
http://docker:8888
http://docker.local:8888
Attention: localhost
is not the right anwser at least on the Windows! It is another confusion at the first time.
after multiple docker pull
docker images
may return some <none>
unused images. As a result, we need to remove them:
docker rmi $( docker images -q -f dangling=true)
in the r kernel notebooks
We have to set something to make it working properly:
options(repos = c(CRAN = "https://cran.rstudio.com")) # CRAN
Sys.setenv(TAR = '/bin/tar') # tar command
End
So please start happy hacking, using the Linux developement enviroment on Windows.