1. 鏡像檢索
除了可以在Docker Hub上搜索鏡像外,還可以通過(guò)命令 docker search xxx
進(jìn)行搜索淮阐,如搜索ubuntu:
docker search ubuntu
2. 鏡像下載
下載命令的格式為:docker pull 倉(cāng)庫(kù)名/鏡像名:tag
,其中tag多為系統(tǒng)的版本刁品,可選的泣特,默認(rèn)為lastest
。
docker pull mysql
3. 鏡像列表
獲取本地已下載鏡像列表命令:docker images
其中挑随,
-
RESPOSITORY
為倉(cāng)庫(kù)名/鏡像名 -
TAG
為鏡像版本状您,lastest
代表最新版 -
IMAGE_ID
為該鏡像唯一ID -
CREATED
為該鏡像創(chuàng)建時(shí)間 -
SIZE
為該鏡像大小
4. 鏡像刪除
刪除指定鏡像:
docker rmi image-id
刪除所有鏡像:
docker rmi $(docker images -q)
5. 根據(jù)鏡像啟動(dòng)容器
最簡(jiǎn)單的運(yùn)行鏡像為后臺(tái)容器的命令如下:
docker run --name container-name -d image-name
運(yùn)行一個(gè)容器,使用 docker run
命令即可兜挨。
-
-- name
:為容器起一個(gè)名稱 -
-d
:detached竞阐,執(zhí)行完這句命令后,將在后臺(tái)運(yùn)行容器暑劝,控制臺(tái)將不會(huì)阻塞骆莹,可以繼續(xù)輸入命令操作(就是后臺(tái)運(yùn)行的意思) -
image-name
:要運(yùn)行的鏡像名稱
6. 查看運(yùn)行的容器
可通過(guò)如下命令,查看運(yùn)行中的容器列表:
docker ps
使用
-a
選項(xiàng)担猛,可以直接查看所有的容器幕垦,哪怕該容器已停止運(yùn)行。
-
CONTAINER ID
:?jiǎn)?dòng)時(shí)生成的ID -
IMAGE
:該容器使用的鏡像 -
COMMAND
:容器啟動(dòng)時(shí)執(zhí)行的命令 -
CREATED
:容器創(chuàng)建時(shí)間 -
STATUS
:當(dāng)前容器狀態(tài) -
PORTS
:當(dāng)前容器所使用的默認(rèn)端口號(hào) -
NAMES
:?jiǎn)?dòng)時(shí)給容器設(shè)置的名稱
7. 停止容器的運(yùn)行
docker stop container-name/container-id
8. 啟動(dòng)一個(gè)已經(jīng)停止的容器
docker start container-name/container-id
9. 刪除容器
docker rm container-id
容器必須先停止運(yùn)行才能刪除傅联,否則命令執(zhí)行不成功先改!基于這個(gè)知識(shí)點(diǎn),我們可以直接使用一條命令刪除所有不在運(yùn)行中的容器蒸走。
docker rm $(docker ps -a -q )
10. 啟動(dòng)做端口映射的容器
Docker運(yùn)行容器之后卻發(fā)現(xiàn)沒(méi)IP仇奶,沒(méi)端口,也就是說(shuō)比驻,啟動(dòng)容器的時(shí)候如果不指定對(duì)應(yīng)參數(shù)该溯,在容器外部是無(wú)法通過(guò)網(wǎng)絡(luò)來(lái)訪問(wèn)容器內(nèi)的網(wǎng)絡(luò)應(yīng)用和服務(wù)的岛抄。 所以需要通過(guò)Docker端口映射來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)訪問(wèn)。
Docker的端口映射通過(guò)-p
參數(shù)實(shí)現(xiàn)狈茉,同時(shí)注意映射的順序hostport:container
夫椭,命令如下:
docker run --name tomcat1 -d tomcat
docker run --name tomcat2 -d -p 8888:8080 tomcat
如上,就把主機(jī)端口8888請(qǐng)求映射到Docker容器內(nèi)部端口8080了氯庆。
執(zhí)行完這兩條命令后蹭秋,通過(guò)docker ps查看:
通過(guò)PORTS可以看出,tomcat2是做了端口映射的堤撵,tomcat1是沒(méi)進(jìn)行映射過(guò)的仁讨。
分別通過(guò)瀏覽器訪問(wèn):
http://*.*.*.*:8080/
// tomcat1默認(rèn)端口
http://*.*.*.*:8888/
// 做過(guò)端口映射的Tomcat2,8888會(huì)轉(zhuǎn)發(fā)請(qǐng)求到tomcat2的8080
結(jié)果如下:
第一個(gè)請(qǐng)求是無(wú)法請(qǐng)求到的实昨,原因開篇處說(shuō)過(guò)了洞豁。
第二個(gè)請(qǐng)求是可以正常進(jìn)行請(qǐng)求的,會(huì)由tomcat2容器進(jìn)行處理屠橄。
11. 查看容器日志
查看當(dāng)前容器日志族跛,可通過(guò)如下命令:
docker logs container-id/container-name
12. 查看端口映射
可以通過(guò)如下命令查看容器映射了哪些端口及協(xié)議:
docker port container-id
13. 登入和退出容器
容器的登入和退出有多種情況,需要區(qū)分開锐墙。比如礁哄,在鏡像啟動(dòng)成容器的時(shí)候直接進(jìn)入,進(jìn)入后臺(tái)啟動(dòng)的容器溪北,退出而不停止容器等桐绒。對(duì)每一種情況,他的命令都是不一樣的之拨。
13.1 創(chuàng)建容器時(shí)前臺(tái)登入
通常情況下茉继,在新手進(jìn)行容器創(chuàng)建的實(shí)驗(yàn)階段,都會(huì)執(zhí)行一條類似的命令:
docker run --name hello-docker -i -t busybox:latest /bin/bash
上面這條命令執(zhí)行后蚀乔,就會(huì)進(jìn)入一個(gè)容器的終端命令行中烁竭。此時(shí),在通過(guò)busybox鏡像創(chuàng)建容器的同時(shí)吉挣,通過(guò)-i -t
選項(xiàng)派撕,用戶可以與容器交互,并且使用/bin/bash覆蓋了鏡像生成容器后要執(zhí)行的默認(rèn)操作睬魂。這條命令在實(shí)際的生產(chǎn)環(huán)境中终吼,極少數(shù)會(huì)碰到。大部分都是開發(fā)調(diào)試階段使用的氯哮。
13.2 登入一個(gè)后臺(tái)運(yùn)行的容器
在上一條命令描述的時(shí)候际跪,我們說(shuō)很少會(huì)直接在生產(chǎn)環(huán)境上直接登入鏡像初始化的容器,原因是,這樣會(huì)覆蓋默認(rèn)的鏡像啟動(dòng)入口姆打。因此良姆,啟動(dòng)鏡像大多使用-d
選項(xiàng)先進(jìn)行后臺(tái)啟動(dòng)容器,進(jìn)而通過(guò)命令進(jìn)入一個(gè)運(yùn)行的容器穴肘,再執(zhí)行后續(xù)操作歇盼。
進(jìn)入一個(gè)運(yùn)行中的容器舔痕,有兩個(gè)辦法:attach
和exec
评抚。這兩個(gè)命令用法相差不小,強(qiáng)烈建議慎用attach伯复。
docker exec -it container-id/container-name bash
docker attach -it container-id/container-name
上面的命令可以attach(附加)到一個(gè)已經(jīng)運(yùn)行的容器的stdin慨代,然后進(jìn)行命令執(zhí)行的動(dòng)作。
但是需要注意的是啸如,如果從這個(gè)stdin中執(zhí)行exit
侍匙,會(huì)導(dǎo)致容器的停止。因此叮雳,如果一定要在生產(chǎn)環(huán)境使用這個(gè)命令想暗,在退出容器的時(shí)候,千萬(wàn)不要執(zhí)行exit帘不。 而是參考本章13.5進(jìn)行不關(guān)閉容器的退出方式说莫。
13.3 登入一個(gè)停止了的容器
相比上一節(jié),要登入一個(gè)已經(jīng)停止的容器寞焙,只能使用exec的命令進(jìn)行啟動(dòng)储狭。
13.4 退出而不停止容器
使用快捷鍵Ctrl + P + Q
。
13.5 退出并停止容器
在容器的終端內(nèi)執(zhí)行exit
捣郊,會(huì)退出停止該容器辽狈。
14 在host和container之間拷貝文件
-
docker cp 本地路徑 containerId:容器路徑
:從主機(jī)拷貝到容器 -
docker cp containerId:容器路徑 本地路徑
:從容器拷貝到主機(jī)
15 鏡像保存和加載
# 保存鏡像
$ docker save --output saved-image.tar my-image:1.0.0
$ docker save my-image:1.0.0 > saved-image.tar
$ docker save my_image:my_tag | gzip > my_image.tar.gz
# 導(dǎo)入鏡像
$ docker load --input saved-image.tar
$ docker load < saved-image.tar