本章主要讲述Docker命令的各项配置,目的是以学习为主,如果转载请注明出处. -博客园:玲珑骰子安红豆
目录
1.镜像仓库
2.本地镜像管理
3.容器生命周期管理
4.容器操作
5.容器rootfs命令
6.其他操作
?
?
名词解释(可能会让人产生误解)
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 |
强制进行 |
--help=false |
Print usage |
- save
- 保存镜像(载出镜像)
- Usage:????????docker save [OPTIONS] IMAGE [IMAGE...]
- Usage:????????docker save IMAGE > file|URL
- OPTIONS:
--help=false |
Print usage |
-o, --output= |
输出路径 |
- load(加载save命令保存的镜像)
- 加载镜像(载入镜像)
- Usage:????????docker load [OPTIONS]
- Usage:????????docker load < file|URL
--help=false |
Print usage |
-i, --input= |
文件路径 |
- import(加载export命令保存的容器,导入为镜像)
- docker容器导入
- Usage:????????docker import [OPTIONS] URL|- [REPOSITORY[:TAG]] demo: cat ss.tar | sudo docker import - ssr:test
- Usage:????????docker import - [REPOSITORY[:TAG]] < file|url demo: docker import - ssr:test < ss.tar
- OPTIONS:
-c, --change=[] |
应用docker 指令创建镜像 |
--help=false |
Print usage |
?
?
- history
- 显示镜像历史记录
- Usage:????????docker history [OPTIONS] IMAGE
- OPTIONS
-H, --human=true |
以可读的格式打印镜像大小和日期,默认为true |
--help=false |
Print usage |
--no-trunc=false |
显示完整的提交记录 |
-q, --quiet=false |
仅列出提交记录ID |
- 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
- rmi
- 删除本地一个或多少镜像(根据 IMAGE 删除,只有删除最后一个的时候,镜像才会删除)
- Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
- OPTIONS:
-f, --force=false |
强制删除镜像(忽略容器正在使用) |
--help=false |
Print usage |
--no-prune=false |
不移除该镜像的过程镜像,默认移除 |
- build
- 语法
- docker build [OPTIONS] PATH | URL | -
- OPTIONS说明:
- --build-arg=[] :设置镜像创建时的变量;
- --cpu-shares :设置 cpu 使用权重;
- --cpu-period :限制 CPU CFS周期;
- --cpu-quota :限制 CPU CFS配额;
- --cpuset-cpus :指定使用的CPU id;
- --cpuset-mems :指定使用的内存 id;
- --disable-content-trust :忽略校验,默认开启;
- -f :指定要使用的Dockerfile路径;
- --force-rm :设置镜像过程中删除中间容器;
- --isolation :使用容器隔离技术;
- --label=[] :设置镜像使用的元数据;
- -m :设置内存最大值;
- --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
- --no-cache :创建镜像的过程不使用缓存;
- --pull :尝试去更新镜像的新版本;
- -q :安静模式,成功后只输出镜像ID;
- --rm :设置镜像成功后删除中间容器;
- --shm-size :设置/dev/shm的大小,默认值是64M;
- --ulimit :Ulimit配置。
?
?
?
?
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
- 使用方式同镜像操作的inspect
- export(容器只能通过crate/run的方式获得,而不能导入,只能导出)
- 比较专业的解释:将文件系统作为一个tar归档文件导出到STDOUT
- 个人理解:导出当前容器到本地(导出为import命令能加载的镜像),会丢历史和元数据,网上有的人解释为是commit和save命令的组合版.
- Usage:????????docker export [OPTIONS] CONTAINER
- Usage:????????docker export CONTAINER > file|URL
- Options:
--help |
Print usage |
-o, --output string |
(必须指定)将输入内容写到文件,file|URL |
- 看第二种使用方式可能有点懵.不要紧,咱们来看两个实例:
- 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
时间: 2024-11-05 02:03:03