本文章是在網易云課堂的課程學習中編寫,部分圖片從網易云課堂ppt引用
【Docker鏡像操作】
1、拉取鏡像
docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標簽]
- 選項:可以通過 docker pull --help 命令看到
- 鏡像倉庫地址:地址的格式一般是 <域名/IP>[:端口號]。默認地址是 Docker Hub。
- 倉庫名:如之前所說,這里的倉庫名是兩段式名稱,即 <用戶名>/<軟件名>。對于 Docker Hub,如果不給出用戶名,則默認為 library,也就是官方鏡像。
比如:docker pull ubuntu:16.04,沒有給出 Docker鏡像倉庫地址,將會從 Docker Hub 的 library/ubuntu 倉庫中獲取鏡像
2、運行鏡像
有了鏡像后,我們就能以這個鏡像為基礎,啟動并運行一個容器。以上面拉取的 ubuntu:16.04 為例
docker run -it --rm ubuntu:16.04 bash
- -it:這是兩個參數。-i:交互式操作, -t:終端。這樣可以進入bash 執行命令并查看返回結果
- -rm:容器退出后隨之將其刪除。默認情況下,退出的容器并不會立即刪除,除非手動docker rm。如果不需要排障和保留結果,則可以使用--rm 避免浪費空間
- ubuntu:16.04:以ubuntu:16.04 鏡像為基礎來啟動容器
- bash:放在鏡像名后的是命令,使用bash可以有個交互式 Shell
執行后,進入到容器中,可以執行命令并查看結果。exit 可以退出容器
3、列出鏡像
3.1 查看倉庫名、標簽、鏡像 ID、創建時間 以及 所占用的空間
docker image ls
docker images
不能將docker image ls 列表中的鏡像體積總和作為所有鏡像實際硬盤消耗。
Docker 鏡像是多層存儲結構,并且可以繼承、復用,因此不同鏡像可能會因為使用相同的基礎鏡像,從而擁有共同的層。
由于Docker 使用 Union FS,相同的層只需要保存一份即可,因此實際鏡像硬盤占用空間可能比這個列表中的鏡像大小總和要小的多。
3.2 查看鏡像、容器、數據卷所占用的空間
docker system df
3.3 虛懸鏡像(倉庫名、標簽均為none的鏡像)
一般來說,虛懸鏡像已經失去了存在的價值,是可以刪除的
docker image ls -f dangling=true #查看虛懸鏡像
- -f:即--filter 是一個過濾器參數
docker image prune #刪除虛懸鏡像
3.4 中間層鏡像
中間層鏡像是其它鏡像所依賴的鏡像,默認的 docker image ls 列表中只會顯示頂層鏡像。中間層鏡像不能隨意刪除,否則惠導致上層鏡像丟失依賴而出錯
docker image ls -a
3.5 列出部分鏡像
指定倉庫名和標簽,即可列出特定的某個鏡像,還可以加上過濾器參數 -f
docker image ls ubuntu #列出ubuntu鏡像
docker image ls ubuntu:16.04 #列出 ubuntu:16.04 鏡像
docker image ls -fsince=mongo:3.2 #列出在 mongo:3.2 之后建立的鏡像
4、刪除本地鏡像
4.1 單個刪除
docker image rm [選項] <鏡像1> [<鏡像2> ...]
- <鏡像>可以是鏡像短 ID、鏡像長 ID、鏡像名 或者 鏡像摘要
比如:docker image rm -f 501
4.2 批量刪除
可以使用 docker image ls -q 來配合使用 docker image rm,這樣可以成批的刪除希望刪除的鏡像
docker image rm $(docker image ls -q ubuntu)
或者刪除所有在 ubuntu:16:04 之前的鏡像:
docker image rm $(docker image ls -q -f before=ubuntu:16.04)
【Docker容器操作】
1、啟動容器
啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另一種是將在終止狀態(stopped)的容器重新啟動。
docker run ubuntu:16.04 /bin/echo 'Hello world' #基于鏡像啟動容器,并輸出‘Hello world’
docker container start 或者 docker start #啟動已終止容器
docker run -it ubuntu:16.04 /bin/bash #啟動一個 bash 終端,允許用戶進行交互
- -t :讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上
- -i :讓容器的標準輸入保持打開
當利用 docker run 來創建容器時,Docker 在后臺運行的標準操作包括:
檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載
利用鏡像創建并啟動一個容器
分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層
從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去
從地址池配置一個 ip 地址給容器
執行用戶指定的應用程序
執行完畢后容器被終止
2、后臺運行容器
通過添加-d參數,可以讓Docker在后臺運行,而不是直接把執行命令的結果輸出到當前宿主機下
docker run -d hello-world #不會輸出日志,只會打印容器id
docker logs 容器id #查看后臺的輸出結果
注: 容器是否會長久運行,是和 docker run 指定的命令有關,和 -d 參數無關。
3、停止運行的容器
docker container stop 容器id #終止運行中的容器
docker container ls -a #查看終止狀態的容器
docker container start 容器id #啟動終止狀態的容器
docker container restart 容器id #將一個運行態的容器終止,然后重啟啟動
此外,當 Docker 容器中指定的應用終結時,容器會自動終止
4、進入容器
docker exec -it 容器id /bin/bash
5、導出和導入容器
5.1 導出容器快照到本地文件
docker export 容器id > 文件名.zip
比如:docker export 7691a814370e > ubuntu.tar
5.2 導入容器
cat 導入文件名.zip | docker import - 鏡像用戶/鏡像名:鏡像版本
比如:cat ubuntu.zip | docker import - test/ubuntu:v1.0
也可以通過指定 URL 或者某個目錄來導入,比如:
docker import http://example.com/exampleimage.tgz example/imagerepo
6、刪除容器
docker container rm ubuntu:16.04 #刪除終止狀態的容器。如果要刪除一個運行中的容器,可以添加 -f 參數
docker container prune #批量清理所有處于終止狀態的容器