摘要:介紹Docker容器相關(guān)的操作命令。
知識(shí)點(diǎn):
run ps start attach exec top stop kill
inspect rm logs images rmi pull push
commit build
注:可以使用docker COMMAND --help
來(lái)查看COMMAND的詳細(xì)用法惜浅,本文只介紹常用的子集瘫辩。
一.啟動(dòng)容器
啟動(dòng)之前未啟動(dòng)過(guò)的容器:
docker run [-d] [-i] [-t] IMAGE [Command] [Arguments]
· -d:daemon,啟動(dòng)守護(hù)式容器
· -i:interactive坛悉,啟動(dòng)交互式容器
· -t:tty伐厌,允許標(biāo)準(zhǔn)輸入輸出
還有一些其他的選項(xiàng)
· --name=NAME:給容器指定一個(gè)別名。否則尋找容器要用ID或系統(tǒng)自帶名字裸影,很不友好弧械。
啟動(dòng)執(zhí)行一次命令的容器
docker run ubuntu echo "hello world"
這樣的容器執(zhí)行一次命令就停止了。
啟動(dòng)交互式容器
docker run -i -t ubuntu /bin/bash
接下來(lái)就進(jìn)入了容器的bash中空民,可以執(zhí)行各種命令刃唐,好像虛擬機(jī)一樣。
此時(shí)想要退出容器界轩,可以使用exit退出并停止容器画饥,或【Ctrl+P】+【Ctrl+Q】的escape組合,退出而不停止容器浊猾。
啟動(dòng)守護(hù)式容器
這樣的容器能夠長(zhǎng)期運(yùn)行抖甘,沒(méi)有會(huì)話,適合運(yùn)行各種服務(wù)葫慎。下面是啟動(dòng)守護(hù)式容器的幾種方法:
- 在交互式容器中使用【Ctrl+P】+【Ctrl+Q】的命令返回衔彻,容器因?yàn)闆](méi)有停止,變?yōu)槭刈o(hù)式容器偷办。
如果使用ps命令來(lái)查看艰额,會(huì)發(fā)現(xiàn)這個(gè)容器直接被列出。
此時(shí)若想返回這個(gè)容器椒涯,要使用docker attach 容器名
命令柄沮,附加到運(yùn)行的容器中。 - 使用run命令來(lái)建立:
docker run -d 鏡像名 [command] [args]
-d的意思是,使用后臺(tái)的方式啟動(dòng)守護(hù)式的容器,執(zhí)行命令祖搓。但是命令運(yùn)行結(jié)束后狱意,容器依然會(huì)停止。
舉例:docker run --name=test -d ubuntu "while true ;do echo hello world; sleep 1; done"
如果想要了解守護(hù)式容器中的運(yùn)行情況拯欧,需要使用log命令详囤,后文介紹。
重新啟動(dòng)已經(jīng)停止的容器:
docker start [-i] 容器名
· -i:以交互的方式重新啟動(dòng)镐作。
docker start -i NAME
二.操作容器
列出容器
docker ps [-a] [-l]
· -a:列出所有的容器(包括停止的)
· -l:列出新創(chuàng)建的容器
· 默認(rèn):只列出未停止的容器
執(zhí)行此命令后纬纪,docker將列出容器列表的信息。其中那一串很長(zhǎng)的無(wú)規(guī)律串就是容器的ID滑肉,而name一列就是你指定或系統(tǒng)指定的容器別名包各。
查看某個(gè)容器的配置docker inspect ID或者別名
執(zhí)行此命令后,docker以json格式列出指定容器很多信息靶庙。包括操作系統(tǒng)版本问畅,名稱(chēng),命令六荒,網(wǎng)絡(luò)配置等护姆。
刪除容器docker rm 容器名
只能刪除已經(jīng)停止的容器,不能刪除運(yùn)行中的容器掏击。
刪除后卵皂,ps命令會(huì)找不到那個(gè)容器。
查看容器的運(yùn)行情況
docker logs [-f] [-t] [--tail]
- -f:--follows=true|false砚亭,告訴日志灯变,一直跟蹤容器的變化。
- -t:--timestamps=true|false捅膘,為返回的結(jié)果時(shí)間戳添祸。
- --tail:選擇返回結(jié)尾處多少數(shù)量的日志。不指定的話寻仗,返回所有日志刃泌。
舉例:docker logs --tail=5 -tf test
查看test容器最后五條命令,帶時(shí)間戳并且隨時(shí)更新署尤。
查看容器中的進(jìn)程情況
docker top 容器名
在運(yùn)行的程序中啟動(dòng)新的進(jìn)程
docker exec [-d] [-i] [-t] 容器名 [command] [args]
舉例:docker exec -i -t test /bin/bash
啟動(dòng)一個(gè)新的bash進(jìn)程
停止容器
- stop命令:給容器發(fā)送一個(gè)信號(hào)耙替,等待容器的停止。
docker stop 容器名
- kill命令:直接停止一個(gè)容器
docker kill 容器名
三.操作鏡像
鏡像存放在倉(cāng)庫(kù)(repository)中曹体,而這個(gè)倉(cāng)庫(kù)存放在倉(cāng)庫(kù)(registory)中俗扇。
鏡像由Repository和Tag唯一指定,比如ubuntu:14.04混坞,ubuntu:latest狐援,這里14.04和latest就是Tag,ubuntu就是Repository究孕。如果沒(méi)有指定Tag啥酱,則會(huì)使用默認(rèn)的latest。
查看本地鏡像列表
docker images [-a] [-f] [-q] [--no-trunc]
- -a:--all厨诸,列出所有
- -f:--filter镶殷,指定過(guò)濾器
- -q:--quiet,只列出ID
- --no-trunc:不截?cái)郔D
- 可以使用Repository的名字作為參數(shù)微酬,它會(huì)返回對(duì)應(yīng)名字的所有鏡像绘趋。
查看特定鏡像信息
docker inspect 鏡像倉(cāng)庫(kù)名+Tag名,或者鏡像ID
刪除鏡像
docker rmi [-f] [--no-prune=false] 鏡像倉(cāng)庫(kù)名+Tag名颗管,或者鏡像ID
- -f:--force陷遮,強(qiáng)制刪除。如果有容器在鏡像基礎(chǔ)上生成垦江,必須用這個(gè)選項(xiàng)帽馋。
- --no-prune:不要?jiǎng)h除未打標(biāo)簽的父鏡像。
如果一個(gè)鏡像ID對(duì)應(yīng)了多個(gè)鏡像標(biāo)簽比吭,那么使用Image ID才可以刪除鏡像绽族,如果使用倉(cāng)庫(kù)名+標(biāo)簽,只能刪除對(duì)應(yīng)的標(biāo)簽衩藤。
如果想要?jiǎng)h除鏡像倉(cāng)庫(kù)下的多個(gè)鏡像吧慢,可以用如下語(yǔ)法:
docker rmi $(docker images -q ubuntu)
在遠(yuǎn)程鏡像倉(cāng)庫(kù)搜索鏡像
docker search [options] 鏡像倉(cāng)庫(kù)名
- --automated=false:只顯示自動(dòng)構(gòu)建的鏡像
- -s:--stars X:只顯示不小于X星級(jí)的鏡像
注意:search命令最多只能顯示25個(gè)結(jié)果。搜索結(jié)果后赏表,將返回鏡像的信息(星級(jí)检诗,是否官方,ID瓢剿,標(biāo)簽...)
把鏡像下載到本地
docker pull [options] NAME [:TAG]
- -a:--all-tags=false|true岁诉,把所有打了標(biāo)簽的鏡像都下載到本地。
把鏡像推送到遠(yuǎn)程
docker push NAME
需要提供用戶名跋选,密碼和郵箱涕癣。
Docker不會(huì)上傳整個(gè)鏡像,而只會(huì)上傳修改的部分前标。
鏡像默認(rèn)是公共的坠韩,可以在Docker Hub轉(zhuǎn)為私有。
構(gòu)建鏡像
鏡像的構(gòu)建非常重要炼列。我們可以自定義一個(gè)容器只搁,安裝好自己需要的一些文件,然后構(gòu)建成鏡像以方便復(fù)用俭尖。
1.通過(guò)容器構(gòu)建
docker commit [options] 容器名 [Repository[:TAG]]
- -a:指定鏡像的作者氢惋,一般是作者名和聯(lián)系方式
- -m:記錄鏡像構(gòu)建的信息
- -p:正常在構(gòu)建鏡像時(shí)會(huì)使容器暫停洞翩,使用-p告訴容器不要暫停
2.通過(guò)dockerfile文件來(lái)構(gòu)建
首先要?jiǎng)?chuàng)建dockerfile文件,它是一種包含一系列命令的文本文件焰望。
舉例:
#First Dockerfile
FROM ubuntu:14.04
MAINTAINER RaidriarB "raidriarb@foxmail.com"
RUN apt-get update
RUN apt-get install nginx
EXPOSE 80
然后執(zhí)行build的命令來(lái)構(gòu)建鏡像骚亿。
docker build [options] path|url
- -t:指定鏡像的標(biāo)簽
- 還有一些選項(xiàng):--force-rm --no-cache --pull --quiet --rm
- path要指定dockerfile的文件目錄。
docker會(huì)在build的過(guò)程中熊赖,每一步都生成一個(gè)ID来屠,這就是構(gòu)建時(shí)的中間層鏡像。如果使用ps命令查看震鹉,會(huì)發(fā)現(xiàn)他們的標(biāo)簽和倉(cāng)庫(kù)名都是none俱笛。如果想要取消構(gòu)建中間層鏡像,只需要使用--quiet或者-q選項(xiàng)传趾。
dockerfile類(lèi)似批處理文件迎膜,是一種非常強(qiáng)大的構(gòu)建鏡像方式。后面會(huì)詳細(xì)介紹dockerfile的功能浆兰。