Docker在windows下的使用【二】

來源:互聯網
上載者:User

標籤:介紹   size   ubuntu   實現   lock   pre   bsp   dockerhub   nbsp   

可參考學習地址: 極客學院docker教程,還不錯,可以參考

1.Dockerhub下載鏡像

:Dockerhub地址

有兩種方式可以獲得新的鏡像

  • 直接從dockerhub下載編譯好的image(該編譯過程在docker hub的雲端完成)(見3.1)
  • 下載docekrfile檔案,在本機進行build
直接在dockerhub上pull pre-built image

在terminal中輸入如下命令:

sudo Docker pull tingtinglu/docker

注: 
① tingtinglu/docker是dockerhub上的pre-built image的名字 
② 如何擷取pre-built image的名字?需要在dockerhub上搜尋自己需要的image

下載dockerfile檔案,在本機進行build

詳細介紹見docker的官方文檔:build your own image,介紹來如何利用dockerfile編譯自己的鏡像

(1)擷取dockerfile(即下載名稱為dockerfile的檔案,內容為構造docker的一些命令)

(2)利用terminal的cd命令進入到dockerfile所在的檔案夾

(3)在名稱為“dockerfile”的檔案所在的檔案夾下(即terminal cd到該檔案夾),執行如下命令

docker build -t ImageName .

注1:ImageName是利用dockerfile產生的image的name(自行設定) 
注2:不要忘記ImageName後面的點“.”

利用Dockerfile檔案對已存在的image做某些更改

有時候,已經得到了一個image,但需要往該image中做新的更改,例如,想要在docker的opt路徑下添加一個新的路徑workspace,此時,可以通過dockerfile進行,方法如下:

① 建立一個dockerfile,添加如下內容

RUN mkdir /opt/workspace

② 利用terminal進入該dockerfile所在路徑,然後,built該dockerfile,即執行如下命令:

docker build -t ImageNameOld

一定要注意,這裡的ImageNameOld是你想要添加該變化的那個image的名字

 2.利用下載的鏡像產生容器

在命令列中輸入類似如下的命令:

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

 

3.查看原生docker images
sudo docker images

會得到原生所有images的資訊

  • 第一列是docker image的名稱
  • 第二列是該image的tag(同一個image有時需要進行多次更改,為了區分不同版本image的區別,為image賦予了一個tag)
  • 第三列是docker image的ID
  • 第四列是該docekr image的建立時間
  • 第五列是該docker image的大小
4. 查看正在啟動並執行container
sudo docker ps

 

顯示的資訊如下:

Container Id IMAGE command Created status ports names
container的ID 產生該container的image的名稱   產生該container的時間 該container的狀態   ContainerName(自動分配)
5. 以bash模式進入正在啟動並執行docker
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發生映射關係 

6. 將一個容器儲存為image

如果對docker的做了一些更改,並且,這些更改不是安裝了jupyter這樣的軟體,而只是安裝了一些package,那麼,儲存新的鏡像只需要:

sudo docker commit containerID newImageName

containerID為要儲存的容器的ID,newImageName為新image的名字 
例如:ting/caffe:version1這樣的名字,其中,version1為新容器的flag,可以用來標識新image的版本資訊

7. 從已經建立的容器中更新鏡像,並且提交這個鏡像
  • 在容器中進行相應的更改 
    例如:apt-get install wget
  • 將容器儲存為新的鏡像 
    sudo docker commit containerID newImageName:tag
8. 刪除/停止等命令
  • 從主機中移除鏡像 
    sudo docker rmi 鏡像名稱

  • 停止正在啟動並執行container 
    sudo docker stop containerName

  • 移除某個container 
    sudo docker rm containerID

註:輸入ID時,不必須輸入完整的ID,一般輸入前幾個字元便可以識別出

各種錯誤記錄 Error response from daemon: conflict: unable to delete 40787553f761 (must be forced) - image is being used by stopped container 8a1faaf9d24b

 

  • 該問題的原因是:由image-40787553f761產生的container(ID:8a1faaf9d24b)仍舊存在
  • 但利用sudo docker ps,卻無法顯示container-8a1faaf9d24b,因為該container-8a1faaf9d24b雖然沒有在運行,但它仍然存在,所以必須將其移除
  • 解決辦法:利用docker rm <containerid>8a1faaf9d24b將該container移除

Cannot connect to the Docker daemon. Is the docker daemon running on 
this host?

  • 需要用到sudo
其他注意事項

1.最近發現,自己原生鏡像有許多是none,經過查詢發現原因可能是:

重複pull同一個tag的鏡像,並且,在pull新的鏡像時(與本機已有的舊鏡像具有相同的tag),舊鏡像已經被容器佔用,那麼,在pull新鏡像後,之前被佔用的舊鏡像就會變為none

2.在本機書寫dockerfile,該dockerfile用到了原生鏡像A(From A),利用該dockerfile build 鏡像B,那麼,鏡像B被稱為鏡像A的child

Docker在windows下的使用【二】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.