docker中的命令参数(小白经常使用)

1 docker run

  run是最经常使用的命令,他是docker creat和docker start命令的组合,建立容器并启动它。run的参数比较难理解的是-i 和-t 以及-d,分别说说这三个。linux

-i

  -i 参数是keep STDIN open even if not attached,意思就是会把交互界面保留着。可是要看容器的PID1,或者说看容器的CMD是什么,有些CMD程序并不会理会任何输入,也就是说它就没有等着你输入命令,这时候你输入什么都是无效的。而且,由于linux对pid1的特殊处理,它也不会理会信号,因此你只能按ctrl+p + ctrl+q,把程序放到后台。(但一般都要run -it一块儿使用才有效)nginx

-t

allocate a pseudo-TTY.做用是分配一个虚拟的终端,个人理解就是,有了-t参数,这个docker就会被分配一个终端,在docker中启动bash就会有提示符。不过,-it老是一块儿出现的。git

-d

run container in background and print container ID,就是在后台运行容器。至关于进去以后,按了ctrl+p + ctrl+q。因此能够docker attch回去。在后台运行的容器,只能经过网络和它交互了。github

-a

能够定义究竟是attach STDIN、STDOUT\STDERR,若是没有定义,则默认是 attach to both stdout and stderrweb

--rm

容器退出后,自动删除容器docker

--name

为容器取一个名字ubuntu

--p hostport:containerport

设置端口转发缓存

总结

要启动一个容器,这个容器的pid1应用是一个不须要与用户命令行交互的,好比一个什么web应用服务,那么就用-d参数,然容器运行在后台,好好服务。好比: bash

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。

相关文章
相关标签/搜索