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。
docker中的命令参数(小白常用)的更多相关文章
- linux中touch命令参数修改文件的时间戳(转)
linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件,以下是linux中touch命令参数的使用方法: touch [-acm][-r ...
- linux中touch命令参数修改文件的时间戳(转载)
转自:http://os.51cto.com/art/200908/144237.htm linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存 ...
- Linux中mpstat命令参数详解
Linux中mpstat命令参数详解 mpstat 是 Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在 /proc/stat ...
- Linux中top命令参数详解
此文摘自(https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html) 简介 top命令是Linux下常用的性能分析工具,能够实 ...
- Go 中读取命令参数的几种方法总结
前言 对于一名初学者来说,想要尽快熟悉 Go 语言特性,所以以操作式的学习方法为主,比如编写一个简单的数学计算器,读取命令行参数,进行数学运算. 本文讲述使用三种方式讲述 Go 语言如何接受命令行参数 ...
- Monkey中ADB命令参数详解
Monkey命令行可用的全部选项: --help列出简单的用法.-v命令行的每一个-v将增加反馈信息的级别.Level 0(缺省值)除启动提示.测试完成和最终结果之外,提供较少信息.Level 1提供 ...
- Docker Gitlib创建项目后仓库连接IP地址不一致问题(包括进入docker中容器命令及退出命令)
首次在内网搭建Gitlab环境,在成功后在Gitlab上新建了一个项目. 然而在IDEA上clone项目时发现,项目地址如下: git@0096ce63c43f:root/jump.git 或者这样 ...
- mysql常用命令大全 mysql常用命令总结
原文地址:http://www.jbxue.com/db/12472.html 本文介绍下,mysql中常用的一些命令,包括创建与修改数据库.数据库中的表,mysql的权限管理命令grant.revo ...
- MySql常用命令集Mysql常用命令2
MYSQL 常用命令 1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的 文件名(数据库默认编码是la ...
随机推荐
- Lucene教程(四) 索引的更新和删除
这篇文章是基于上一篇文章来写的,使用的是IndexUtil类,下面的例子不在贴出整个类的内容,只贴出具体的方法内容. 3.5版本: 先写了一个check()方法来查看索引文件的变化: /** ...
- CDH源代码
CDH Packaging and Tarball Information http://www.cloudera.com/content/cloudera/en/documentation/core ...
- VR与AR的发展趋势分析
概要 你是否想象过与神秘的深海生物近距离接触?你是否梦想过穿戴钢铁侠那样的超先进科技装备成为超级英雄?你又是否幻想过与梦中的女神面对面的交流?这些可能在以前都只能是存在于脑海中的幻想,可是在如今有一项 ...
- c# 检查报错详细
catch (DbEntityValidationException error) { string test = string.Empty; foreach (var validationError ...
- 其他信息: 实体类型 xxxxx 不是当前上下文的模型的一部分。
我是手动添加的EF类的, 解决方法: 没有在DbContext 添加 public virtual DbSet<xxx> xxxx{ get; set; } 导致不在上下文中
- JS判断时特殊值与boolean类型的转换
扒开JQuery以及其他一些JS框架源码,常常能看到下面这样的判断,写惯了C#高级语言语法的我,一直以来没能系统的理解透这段代码. var test; //do something... if(tes ...
- 【总结】 BZOJ前100题总结
前言 最近发现自己trl,所以要多做题目但是Tham布置的题目一道都不会,只能来写BZOJ HA(蛤)OI 1041 复数可以分解成两个点,所以直接把\(R^2\)质因数分解一下就可以了,注意计算每一 ...
- 多线程并行计算数据总和 —— 优化计算思想(多线程去计算)—— C语言demo
多线程计算整型数组数据总和: #include <stdio.h> #include <stdlib.h> #include <Windows.h> #includ ...
- Python(序列化json,pickle,shelve)
序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...
- Java Web 学习与总结(二)Servlet核心接口+Servlet3.0配置
Servlet3.0版本对Servlet配置进行了重大变革,Servlet类不需要再麻烦的去编辑web.xml文件了,只需要在类上面进行注释就可以了,获得了 Java 社区的一片赞誉之声,以下是新增的 ...