docker中的命令參數(小白常用)


1 docker run

  run是最常用的命令,他是docker creat和docker start命令的組合,創建容器並啟動它。run的參數比較難理解的是-i 和-t 以及-d,分別說說這三個。

-i

  -i 參數是keep STDIN open even if not attached,意思就是會把交互界面保留着。但是要看容器的PID1,或者說看容器的CMD是什么,有些CMD程序並不會理會任何輸入,也就是說它就沒有等着你輸入命令,這時候你輸入什么都是無效的。並且,因為linux對pid1的特殊處理,它也不會理會信號,所以你只能按ctrl+p + ctrl+q,把程序放到后台。(但通常都要run -it一起使用才有效)

-t

allocate a pseudo-TTY.作用是分配一個虛擬的終端,我的理解就是,有了-t參數,這個docker就會被分配一個終端,在docker中啟動bash就會有提示符。不過,-it總是一起出現的。

-d

run container in background and print container ID,就是在后台運行容器。相當於進去之后,按了ctrl+p + ctrl+q。所以可以docker attch回去。在后台運行的容器,只能通過網絡和它交互了。

-a

可以定義到底是attach STDIN、STDOUT\STDERR,如果沒有定義,則默認是 attach to both stdout and stderr

--rm

容器退出后,自動刪除容器

--name

為容器取一個名字

--p hostport:containerport

設置端口轉發

總結

要啟動一個容器,這個容器的pid1應用是一個不需要與用戶命令行交互的,比如一個什么web應用服務,那么就用-d參數,然容器運行在后台,好好服務。比如: 

docker run --name mywebserver -d -p 80:80 my_image nginx -g 'daemon off;'

要啟動一個容器並且用這個容器來做命令操作,他的pid1進程是一個和用戶交互的程序,比如啟動一台busybox(pid1是bash),那么用 -it。比如:

 docker run -a stdin -a stdout -i -t ubuntu /bin/bash

或者

 docker run --name myubuntu -it ubuntu /bin/bash

如果要工作后即焚毀,那么就帶上--rm就好了。

注意

如果容器要從管道中獲取輸入,就不允許帶-t了。比如:

$ echo test | docker run -i busybox cat

2 docker start 

start是啟動一個已經存在的容器,他有兩個參數-a 和-i。

-a

attach STDOUT/STDERR。 -a參數帶上了的話,那么會把pid1程序的輸出都帶到終端上

-i

attach container's STDIN。 -i參數是為了讓容器相應輸入,作用其實和run中的-i一樣。

總結

啟動一個容器作為服務,就什么參數都不要帶,讓他運行在后台。

啟動一個容器作為交互應用,就帶上-i。

3 docker attach

 attach命令把一個后台運行的容器搞到前台來,這樣你就可以看到他們的輸出,並且使用輸入了。

--no-stdin

關閉輸入,這樣你就不能使用輸入了

--sig-proxy

信號轉發,默認開啟,這樣DMD進程就可以收到你的信號了。

總結

把后台邊前台,基本上就是一種單一的用法docker attach container_name了。

注意

(1)因為attach是進入了和CMD程序交互,但是CMD程序未必就會相應你的輸入(一般程序都不會相應你的輸入吧,因為他有沒有動標准流中讀取什么東西),所以不要以為程序死了。

(2)因為linux對PID1程序的特殊照顧,所以它本身不會相應任何信號,除非程序自己定義了相應信號的處理方案。也就是說,你按ctrl+c可能沒什么反應哦。

(3)因為attach對stdout和stderr做了1M的緩存,如果緩存占滿了,輸出就會有卡頓感,所以如果程序有大量的輸出,就不要用attach去看,而應該用docker logs去看log哦。

(4)如果容器建立的時候是tty-enabled container (i.e.: launched with -t),那么就不允許重定向輸入哦。

attach的退出碼是容器退出后的退出碼。

4 docker exec

這個命令是用已經運行的容器執行命令。需要注意的是,如果容器關閉后再次運行,那么用exec命令執行的命令是不會自己再次執行的。

-d 

讓命令在后台執行。

-e

設置環境變量

-i -t

運行交互命令的時候用

-u -w 

分別設置命令運行的用戶和work directory。

總結

你要運行交互的程序,那么就用-it。否則,就什么參數都不帶

你要改變用戶或者工作目錄,則使用-u或-w。

 


免責聲明!

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



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