docker学习(2)--基础命令
转载请注明源出处:http://www.cnblogs.com/lighten/p/6875355.html
1.基本命令
搭建好docker环境之后,使用docker help命令查看docker的基本用法: docker COMMAND.
目前我们较为常使用的是commands下面的指令,如果使用swarm相关功能会用到management commands。目前我使用的是17.03.1-ce,后续版本功能应该会更加细分,可能会替换成management来使用。比如docker images列出所有镜像,和docker image ls的功能是一样的,通常我们习惯使用docker build构建镜像,也可以使用docker image build命令。本文还是介绍commands的相关命令,management的命令更多,熟悉了其实都一样。主旨还是为了学会怎么使用docker,命令不会用就通过docker swarm --help的方式去查看。
2.命令详解
命令太多,介绍不完,这里介绍一些使用docker时接触比较频繁的命令。
2.1 attach
连接一个运行中的容器。
1.detach-key: 覆盖脱离容器的键序列
2.no-stdin:不连接STDIN
3.sig-proxy:代理进程所接收的所有字符,默认true
attach命令不怎么使用了,被更强大的exec的命令取代了。
detach-key用法,比如跟上H,连上容器后是bash输入H就可以退出容器,容器也不会停止运行。不加的话原本应该是CTRL+C退出的,但是没有作用,使用exit命令虽然可以退出,但是容器也停止运行了。
no-stdin不接受任何输入,bash中输入了回车会自动退出,容器不会关闭。
sig-proxy一般用于连接的容器不是显示bash,比如tomcat的catalina.sh运行,前台展示日志,此时退出容器只能CTRL+C,但这样容器就停止运行了,不是想要的结果,所以使用sig-proxy=false可以解决这个问题。顺带一提,如果是bash,这个是没有作用的,依旧不会退出,执行exit退出容器依旧关闭。
2.2 build
使用Dockerfile构建一个镜像
命令较多,说明一下常用的命令,其它的看意思也能看明白。
1.--tag 给镜像命名和打标签,格式时name:tag
2.--rm 构建成功后移除临时容器
3.--no-cache 构建镜像时不使用缓存
4.--force-rm 总是移除临时容器(与rm相比失败也移除)
docker build --tag test .(注意空格后有一个点)
上面给出的命令涉及docker构建的一个知识点。docker构建是一层一层的,一条指令就是一层,构建完成了之后会运行一个临时容器,不过成功的时候默认是删除的,失败的时候还存在。上面的rm命令就是管理这个的用处。失败存在的容器可以用于调试,docker每构建一层都会缓存起来,下次构建的时候就会使用缓存,这样可以加快构建速度。修改构建文件之后,修改项之前的层都可以使用缓存构建,修改处及之后的都会重新构建,顺便一提如果只是调换两个指令的顺序也不会使用缓存,牢记构建是一层层的,上下两层调换也是完全不一样的,只有从第一层开始完全一致的层才会使用缓存。
2.3 commit
通过修改一个容器来构建镜像
1.--author 注明镜像的构建作者
2.--change 使用Dockerfile指令来创建镜像
3.--message 提交的信息
4.--pause 提交时暂停容器(默认true)
这四个选项很简单明了,但是change用的比较少,一般采取这种方式提交的都不需要再使用Dockerfile指令了。这是第二种生成docker镜像的方式。比如你运行一个centos容器,进入容器安装了vim程序,退出容器执行commit就会生成一个新的带有vim程序的镜像。一般不会采取这种方式构建镜像,除非是无法使用Dockerfile完成构建。这就是为什么change参数使用的比较少的原因,因为这种做法都能进入容器完成操作,也就没必要再使用Dockerfile的命令了。
2.4 exec
在一个运行中的容器中执行一个命令
1.--detach 分离模式:在后台运行一个命令
2.--detach-keys 和上面的attach命令的作用相同,覆写离开容器的键
3.--env 设置环境变量
4.--interactive 保持输入流的打开,即时没有连接
5.--privileged 给命令赋予权限,测试时容器创建的时候没有带这个参数这里设置了好像也不起作用,run命令的时候有才会生效
6.--tty 分配一个伪终端,通常和-i连用,进入容器
7.--user 登入用户
docker exec -it 容器名 /bin/bash
这个命令使用的比较频繁,其完好的取代了attach命令,可以在容器终端不能输入的时候,比如tomcat前台运行(很多时候是这样,因为如果没有前台程序,容器就会停止运行)。这个时候即时连上容器,也不能对其做什么,退出如果操作不当,还很容易使容器停止运行。exec命令解决了这个问题,上面的那句命令就可以进入容器的终端,输入指令。
2.5 export、import、save、load
这四个命令都和docker的迁移有关,如果我们要迁移一个镜像,可以将其上传到docker中心仓库中,在迁移的电脑上再下下来就可以了。但是还有更简单的方法,就是上面的四个指令。export-import是针对容器而言,save-load是针对镜像而言。这两者是有所区别的。
基本格式是:docker 具体命令 容器/镜像名称或ID。
2.6 history
展示一个镜像的历史
1.--human 阅读友好的展示方式,默认为true
2.--no-trunc 不要缩略输出,一般输出命令那段会有折叠,想看到完整的指令,可以使用这个选项
3.--quiet 只显示ID
docker history 镜像名/ID
这个命令可以看见一个镜像一层层是如何构建的。对镜像的层级构建可以更好的理解
2.7 images、ps
展示镜像列表
1.--all 展示所有的镜像(默认隐藏中间镜像)
2.--digests 显示数字编号
3.--filter 根据提供的条件过滤输出
4.--format 使用一个GO模板合适的打印镜像
5.--no-trunc 不缩略输出内容
6.--quiet 只显示数字ID
docker images
这个命令也是一个常用命令,可以使用其查阅现在仓库中所拥有的镜像。
images是查看镜像的,与之对应的就是ps,用于查看容器的。
2.8 inspect
返回一个docker对象的低级别信息
这个命令主要用于查看docker对象的一些基本资料,尝试一下就知道了。
2.9 login、logout、pull、push、search
这几个命令都和docker的中央镜像仓库有关,login登入,logout登出。pull拉取镜像不需要登录,push提交需要。search可以用于查看仓库中的镜像列表。
2.10 rm、rmi、run、start、stop
这几个命令和docker镜像容器的生命周期有关,rm删除容器,rmi删除镜像,run以镜像为模板新建一个容器运行,没有镜像会先拉去镜像,start启动容器,stop停止容器。
3.后记
还有一些命令没有进行介绍,实际上也没必要,英文还可以就可以直接使用help命令来查看命令的解释就可以了。docker命令多用用就会熟练了,主要还是docker的一些基础原理比较重要。下一篇会介绍一下如何编写Dockerfile。