Docker常用命令

3.1 帮助命令

docker version:详细版本信息 docker -v:简略版本信息

docker info:对docker镜像、容器、宿主机情况等描述

docker --help:类似于Linux的man,列举所有命令及其含义解释。

3.2 镜像命令

docker images [OPTIONS] [ARGS]:列出本地主机上的镜像

OPTIONS说明:可以通过docker iamges --help查看OPTIONS

  • -a :a表示all,列出本地所有的镜像(含中间映像层)
  • -q :只显示镜像ID。
  • --digests :显示镜像的摘要信息
  • --no-trunc::显示完整的镜像信息

ARGS说明:可以直接写镜像名,比如centos,mysql等等,就是直接查对应的镜像信息。

docker search [OPTIONS] 某个个xxx镜像名字:查镜像

OPTIONS说明: 可以通过docker search --help查看OPTIONS

  • --no-trunc : 显示完整的镜像描述
  • --limit int : 显示最多int条信息。

docker pull 某个个xxx镜像名字[:TAG]:下载镜像

不写版本号默认下载最新版

docker rmi 某个个xxx镜像ID:删除镜像

我们来删一下hello-world

arthas docker 监控 docker args_centos

报错了,因为我们正在使用hello-world需要加-f强制删除,docker rmi -f hello-world

  • 删除单个:docker rmi -f 镜像ID/镜像名[:TAG]
  • 删除多个:docker rmi -f 镜像名1:TAG 镜像名2:TAG
  • 删除全部:docker rmi -f $(docker images -qa)

3.3 容器命令

1. 下载镜像,新建并启动容器

有镜像才能创建容器,这是根本前提(下载一个CentOS镜像演示) docker pull centos

arthas docker 监控 docker args_arthas docker 监控_02

一个centos只有231M。

新建并启动容器,docker run [options] imageID/imageName[:TAG] [command] [arg..]

options说明:

  • --name="容器新名字": 为容器指定一个名称;
  • -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
  • -i:以交互模式运行容器,通常与 -t 同时使用;
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -P: 随机端口映射;
  • -p: 指定端口映射,有以下四种格式
  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort
  • containerPort

arthas docker 监控 docker args_centos_03

现在我们进入了,centos容器。(-i -t可以合在一起写成-it)

2. 列出当前所有正在运行的容器

docker ps [OPTIONS]

OPTIONS说明:

  • -a :列出当前所有正在运行的容器+历史上运行过的
  • -l :显示最近创建的容器。
  • -n:显示最近n个创建的容器。
  • -q :静默模式,只显示容器编号。
  • --no-trunc :不截断输出。

arthas docker 监控 docker args_Docker_04

可以看到正在运行的容器ID,跟我们启动的centos容器一致。这表示我们通过docker在centos上运行了一个centos容器。

3. 退出容器

exit:容器停止退出;

ctrl+P+Q:容器不停止退出

先exit退出我们运行的centos容器实例。然后,我们以centosByDocker为名字,生成一个centos的容器实例:

docker run -it --name centosByDocker centos

arthas docker 监控 docker args_docker_05

然后按ctrl+P+Q,(按了之后还要按一下回车)回到我们的宿主机:

arthas docker 监控 docker args_Docker_06

,然后执行docker ps可以看到容器没有关闭。

4. 启动容器(start 与 run区分开) & 重启容器(restart)

docker start是启动已有容器,docker run是新建并启动容器,这里需要区分开。

启动容器:docker start 容器ID/容器Names即可启动容器。

重启容器:docker restart 容器ID/容器Names

5. 停止容器 & 强制停止容器

停止容器:docker stop 容器ID/容器name

强制停止容器:docker kill 容器ID/容器name

6. 删除已停止的容器

docker rm 容器ID:删除之前需要停止容器。

docker rm -f 容器ID:强制删除,容器运行时可以直接删除。

一次性删除多个容器:

  • docker rm -f $(docker ps -a -q)
  • docker ps -a -q | xargs docker rm
  • docker rm 容器ID1 容器ID2 ..

注:删除的时候不需要吧容器ID写全,写两位就可以,删除前请核对,防止误删

3.4 重要容器命令

1. 启动守护式容器

命令:docker run -d 镜像名[:TAG]/镜像ID

(后台启动)启动守护容器centos:docker run -d --name centosde centos

arthas docker 监控 docker args_Docker_07

问题:然后docker ps进行查看, 会发现容器已经退出,并没有处于运行状态。

arthas docker 监控 docker args_Docker_08

