Docker 鏡像、容器、倉庫的概念及基本操作


Docker 包括三個基本概念:

鏡像(Image)
容器(Container)
倉庫(Repository)

這三部分組成了Docker的整個生命周期,如下圖所示,容器是由鏡像實例化而來的,這和我們學習的面向對象的概念十分相似,我們可以把鏡像想象成類,把容器想象成類經過實例化后的對象,這樣就非常好理解鏡像和容器的關系了。

Docker鏡像

Docker鏡像(Image)類似於虛擬機的鏡像,可以將他理解為一個面向Docker引擎的只讀模板,包含了文件系統。

例如:一個鏡像可以完全包含了Ubuntu操作系統環境,可以把它稱作一個Ubuntu鏡像。鏡像也可以安裝了Apache應用程序(或其他軟件),可以把它稱為一個Apache鏡像。

鏡像是創建Docker容器的基礎,通過版本管理和增量的文件系統,Docker提供了一套十分簡單的機制來創建和更新現有的鏡像。用戶可以從網上下載一個已經做好的應用鏡像,並通過命令直接使用。總之,應用運行是需要環境的,而鏡像就是來提供這種環境。

Docker容器

Docker容器(Container)類似於一個輕量級的沙箱子(因為Docker是基於Linux內核的虛擬技術,所以消耗資源十分少),Docker利用容器來運行和隔離應用。

容器是從鏡像創建的應用運行實例,可以將其啟動、開始、停止、刪除,而這些容器都是相互隔離、互不可見的。

可以吧每個容器看作一個簡易版的Linux系統環境(包括了root用戶權限、進程空間、用戶空間和網絡空間),以及與運行在其中的應用程序打包而成的應用盒子。

鏡像自身是只讀的。容器從鏡像啟動的時候,Docker會在鏡像的最上層創建一個可寫層,鏡像本身將保持不變。就像用ISO裝系統之后,ISO並沒有什么變化一樣。

Docker倉庫

Docker倉庫(Repository)類似與代碼倉庫,是Docker集中存放鏡像文件的場所。

有時候會看到有資料將Docker倉庫和注冊服務器(Registry)混為一談,並不嚴格區分。實際上,注冊服務器是存放倉庫的地方,其上往往存放着多個倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,通過不同的標簽(tag)來進行區分。例如存放Ubuntu操作系統鏡像的倉庫,稱為Ubuntu倉庫,其中可能包括14.04,12.04等不同版本的鏡像。

根據存儲的鏡像公開分享與否,Docker倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。

目前,最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括Docker Pool等,可以提供穩定的國內訪問。如果用戶不希望公開分享自己的鏡像文件,Docker也支持用戶在本地網絡內創建一個只能自己訪問的私有倉庫。

當用戶創建了自己的鏡像之后就可以使用push將它上傳到指定的公有或則私有倉庫。這樣用戶下次在另一台機器上使用該鏡像時,只需將其從倉庫pull下來就可以了。

命令收集:

容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
容器操作運維 — docker [ps|inspect|top|attach|exec|events|logs|wait|export|import|port]
容器rootfs命令 — docker [commit|cp|diff]
鏡像倉庫 — docker [login|pull|push|search]
本地鏡像管理 — docker [images|rmi|tag|build|history|save|import]
其他命令 — docker [info|version]

查看docker信息:

$ docker version
# 或者
$ docker info

Docker 需要用戶具有 sudo 權限,為了避免每次命令都輸入sudo,可以把用戶加入 Docker 用戶組(官方文檔

$ sudo usermod -aG docker $USER

服務啟動,重啟,狀態

[hongdada@localhost home]$ systemctl stop docker.service
 
[hongdada@localhost home]$ systemctl restart docker.service
 
[hongdada@localhost home]$ systemctl status docker.service

images相關命令:

以鏡像centos為例

登錄倉庫 docker login
查找鏡像docker search centos
下載鏡像docker pull centos
上傳鏡像docker push centos
刪除鏡像docker rmi centos  說明:如果有多個tag,則指定tag只會刪除tag,而不會刪除鏡像本身。
查看鏡像docker images
查看具體某一個鏡像的詳細信息:docker inspect  centos
更改tag: docker tag  docker.io/centos  21yunwei:latest
創建鏡像docker commit  容器ID 鏡像名稱   注:創建鏡像有三種方式,基於容器創建,基於本地模板創建,基於dockerfile創建
保存鏡像docker save  -o testcentos.tar 21yunwei:latest
載入鏡像docker  load < tesetcentos.tar
# 列出本機的所有 image 文件。
$ docker image ls

# 刪除 image 文件
$ docker image rm [imageName]

# 搜索鏡像
$ docker search mysql (輸出信息包括鏡像名字、描述、星級、是否為官方創建、是否自動創建)

# image 文件從倉庫抓取到本地。
$ docker image pull library/hello-world

# 運行image文件
$ docker container run hello-world

 container相關命令:

列出本機正在運行的容器:docker container ls
列出本機所有容器,包括終止運行的容器:docker container ls --all
創建容器docker create -ti image  容器ID:cid
啟動容器docker start  cid
運行容器docker run  -dit cid 等同於docker create+docker start
停止容器服務 docker container kill cid
關閉容器docker stop  cid
重啟容器docker restart  cid
刪除容器docker rm cid    #注意數據卷
刪除所有容器docker rm `docker ps -a -q`  docker kill `docker ps -q`

阻塞對容器的其他調用方法,直到容器停止后退出 docker wait  cid
查看容器docker ps 或者docker ps -a
列出容器ID docker ps  -q (docker ps  -q  -a)
容器文件拷貝 docker  cp cid:路徑 宿主機路徑或docker  cp 宿主機路徑你 cid:路徑
查看容器進程docker top cid
查看容器日志docker logs cid
查看容器變化 docker diff  cid
進入容器docker exec -ti cid /bin/bash或者 docker attach cid(不推薦,終端顯示相同,顯示不安全且容易卡住)
查看容器詳細信息 docker inspect cid 包括配置信息,名稱,命令、網路配置以及很多有用數據
查看容器端口 docker port  cid

導出容器docker export 3ad>21yunwei.tar
導入容器cat 21yunwei.tar | docker import -test/centos:latest

 

 

https://greenlightt.github.io/2018/02/04/docker-image-container/

https://blog.csdn.net/SmalOSnail/article/details/53117496

http://blog.daocloud.io/principle-of-docker-image/

http://www.21yunwei.com/archives/4437


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM