Docker有两个重要的概念,镜像和容器
强烈建议先看一下这篇文章,可以帮助你理解常用命令
理解差不多了再看下面的命令选项事半功倍
镜像操作
获取镜像
$ docker [image] pull NAME [ :TAG]
[image]可加不加,直接输入docker pull xxx:xxx
也是可以的
Name是目标镜像的名字
[:TAG]代表镜像的版本号,如果不显示的指定版本,默认拉取latest镜像,是最新的,一般也是不稳定的 支持的选项
- -a 获取仓库中的所有镜像
- --disable-content-trust 取消镜像内容校验,默认为真
查看镜像信息
$ docker images
或者
$ docker image ls
可以显示本地存在的镜像信息,包括镜像名,版本号,镜像ID,创建时间,文件大小等,比如
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 4c108a37151f 2 weeks ago 64.2MB
busybox latest e4db68de4ff2 2 weeks ago 1.22MB
redis latest 3c41ce05add9 3 weeks ago 95MB
python latest 34a518642c76 3 weeks ago 929MB
nginx latest 719cd2e3ed04 3 weeks ago 109MB
mysql 5.7 a1aa4f76fab9 3 weeks ago 373MB
jenkins/jenkins lts 95bf220e341a 3 weeks ago 566MB
支持的选项
- -a 列出所有镜像文件包括临时文件
- --digests=true 列出镜像的数字摘要值
- -f 过滤列出的镜像
- --format="TEMPLATE" 控制输出格式
- -q只显示镜像ID
用-q结合其他命令可以批量对这些镜像进行操作
为本地镜像添加TAG标签
$ docker tag oldxxx:xxx newxxx:xxx
给镜像添加一个新标签,方便以后操作这个镜像(比如,原镜像名和版本号太长了,我就给它搞一个短的镜像名和版本号)
实际上新旧标签指向同一个镜像,他们的镜像ID相同
查看镜像详细信息
$ docker [image] inspect NAME[:TAG]
信息包括制作者,适应架构,各层数字摘要等
查看镜像历史
$ docker history NAME[:TAG]
如果你看了上面那篇文章,你应该知道镜像文件是由多个层组成的,使用这个命令可以查看各个层的创建信息.
默认情况下,每层命令的命令如果过长会被截断,使用--no-trunc
显示完整信息
搜索镜像
$ docker search [option] keyword
支持的选项
- -f 过滤输出内容 后面跟规则
- 'is-official=true' 查官方的镜像
- 'stars=xxx' 收藏数在xxx以上的镜像
- --format string 格式化输出内容
- --limit int 限制输出结果个数,默认25个
- --no-trunc 不截断输出结果
例如查找官方提供的带nginx关键字的镜像
$ docker search -f 'is-official=true' nginx
实际上,你可以打开浏览器去docker官网仓库去搜索
删除镜像
$ docker rmi IMAGE [IMAGE...]
或者
$ docker image rm IMAGE [IMAGE...]
选项
- -f 强制删除镜像,即使有容器依赖它
- -no-prune 不要清理未带标签的父镜像
后面可以跟上标签,当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定 标签而巳,并不影响镜像文件; 但当镜像只剩下一个标签的时候就要小心了,此时再使用docker rmi命令会彻底删 除镜像。
也可以跟上ID,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
清理镜像
$ docker image prune
选项
- -a 删除所有无用镜像,不光是临时镜像
- -filter 只清理符合给定过滤器的镜像
- -f 强制删除镜像,不进行提示确认
创建镜像
基于已有容器创建
$ docker [container] commit [OPTIONS] CONTAINER [REPOSITORY [:TAG]]
选项
- -a 作者信息
- -c --change=[] 提交的时候执行Dockerfile指令,包括
CMD | IENTRYPOINT | NV | EXPOSE | LABEL | ONBUILD | USER | VOLUME | WORKDIR
等 - -m 提交信息
- -p 提交时暂停容器运行
在你在容器运行某镜像的时候,对镜像进行某些操作,导致和原有镜像有了区别,就可以使用commit
命令提交镜像,在原有的基础上创建新的镜像
此时,你对新建的镜像使用history
命令查看镜像历史,你就会这个镜像是在原有镜像上面又加了一层
基于本地模板导入
$ docker [image] import [OPTIONS] filel|URL| -[REPOSITORY
[:TAG] ]
模板下载地址
http://openvz.org/Download/templates/precreated
例如,下载了ubuntu的模板文件之后运行命令
$ cat ubuntu-18.04-x86_64-minimal.tar.gz I docker import - ubuntu:lB.04
使用Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,由一行行命令组成,只支持#开头的注释
回头再整理一篇文章
存出镜像
$ docker save -o [filename] [image] 导出镜像到指定文件中
选项
- -o --output string 导出到指定文件
载入镜像
$ docker load -i [file]
选项
- -i --input string 从指定文件导入
上传镜像
$ docker push 用户名/镜像名:版本号
首先要在DockerHub注册账号,并且在网页上先创建一个镜像仓库,它会自动在你镜像名前面加上你的用户名,只有官方的镜像才可以不加用户名
然后使用tag
命令将本地镜像改名,改成用户名/镜像名
的形式
本地再push
就可以了
在DockerHub可以设置镜像的是私有还是共有的,共有的镜像不需要登录即可下载,私有的必须登录同名账号才可以下载
容器操作
创建容器
新建一个新容器
$ docker [container] create
支持的选项非常多
启动容器
$ docker [container] start
创建并启动容器
等价于先 create
再 start
,create的选项也可以使用
这个命令非常常用,不仅可以根据本地镜像创建容器并启动,而且还可以直接指定Docker仓库中的镜像,下载运行一行即可
$ docker [container] run
选项
- -i 让容器的标准输出保持打开
- -t 分配一个伪终端并绑定到容器的标准输出上
- -d 以守护态运行
如果想要进行交互,最常用的命令是
$ docker [container] -it run xxx:xx /bin/bash
查看日志
$ docker [container] logs
选项
- -details 打印详细日志
- -f 保持持续输出
- -since string 输出从某个时间点开始的日志
- -tail string 输出最近的若干日志
- -t 显示时间戳信息
- -until string 输出某个时间之前的日志
暂停容器
$ docker [container] pause CONTAINER [CONTAINER ...]
恢复的话用
$ docker [container] unpause CONTAINER [CONTAINER ...]
终止容器
$ docker [container] stop [-t | --time[=10]] [CONTAINER ... ]
自动清除掉所有处于停止状态的容器
$ docker container prune
Docker 容器中指定的应用终结时,容器也会自动终止
重启容器
$ docker [container] restart
进入容器
容器启动时,使用-d
参数会在后台运行,这时候进入容器进行操作使用
$ docker [container] attach
支持选项
- --detach-keys[=[]] 指定退出attach模式的快键键序列,默认是CTRL-P CTRL-Q;
- --no-stdin=true|false 是否关闭标准输入,默认打开
- --sig-proxy=true|false 是否代理收到的系统信号给应用进程,默认为true
多个窗口同事attach到同一个容器时,所有窗口同步显示,某个阻塞,其他窗口也无法执行操作了,所以这个命令几乎不使用,而使用exec
$ docker [container] exec
选项
- -d 在后台执行命令
- --detach-keys="" 指定将容器切回后台的按键
- -e 指定环境变量列表
- -i 打开标准输入接收用户输入命令,默认false
- --privileged=true|false 是否给执行命令以高权限,默认false
- -t 分配伪终端
- -u 执行命令的用户或ID
通过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。 通过exec 命令对 容器执行操作是最为推荐的方式
删除容器
$ docker [container] rm
选项
- -f 强制,可以删除运行状态的容器
- -l 删除容器连接,保留容器
- -v 删除容器挂载的数据卷
导出容器
$ docker [container] export -o [fileName]
导入容器
可以从文件 URL 和仓库中导入
$ docker [container] import file|URL|- [REPOSITORY[:TAG]]
选项
- -c 导入同时使用Dockerfile进行修改
- -m 给修改命名
实际上,既可以使用 docker load 命令来导入镜像存储文件到本地镜像库,也可以使 用 docker [container] import 命令来导入一个容器快照到本地镜像库。 这两者的区 别在于:容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态), 而镜像存储文件将保存完整记录,体积更大。此外,从容器快照文件导人时可以重新指定标签等元数据信息
查看容器
查看容器详情
$ docker container inspect
查看容器内进程
$ docker top
查看统计信息
$ docker stats
选项
- -a 全部,默认仅运行
- -format string 格式化输出信息
- -no-stream 不持续输出
- -no-trunc 不截断输出信息
复制文件
$ docker [container] cp 本地路径 容器名:容器路径
查看变更
$ docker [container] diff 容器名
查看端口映射
$ docker [container] port 容器名
更新配置
$ docker [container] update 容器名