Dcoker命令详解

Collapsible Text Box

   

名词解释(可能会让人产生误解)

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=

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)

使用实例:

[root@izt4n97garwn1ni986vmhjz ~]# 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镜像

Usage:        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

设置由代理接受并处理信号,但是SIGCHLDSIGSTOPSIGKILL不能被代理

-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")

  • stopkill的区别:

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]

可能有些难以理解,以下是实例

[root@izt4n97garwn1ni986vmhjz ~]# docker top 2b928dba921d

UID PID PPID C STIME TTY TIME CMD

root 4127 4116 0 Aug20 pts/1 00:00:00 bash

查看所有容器运行的程序,输出内容太多,我就不粘上了

[root@localhost ~]# 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命令能加载的镜像),会丢历史和元数据,网上有的人解释为是commitsave命令的组合版.

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]]

示例:

查看容器的全部映射端口:

[root@Ninemax-LPC3 data]# docker port port1

5001/tcp -> 0.0.0.0:5001

根据容器使用的宿主机端口查看映射

[root@Ninemax-LPC3 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

 

posted @ 2017-08-25 13:46  玲珑骰子安红豆  阅读(630)  评论(0编辑  收藏  举报