可參考學習地址: 極客學院docker教程,還不錯,能夠參考docker
下載地址:Dockerhub地址ubuntu
有兩種方式能夠得到新的鏡像windows
在terminal中輸入以下命令:bash
sudo Docker pull tingtinglu/docker
學習
注:
① tingtinglu/docker是dockerhub上的pre-built image的名字
② 如何獲取pre-built image的名字?須要在dockerhub上搜索本身須要的imageui
詳細介紹見docker的官方文檔:build your own image,介紹來如何利用dockerfile編譯本身的鏡像this
(1)獲取dockerfile(即下載名稱爲dockerfile的文件,內容爲構造docker的一些命令)spa
(2)利用terminal的cd命令進入到dockerfile所在的文件夾.net
(3)在名稱爲「dockerfile」的文件所在的文件夾下(即terminal cd到該文件夾),執行以下命令命令行
docker build -t ImageName .
注1:ImageName是利用dockerfile生成的image的name(自行設置)
注2:不要忘記ImageName後面的點「.」
有時候,已經獲得了一個image,但須要往該image中作新的更改,例如,想要在docker的opt路徑下添加一個新的路徑workspace,此時,能夠經過dockerfile進行,方法以下:
① 新建一個dockerfile,添加以下內容
RUN mkdir /opt/workspace
② 利用terminal進入該dockerfile所在路徑,而後,built該dockerfile,即執行以下命令:
docker build -t ImageNameOld
必定要注意,這裏的ImageNameOld是你想要添加該變化的那個image的名字
在命令行中輸入相似以下的命令:
sudo docker run -it --rm -p 8888:8888 -v `pwd`/workspace:/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock
下面對該條命令進行剖析
(1)-p 8888:8888
將docker中的jupyter的8888接口與本機的8888接口關聯
(2)-v `pwd`/workspace:/opt/workspace
將當前路徑下(由`pwd`)的workspaace文件夾映射到docker中的opt路徑下的的workspace文件夾,這樣,docker下的opt/workspace就指向來本機的`pwd`/workspace文件夾;
要實現該目的,還有一個辦法:利用terminel進入到本機的workspace路徑下,而後: -v ¨$(pwd):/opt/workspace¨
具體的圖示以下:
此時,再進入docker後,docker的/opt/workspace/中的內容就變爲的本機的workspace中的內容;
能夠認爲,不管原來docker的/opt/workspace中是否由內容,如今該workspace的內容都被本機的workspace覆蓋來,即docker的opt/workspace此時再也不指向daocker中的opt/workspace,而只是指向本機的workspace文件夾
(3)有時,docker可能不能上網,那麼,能夠加入--net=host
,即完整的命令以下:
sudo docker run -it --rm -p 8888:8888 --net=host -v `pwd`/workspace:/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock
(4)若是是windows系統,那麼,文件夾映射須要絕對路徑
即須要以下命令:
sudo docker run -it --rm -p 8888:8888 --net=host -v `pwd`/workspace:/root/opt/workspace -v `pwd`/data:/root/data tingtinglu/deepdock
而且,windows目前只支持C盤!必定要注意!
注:docker的指令模式是:標示+參數,即:[sudo] docker [flags] [command] [arguments]
eg.: docker run -i -t ubuntu /bin/bash
sudo docker images
會獲得本機的全部images的信息
sudo docker ps
顯示的信息以下:
Container Id | IMAGE | command | Created | status | ports | names |
---|---|---|---|---|---|---|
container的ID | 生成該container的image的名稱 | 生成該container的時間 | 該container的狀態 | ContainerName(自動分配) |
sudo docker exec -it containerName bash
圖例:
(1)ls
列出docker container下的文件夾
能夠看到,在container的ls文件夾下,有兩個文件夾,分別爲caffe和workspace
(2) cd..
返回到當前文件夾opt的上一級文件夾
而且列出該文件夾下的全部文件ls
能夠看到該container的全部文件夾
(3)這裏應該注意:
-v `pwd`/workspace:/opt/workspace
使得本機的當前路徑`pwd`下(`pwd`爲生成docker container時所在的路徑)下的workspace文件夾與docker container中的opt文件夾下的workspace發生映射關係
-v `pwd`/data:/root/data
使得本機的當前路徑`pwd`下的data文件夾與docker container中的root文件夾下的data發生映射關係
若是對docker的作了一些更改,而且,這些更改不是安裝了jupyter這樣的軟件,而只是安裝了一些package,那麼,保存新的鏡像只須要:
sudo docker commit containerID newImageName
containerID爲要保存的容器的ID,newImageName爲新image的名字
例如:ting/caffe:version1這樣的名字,其中,version1爲新容器的flag,能夠用來標識新image的版本信息
從主機中移除鏡像 sudo docker rmi 鏡像名稱
中止正在運行的container sudo docker stop containerName
移除某個container sudo docker rm containerID
注:輸入ID時,沒必要須輸入完整的ID,通常輸入前幾個字符即可以識別出
docker rm <containerid>
即8a1faaf9d24b
將該container移除Cannot connect to the Docker daemon. Is the docker daemon running on
this host?
1.最近發現,本身本機的鏡像有許可能是none,通過查詢發現緣由多是:
重複pull同一個tag的鏡像,而且,在pull新的鏡像時(與本機已有的舊鏡像具備相同的tag),舊鏡像已經被容器佔用,那麼,在pull新鏡像後,以前被佔用的舊鏡像就會變爲none
2.在本機書寫dockerfile,該dockerfile用到了本機的鏡像A(From A),利用該dockerfile build 鏡像B,那麼,鏡像B被稱爲鏡像A的child