1. 程式人生 > >Docker概念及操作命令細節(帶詳細實際操作截圖)

Docker概念及操作命令細節(帶詳細實際操作截圖)

由於在公司最近要用伺服器上的GPU裝caffe進行開發,但是沒有管理員許可權,又怕自己裝環境把整體的環境弄亂了,因此便打算使用docker來進行開發工作。

概念

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。

Docker的應用場景

Web 應用的自動化打包和釋出。
自動化測試和持續整合、釋出。
在服務型環境中部署和調整資料庫或其他的後臺應用。
從頭編譯或者擴充套件現有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環境。

Docker 的優點

1、簡化程式:
Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,便可以實現虛擬化。Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數週的 任務,在Docker容器的處理下,只需要數秒就能完成。
2、避免選擇恐懼症:
如果你有選擇恐懼症,還是資深患者。Docker 幫你 打包你的糾結!比如 Docker 映象;Docker 映象中包含了執行環境和配置,所以 Docker 可以簡化部署多種應用例項工作。比如 Web 應用、後臺應用、資料庫應用、大資料應用比如 Hadoop 叢集、訊息佇列等等都可以打包成一個映象部署。
3、節省開支:
一方面,雲端計算時代到來,使開發者不必為了追求效果而配置高額的硬體,Docker 改變了高效能必然高價格的思維定勢。Docker 與雲的結合,讓雲空間得到更充分的利用。不僅解決了硬體管理的問題,也改變了虛擬化的方式。

Docker框架

這裡寫圖片描述
這裡寫圖片描述

以上內容來自:http://www.runoob.com/docker/docker-architecture.html

Docker常用命令

1、檢視現存本地映象
images即映象的意思,每個映象即單獨的一套環境,如windows映象,Ubuntu映象,docker在這些映象裡為你裝好了所需要的軟體環境,所以說非常方便

docker images
//如下圖:

這裡寫圖片描述

2、尋找所需映象

docker search image_name
//例如:docker search caffe(caffe為一個框架),結果如下圖所示,根據星星數列出了可以下載的caffe版本。

這裡寫圖片描述

3、下載所需映象

docker pull image_name
//例如:docker pull bvlc/caffe

4、執行映象

docker run --rm -ti nvidia/cuda bash
//執行成功後即進入這個映象的root許可權根目錄下,同時會產生一個容器,容器名即為7a035917f5b8,如下圖: 

這裡寫圖片描述

5、檢視映象系統資訊

cat /etc/issue
//這裡要進入映象之後,再輸入本條命令

6、檢視執行中的容器

docker ps

7、退出映象

exit
//同時會銷燬掉已經建立的容器,推出前記得把想要儲存的儲存。

8、檢視映象建立歷史

docker history images_name
//例如:docker history nvidia/cuda,如下圖所示,顯示了映象被建立時候的資訊。

這裡寫圖片描述

9、刪除映象

docker rmi -f ID
//注意在刪除映象的過程中要保證映象內沒有容器在執行,否則將刪除失敗,如下圖:

這裡寫圖片描述
因此正確的刪除順序為先停止映象內的容器,而後再刪除映象。
正確的命令順序為:

docker stop container_ID 
docker rmi -f image_name
//刪除後的結果如圖所示:

這裡寫圖片描述

10、儲存容器內容為新的映象

docker commit  container_id   new_image_name

比如我這裡先執行nvidia/cuda映象,系統同時建立了一個ID為15df406da334的容器,可以看到剛開始的home目錄下是什麼都沒有的,然後我建立一個叫做hello的目錄,如下圖所示:我想把這個修改過的容器儲存為一個新的映象。
這裡寫圖片描述
接下來我需要重新開一個終端,然後輸入docker commit container_id new_image_name 便完成了對容器修改內容的儲存。如下圖所示,產生了一個新的名為newimage的映象。下次我們便可以啟動這個映象,來還原上次的的工作環境。
這裡寫圖片描述

11、停止容器

docker stop container_id
//如下圖:

這裡寫圖片描述

12、執行已有容器

docker exec -it contiainer_name /bin/bash
//如下圖所示:

這裡寫圖片描述

13、掛載本地目錄
注意掛載的過程中,會覆蓋原有的目錄下的內容,因此掛載前最好先建一個空的目錄,然後掛載在這個目錄下。掛載完之後建議儲存容器。

docker run -it -v 本地檔案絕對路徑:容器中目錄 映象名 /bin/bash
例如:docker run -it -v /data/yanpengfei:/home newimage /bin/bash

這裡寫圖片描述

14、從容器裡面拷檔案到宿主機
在宿主機裡面執行如下命令

docker cp 容器名:要拷貝的檔案在容器裡面的路徑       要拷貝到宿主機的相應路徑
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt

15、從宿主機拷檔案到容器裡面

在宿主機裡面執行如下命令

docker cp 要拷貝的檔案路徑 容器名:要拷貝到容器裡面對應的路徑     
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js

16、暫停容器(和停止刪除是不一樣的,暫停下次還可以啟動,相當於休眠、快照功能)
這裡寫圖片描述

17、上傳映象至docker庫用以備份
見博主連結:https://www.cnblogs.com/boshen-hzb/p/6373549.html