docker進(jìn)程運(yùn)行與獨(dú)立的容器中,而容器是宿主機(jī)的一個(gè)進(jìn)程。宿主機(jī)可以使本地的也可以是遠(yuǎn)程的。每當(dāng)執(zhí)行docker run
之后,容器進(jìn)程式獨(dú)立運(yùn)行的,他有自己的文件系統(tǒng)、網(wǎng)絡(luò)以及與主機(jī)隔離的進(jìn)程??。
這里將介紹如何使用docker run
運(yùn)行容器以及容器資源。
一個(gè)docker run
命令使用如下:
$ docker run [options] image[:tag|digest] [command] [ags...]
docker run
命令必須指定一個(gè)容器鏡像,鏡像開(kāi)發(fā)者可以定義鏡像的一些默認(rèn)值:
開(kāi)發(fā)者可以通過(guò)docker run [options]
添加或者修改鏡像的默認(rèn)設(shè)置。此外,開(kāi)發(fā)者幾乎可以完全覆蓋掉容器運(yùn)行時(shí)的默認(rèn)設(shè)置。正因?yàn)?code>docker run能修改鏡像和容器的默認(rèn)設(shè)置,所以他的[options]
可選項(xiàng)要比其他任何docker命令都要多。
要知道更多的[options]
,移步:options type
最好只是懂得docker run
命令的人去使用這些選項(xiàng)!
當(dāng)你運(yùn)行Docker容器的時(shí)候你需要決定是要在后臺(tái)運(yùn)行還是默認(rèn)前臺(tái)運(yùn)行,當(dāng)你選擇后臺(tái)運(yùn)行時(shí)會(huì)在命令執(zhí)行后打印出最新運(yùn)行的容器ID。
-d=false: Detached mode: Run container in the background, print new container id.
想要讓你的容器以后臺(tái)方式運(yùn)行只需要在使用參數(shù)-d=true
或者-d
即可。docker設(shè)計(jì)的默認(rèn)情況下,如果你的容器以后臺(tái)方式運(yùn)行,只有在父進(jìn)程即docker進(jìn)程退出的時(shí)候才會(huì)去把容器退出,除非你使用了--rm
選項(xiàng)。如果你在運(yùn)行容器時(shí)將-d
和--rm
兩個(gè)選項(xiàng)一起使用,那么容器會(huì)在退出或者后臺(tái)進(jìn)程停止的的時(shí)候自動(dòng)移除掉(只要一個(gè)情況便會(huì)自動(dòng)移除鏡像)。
dokcer容器后臺(tái)運(yùn)行是不能通過(guò)service x start
來(lái)啟動(dòng)的,比如想啟動(dòng)一個(gè)后臺(tái)運(yùn)行的nginx
服務(wù):
$ docker run -p 80:80 my_image service nginx start
這樣雖然啟動(dòng)了容器內(nèi)的nginx
服務(wù),但是是不可用的,因?yàn)檫@種方式違背了后臺(tái)運(yùn)行容器的使用規(guī)范。nginx服務(wù)雖然啟動(dòng)了,但是他的所屬容器服務(wù)已經(jīng)停了,導(dǎo)致nginx服務(wù)是不可用的。如果想啟動(dòng)一個(gè)nginx服務(wù)請(qǐng)使用如下命令:
docker run -p 80:80 my_image nginx -g 'daemon off;'
-p
說(shuō)明:-p 宿主機(jī)port:容器port
當(dāng)容器后臺(tái)運(yùn)行之后便不回響應(yīng)命令行的的相關(guān)操作,可以通過(guò)網(wǎng)絡(luò)連接或者文件掛載方式查看容器運(yùn)行的輸入輸出日志??梢酝ㄟ^(guò)docker attach來(lái)操作。
在不指定-d
的情況下,容器默認(rèn)是前臺(tái)運(yùn)行的,可以看到容器運(yùn)行時(shí)候的輸入輸出以及錯(cuò)誤信息日志。容器甚至還可以模擬終端輸入輸出(TTY),配置項(xiàng)如下:
-a=[] : Attach to `STDIN`, `STDOUT` and/or `STDERR`-t : Allocate a pseudo-tty--sig-proxy=true : Proxy all received singals to process (non-TTY mode only)-i : Keep STDIN open even if not attached
如果你沒(méi)有指定-a
參數(shù),docker默認(rèn)會(huì)指定stdout
和stderr
,你也可以任意指定你想要的終端顯示信息,例如:
$ docker run -a stdin -a stdout -i -t ubuntu /bin/bashroot@cddd4552dc38:/# lsbin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr varroot@cddd4552dc38:/#
為了開(kāi)啟容器終端,你必須指定參數(shù) -i -t
。通常情況下-i -t
會(huì)一起使用-it
,注意如果容器需要從一個(gè)pipe接收輸入?yún)?shù)時(shí)是不能使用-t
的,例如:
$ echo test | docker run -i busybox cat
定義一個(gè)容器ID有三種方式:
Identifier type | Example value |
---|---|
UUID long identifier | “f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778” |
UUID short identifier | “f78375b1c487” |
Name | ”evil_ptolemy“ |
UUID是由docker的后臺(tái)進(jìn)程創(chuàng)建的。如果你沒(méi)有指定容器名稱,那么docker會(huì)默認(rèn)生成一個(gè)隨機(jī)字符串名字。如果你指定了容器的名字,不管是選擇前臺(tái)運(yùn)行還是后臺(tái)運(yùn)行甚至docker網(wǎng)絡(luò)配置的時(shí)候,你都可以在通過(guò)名字name
來(lái)引用該容器。
為了方便管理,你可以選擇讓docker將容器ID寫(xiě)入到一個(gè)文件中。這個(gè)功能類似于一些程序會(huì)將進(jìn)程PID寫(xiě)入到文件中,例如:
--cidfile="": Write the container ID to the file
雖然給一個(gè)容器指定ID不是嚴(yán)格的要求規(guī)范,但是你可以在啟動(dòng)容器的時(shí)候指定容器的標(biāo)簽iamge:tag
,例如:
$ docker run ubuntu:14.04
使用V2或之后的鏡像格式制作的鏡像文件具有摘要內(nèi)存尋址功能。只要生成鏡像的參數(shù)和方式?jīng)]有改變,那么這個(gè)鏡像的摘要是可預(yù)測(cè)和可引用的。
例如下面這個(gè)運(yùn)行一個(gè)從alpine
拉取的鏡像:
鏡像摘要:sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0
$ docker run alpine@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 date
...
果然docker run
是參數(shù)最多的命令,篇幅太多了,先翻譯到這里,大致使用已經(jīng)涵蓋了,先去翻譯接下來(lái)的命令了。
更多信息請(qǐng)參考原文
更多參數(shù)說(shuō)明:
參數(shù) | 說(shuō)明 |
---|---|
-a stdin | 指定標(biāo)準(zhǔn)輸入輸出類型,可選:-a stdin -a stdout -a stderr |
-d | 后臺(tái)運(yùn)行并返回容器ID |
-i | 以交互式模式運(yùn)行容器,通常和-t 一起使用 |
-t | 為容器分配一個(gè)偽輸入終端, 通常與-i 一起使用 |
-p | 端口映射宿主機(jī)port:容器port |
--name="nginx_001" | 為容器制定一個(gè)名稱 |
--dns 8.8.8.8 | 指定容器使用的DNS服務(wù)器,默認(rèn)與宿主機(jī)一致 |
--dns-search example.com | 指定容器DNS搜索域名,默認(rèn)與宿主機(jī)一致 |
-h "host_001" | 指定容器的hostname |
-e username='cat' | 設(shè)置環(huán)境變量 |
--env-file=[] | 從指定文件讀入環(huán)境變量 |
--cpuset="0-2" or --cpuset="0,1,2" | 綁定容器到指定CPU運(yùn)行 |
-m | 設(shè)置容器使用內(nèi)存最大值 |
--net="bridge" | 指定容器的網(wǎng)絡(luò)連接類型,支持:bridge/host/none/container 四種類型 |
--link=[] | 添加連接到另一個(gè)容器 |
--expose=[] | 開(kāi)放一個(gè)或多個(gè)端口 |
聯(lián)系客服