Dcoker命令详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dcoker命令详解相关的知识,希望对你有一定的参考价值。
- 本章主要讲述Docker命令的各项配置,目的是以学习为主,如果转载请注明出处. -博客园:玲珑骰子安红豆
- 目录
- 名词解释(可能会让人产生误解)
- REPOSITORY
- 仓库(是注册服务器与镜像名称组合起来的,)
- NAME
- 名称(镜像的name属性,不包含注册服务器)
- IMAGE
- 镜像,通常代指REPOSITORY+NAME的组合
- TAG
- 标签(通常代表了镜像的版本)
- CONTAINER
- 容器唯一标识(通常是ID或者简短ID,或者容器的names),可以通过dockers ps -a查看
- DIGEST
- 文摘,通常指镜像的摘要
- OPTIONS
- 选项
- Usage
- 命令格式(用法,语法)
? ?
- 1.镜像仓库
- search
- 从docker hub 查找镜像
- Usage:????????docker search [OPTIONS] TERM
- OPTIONS:
--automated=false | 只列出 automated build类型的镜像 |
--help=false | Print usage |
--no-trunc=false | 显示完整的镜像描述 |
-s, --stars=0 | 列出收藏数不小于指定值的镜像 |
- pull
- 从镜像仓库中拉取或者更新指定镜像
- Usage:????????docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- OPTIONS:
-a, --all-tags=false | 下载所有tegged的镜像(下载所有标签不同的镜像) |
--help=false | Print usage |
- push
- 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
- Usage: docker push NAME[:TAG]
- 推送的镜像要重新将注册服务器添加到镜像名称中
- login
- 登录到服务器/私服,默认是登录到docker hub
- Usage:????????docker login [OPTIONS] [SERVER]
- SERVER默认为"https://index.docker.io/v1/"
- OPTIONS:
-e, --email= | |
--help=false | Print usage |
-p, --password= | Password |
-u, --username= | Username |
- logout
- 登出仓库
- Usage:????????docker logout [SERVER]
- SERVER默认为"https://index.docker.io/v1/"
? ?
- 2.本地镜像管理
- images
- 列出本地镜像。
- Usage:????????docker images [OPTIONS] [REPOSITORY]
- OPTIONS:
-a, --all=false | Show all images (default hides intermediate images) |
--digests=false | Show digests |
-f, --filter=[] | Filter output based on conditions provided |
--help=false | Print usage |
--no-trunc=false | Don‘t truncate output |
-q, --quiet=false | Only show numeric IDs |
- tag
- Usage:????????docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
- OPTIONS:
-f, --force=false | Force |
--help=false | Print usage |
- save
- 保存镜像(载出镜像)
- ?
- load(加载save命令保存的镜像)
- ? ?
- import(加载export命令保存的容器,导入为镜像)
- docker容器导入
- ? ?
- history
- ? ?
- inspect
- ? ?
- rmi
- ? ?
- build
? ?
? ?
- 3.容器生命周期管理
- create/run
- create是创建一个新的容器但不启动它,实例请查看:https://docs.docker.com/engine/reference/commandline/run/#extended-description
- run是创建一个新的容器,并且启动它.
- Usage:????????docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
- Usage:????????docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- OPTIONS:
-a, --attach=[] | 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项 |
--add-host=[] | 添加一条hosts的记录添加到hosts文件中, (格式 host:ip) |
--blkio-weight=0 | 容器块设备IO的权重 (范围10 至 1000)(默认为相同权重值500) |
-c, --cpu-shares=0 | CPU份额 (相对权重) |
--cap-add=[] | 控制docker的内核权限(添加) |
--cap-drop=[] | 控制docker的内核权限(排除) |
--cgroup-parent= | Optional parent cgroup for the container |
--cidfile= | 将容器的id写入宿主机的文件中 |
--cpu-period=0 | 完全公平算法中的period值(不了解请百度 Limit the CPU CFS) |
--cpu-quota=0 | 完全公平算法中的quota值 |
--cpuset-cpus= | 绑定容器到指定CPU运行 (0-3, 0,1) |
--cpuset-mems= | 绑定容器到指定CPU运行(0-3, 0,1),只应用于 NUMA 架构的 CPU 生效,http://cenalulu.github.io/linux/numa/ |
-d, --detach=false | 后台运行容器,并返回容器ID(run命令专属); |
--device=[] | 添加主机设备给容器,相当于设备直通 |
--dns=[] | 指定容器使用的DNS服务器,默认和宿主一致 |
--dns-search=[] | 指定容器DNS搜索域名,默认和宿主一致 |
-e, --env=[] | 设置环境变量 |
--entrypoint= | 配置容器启动时运行的命令 |
--env-file=[] | 从指定文件读入容器启动时运行的命令 |
--expose=[] | 开放端口(可以是一个 也可以是一组) |
-h, --hostname= | 指定容器的hostname |
--help=false | Print usage |
-i, --interactive=false | 以交互模式运行容器,通常与 -t 同时使用(保持输出打开) |
--ipc= | 要使用的IPC命名空间 |
-l, --label=[] | 设置标签(format a=b) |
--label-file=[] | 读取一个按行分隔的标签文件 |
--link=[] | 添加链接到另一个容器 |
--log-driver= | 容器使用的日志输出驱动设备 |
--log-opt=[] | 日志驱动选项 |
--lxc-conf=[] | 添加自定义LXC选项 |
-m, --memory= | 设置容器使用内存最大值 |
--mac-address= | 设置容器mac地址 (e.g. 92:d0:c6:0a:29:33) |
--memory-swap= | -1 表示交换分区不限制(禁用掉) |
--name= | 为容器指定一个名称 |
--net=bridge | 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; |
--oom-kill-disable=false | 内存耗尽时是否杀掉容器,默认杀掉容器进程 |
-P, --publish-all=false | 映射所有开放的端口到宿主机的随机端口,需要与--expose参数配合使用. |
-p, --publish=[] | 指定端口映射 |
--pid= | 使用PID命名空间 |
--privileged=false | 指定容器是否为特权容器,特权容器拥有所有的capabilities |
--read-only=false | 容器的/根目录为只读 |
--restart=no | 指定容器停止后的重启策略(no,容器退出时不重启,on-failure容器故障退出时(返回值非零)重启,always退出时总是重启) |
--rm=false | 退出容器时,自动清理其所产生的数据,不与-d参数同时使用(run独有) |
--security-opt=[] | 修改容器默认的schema标签 |
--sig-proxy=true | 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理 |
-t, --tty=false | 为容器重新分配一个伪输入终端,通常与 -i 同时使用; |
-u, --user= | 指定容器的用户 (format: <name|uid>[:<group|gid>]) |
--ulimit=[] | ulimit 用于限制 shell 启动进程所占用的资源 |
--uts= | 使用UTS命名空间 |
-v, --volume=[] | 挂载数据卷 |
--volumes-from=[] | 挂载其他容器的数据卷 |
-w, --workdir= | 容器内的工作目录,默认为根目录 |
- start
- 启动一个或多个停止的容器
- Usage:????????docker start [OPTIONS] CONTAINER [CONTAINER...]
- OPTIONS:
-a, --attach=false | Attach STDOUT/STDERR and forward signals |
--help=false | Print usage |
-i, --interactive=false | 连接到容器的标准输出 |
- rename
- 容器重命名
- Usage:????????docker rename OLD_NAME NEW_NAME
- stop/restart
- 停止/重启容器
- Usage:????????docker stop [OPTIONS] CONTAINER [CONTAINER...]
- Usage:????????docker restart [OPTIONS] CONTAINER [CONTAINER...]
- OPTIONS:
--help=false | Print usage |
-t, --time=10 | 多长时间后发送信号,停止容器(默认10s) |
- kill
- 杀掉一个运行中的容器。
- Usage:????????docker kill [OPTIONS] CONTAINER [CONTAINER...]
- Options:
--help | Print usage |
-s, --signal string | 向容器发送一个信号 (default "KILL") |
- stop和kill的区别:
- kill是不管容器同不同意,我直接执行kill -9,强行终止;
- stop的话,首先给容器发送一个TERM信号,让容器做一些退出前必须的保护性、安全性操作,然后让容器自动停止运行,如果在一段时间内,容器还是没有停止,再进行kill -9,强行终止。
- pause/unpause
- 暂停/恢复容器的所有进程
- Usage:????????docker pause [OPTIONS] CONTAINER [CONTAINER...]
- Usage:????????docker unpause [OPTIONS] CONTAINER [CONTAINER...]
- rm
- 删除一个或者多个容器
- Usage: ????????docker rm [OPTIONS] CONTAINER [CONTAINER...]
- OPTIONS:
-f, --force=false | 强行终止一个运行中的容器 (uses SIGKILL) |
--help=false | Print usage |
-l, --link=false | 删除容器的连接,但是保留容器 |
-v, --volumes=false | 删除容器挂载的数据卷. |
- wait
- 阻塞运行直到容器停止,然后打印出它的退出代码。
- Usage: ????????docker wait [OPTIONS] CONTAINER [CONTAINER...]
? ?
- 4.容器操作
- logs
- 获取容器的日志
- Usage:????????docker logs [OPTIONS] CONTAINER
- Options:
--details | 显示详细的日志 |
-f, --follow | 跟踪日志输出 |
--help | Print usage |
--since string | 显示某个开始时间的所有日志 |
--tail string | 仅列出最新N条容器日志 |
-t, --timestamps | 显示时间戳 |
- ps
- 列出容器
- Usage:????????docker ps [OPTIONS]
- Options:
-a, --all | 列出所有容器(默认仅列出运行中的容器) |
-f, --filter value | 根据条件过滤显示的内容 |
--format string | 指定返回值的模版文件(格式化返回值) |
--help | Print usage |
-n, --last int | 列出最近创建的n个容器 |
-l, --latest | 显示最后创建的容器 |
--no-trunc | 不进行截断输出(显示所有选项的值) |
-q, --quiet | 只显示容器编号(ID) |
-s, --size | 显示总的文件大小 |
- top
- 容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。(支持ps参数)
- Usage:????????docker top CONTAINER [ps OPTIONS]
- 可能有些难以理解,以下是实例
- [[email protected] ~]# docker top 2b928dba921d
- UID PID PPID C STIME TTY TIME CMD
- root 4127 4116 0 Aug20 pts/1 00:00:00 bash
- 查看所有容器运行的程序,输出内容太多,我就不粘上了
- [[email protected] ~]# for i in `docker ps |grep Up|awk ‘{print $1}‘`;do echo \\ &&docker top $i; done
- stats
- 实时显示容器的资源使用情况
- Usage:????????docker stats [OPTIONS] [CONTAINER...]
- Options:
-a, --all | 显示所有容器 (默认只显示运行中的容器) |
--help | Print usage |
--no-stream | 只显示第一次执行统计的数据(并且将统计流关闭) |
- inspect
- 查看容器详细信息
- Usage:????????docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK...]
- OPTIONS:
-f, --format | 使用指定的输出格式模板 |
--help | Print usage |
-s, --size | 如果查看的是容器的话显示总文件大小 |
--type | 控制查看的类型(是容器还是镜像或者是任务,如果类型不符合会抛异常). (可选为 image, container or task), |
- 使用实例:
- [[email protected] ~]# docker inspect -f ‘{{.NetworkSettings.IPAddress}}‘ 2b928dba921d
- 172.17.0.2
- export(容器只能通过crate/run的方式获得,而不能导入,只能导出)
- 比较专业的解释:将文件系统作为一个tar归档文件导出到STDOUT
- 个人理解:导出当前容器到本地(导出为import命令能加载的镜像),会丢历史和元数据,网上有的人解释为是commit和save命令的组合版.
- Usage:????????docker export [OPTIONS] CONTAINER
- Usage:????????docker export CONTAINER > [OPTIONS]
- Options:
--help | Print usage |
-o, --output string | (必须指定)将输入内容写到文件,而不是标准输出,文件名或者/目录/文件名,可以使用‘.‘ |
- 看第二种使用方式可能有点懵.不要紧,咱们来看两个实例:
- e.g:????????docker export -o ./centos.tar e65720ef8e82
- e.g:????????docker export e65720ef8e82 > ./centos.tar
- attach
- 连接到正在运行中的容器。
- Usage:????????docker attach [OPTIONS] CONTAINER
- Options:
--detach-keys string | Override the key sequence for detaching a container |
--help | Print usage |
--no-stdin | Do not attach STDIN |
--sig-proxy | Proxy all received signals to the process (default true) |
- 当两个窗口同时连接一个容器,如果一个窗口阻塞,就会造成所有窗口同时阻塞,所以这种方式不推荐.好在官方提供了更好的一种连接方式(exec)
- exec (我很喜欢用这个)
- 在运行的容器中执行命令
- Usage:????????docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
-d, --detach=false | 分离模式: 在后台运行 |
--help=false | Print usage |
-i, --interactive=false | 即使没有附加也保持STDIN 打开 |
-t, --tty=false | 分配一个伪终端 |
-u, --user= | 使用用户识别访问(用户或者UID登录容器) (format: <name|uid>[:<group|gid>]) |
- port
- 查看容器的端口信息
- Usage:????????docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
- 示例:
- 查看容器的全部映射端口:
- [[email protected] data]# docker port port1
- 5001/tcp -> 0.0.0.0:5001
- 根据容器使用的宿主机端口查看映射
- [[email protected] data]# docker port port1 5001
- 0.0.0.0:5001
- events
- 从服务器获取实时事件(进行事件监听,打个比方说吧,比如你使用exec访问了某一个容器,就会被监听到,监听的事件可不止容器哦)
- Usage:????????docker events [OPTIONS]
- Options:
-f, --filter value | 根据条件过滤事件 |
--help | Print usage |
--since string | 从指定的时间戳后显示所有事件 |
--until string | 流水时间显示到指定的时间为止 |
- Docker会监听如下事件:
- 容器事件:
- attach, commit, copy, create, destroy, detach, die, exec_create, exec_detach, exec_start, export, health_status, kill, oom, pause, rename, resize, restart, start, stop, top, unpause, update
- 镜像事件:
- delete, import, load, pull, push, save, tag, untag
- 插件事件(试验):
- install, enable, disable, remove
- 数据卷事件:
- create, mount, unmount, destroy
- 网络事件:
- create, connect, disconnect, destroy
- daemon事件:
- reload
- 附带一份解释比较详细的网文:https://www.centos.bz/2017/01/docker-events-get-real-time-events-from-the-server/
? ?
- 5.容器rootfs命令
- commit
- 从容器创建一个新的镜像
- Usage:????????docker commit [OPTIONS] CONTAINER [NEW_REPOSITORY[:TAG]]
- OPTIONS:
-a, --author= | 作者信息 (e.g., "姓名 <邮箱>") |
-c, --change=[] | 使用Dockerfile指令来创建镜像 |
--help=false | Print usage |
-m, --message= | 提交时的说明文字 |
-p, --pause=true | 在commit时,将容器暂停 |
- cp
- 用于容器与主机之间的数据拷贝
- Usage:????????docker cp CONTAINER:PATH HOSTDIR|-
- or
- Usage:????????docker cp SRC_PATH|- CONTAINER:DEST_PATH
- diff
- 检查容器内文件结构的更改
- Usage:????????docker diff CONTAINER
? ?
- ? ?
- 6.其他操作
- info
- 查看docker系统信息
- Usage:????????docker info
- version
- 显示docker版本信息
- Usage:????????docker version
以上是关于Dcoker命令详解的主要内容,如果未能解决你的问题,请参考以下文章
25-Docker-常用命令详解-dcoker images