zoukankan      html  css  js  c++  java
  • 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、STDOUTSTDERR,如果没有定义,则默认是 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。

  • 相关阅读:
    什么是封装?
    table
    POM文件
    Maven环境的搭建
    什么是maven
    J2EE的三层经典结构
    DOM对象和jQuery对象对比
    jQuery常用选择器分类
    什么是JQuery?它的特点是什么?
    jQuery准备函数语法
  • 原文地址:https://www.cnblogs.com/JMLiu/p/10277482.html
Copyright © 2011-2022 走看看