很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可。例如service nginx start但是,这样做,nginx为后台进程模式运行,就导致docker前台没有运行的应用,,这样的容器后台启动后,会立即自杀因为他觉得他没事可做了。所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。

2. 查看容器日志

命令:docker logs -f -t --tail 数字 容器ID

  • -t:表示加入时间戳
  • -f:表示跟随最新的日志打印
  • --tail 数字:表示显示最后多少条

后台运行centos,循环打印一句话:

docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"

arthas docker 监控 docker args_docker_09

查询一下容器日志:docker logs -f -t --tail 10 容器ID/容器NAME

这里加了-f会不停的追加,如果不加就只会打印--tail指定数目的记录。

arthas docker 监控 docker args_docker_10

3. 查看容器内的进程 & 查看容器内部细节

查看容器内进程命令:docker top 容器ID/容器名

arthas docker 监控 docker args_docker_11

查看容器内细节命名:docker inspect 容器ID/容器名,输出形式为json字符串。

4. 进入正在运行的容器并以命令行交互

docker run -it centos 创建并启动一个centos容器,然后ctrl+p+q退出容器但不关闭。

那么如何再次进入这个容器呢?

  • 使用docker attach 容器ID/容器name命令即可再次进入容器。
  • 使用docker exec -it 容器ID/容器name /bin/bash

注:exec可以不进入容器,直接返回容器中执行的结果,例如:

docker exec -it 容器ID/容器name ls -l

arthas docker 监控 docker args_docker_12

exec与attach的区别:

attach 直接进入容器启动命令的终端,不会启动新的进程;

exec 是在容器中打开新的终端,并且可以启动新的进程;

通过exec进入的容器,使用exit退出时,容器不会关闭。

关于-i -t 与 -it的区别:i是创建标准io接口,t是伪造tty终端;如果光一个i的话,虽然也可以输入命令得到输出,但结果很不友好,自己可以试试;如果光一个t,就只有一个tty,你输入什么都没有反应,因为你没有开放对应的输入接口;正确的应该是-it,开放接口并创建伪tty。

5. 从容器内拷贝文件到主机上

命令:docker cp 容器ID:容器内路径 目的主机路径

3.5 总结

arthas docker 监控 docker args_docker_13

attach    Attach to a running container                 # 当前 shell 下 attach 连接指定运行镜像
build     Build an image from a Dockerfile              # 通过 Dockerfile 定制镜像
commit    Create a new image from a container changes   # 提交当前容器为新的镜像
cp        Copy files/folders from the containers filesystem to the host path   #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container                        # 创建一个新的容器,同 run,但不启动容器
diff      Inspect changes on a container's filesystem   # 查看 docker 容器变化
events    Get real time events from the server          # 从 docker 服务获取容器实时事件
exec      Run a command in an existing container        # 在已存在的容器上运行命令
export    Stream the contents of a container as a tar archive   # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
history   Show the history of an image                  # 展示一个镜像形成历史
images    List images                                   # 列出系统当前镜像
import    Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应export]
info      Display system-wide information               # 显示系统相关信息
inspect   Return low-level information on a container   # 查看容器详细信息
kill      Kill a running container                      # kill 指定 docker 容器
load      Load an image from a tar archive              # 从一个 tar 包中加载一个镜像[对应 save]
login     Register or Login to the docker registry server    # 注册或者登陆一个 docker 源服务器
logout    Log out from a Docker registry server          # 从当前 Docker registry 退出
logs      Fetch the logs of a container                 # 输出当前容器日志信息
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT    # 查看映射端口对应的容器内部源端口
pause     Pause all processes within a container        # 暂停容器
ps        List containers                               # 列出容器列表
pull      Pull an image or a repository from the docker registry server   # 从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to the docker registry server    # 推送指定镜像或者库镜像至docker源服务器
restart   Restart a running container                   # 重启运行的容器
rm        Remove one or more containers                 # 移除一个或者多个容器
rmi       Remove one or more images             # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
run       Run a command in a new container              # 创建一个新的容器并运行一个命令
save      Save an image to a tar archive                # 保存一个镜像为一个 tar 包[对应 load]
search    Search for an image on the Docker Hub         # 在 docker hub 中搜索镜像
start     Start a stopped containers                    # 启动容器
stop      Stop a running containers                     # 停止容器
tag       Tag an image into a repository                # 给源中镜像打标签
top       Lookup the running processes of a container   # 查看容器中运行的进程信息
unpause   Unpause a paused container                    # 取消暂停容器
version   Show the docker version information           # 查看 docker 版本号
wait      Block until a container stops, then print its exit code   # 截取容器停止时的退出状态值