Docker的使用主要包括镜像的管理、容器的运行和管理以及使用docker构建各种服务。

Docker镜像管理

列出镜像

列出当前Docker主机上可用的镜像,保存在本机的/var/lib/docker下。

1
docker images

images

  • 返回如下信息:

    REPOSITORY:镜像来源的仓库名

    TAG:镜像的标签(每个镜像可以对应多个标签,则会在docker images命令中显示为多行)

    IMAGE_ID:镜像ID,镜像的唯一标志

    CREATED:创建时间

    SIZE:所占用的空间大小

查找镜像

查找Docker Hub所有公共的可用镜像

1
docker search KEYWORD

search

  • 返回如下信息:

    NAME:仓库名

    DESCRIPTION:镜像描述

    STARS:用户评价(受欢迎程度)

    OFFICIAL:是否由开发团队官方管理

    AUTOMATED:是否由Docker Hub的自动构建流程创建

拉取镜像

使用docker pull命令,可以从指定仓库将镜像拉取到本地

1
docker pull [Registry地址]<仓库名>:<标签>

如果不指定标签,则默认拉取最新版本的镜像。

若不指定Registry地址,则从Docker Hub进行拉取:

1
docker pull ubuntu:14.04	//从Docker Hub拉取Ubuntu 14.04版本的镜像

若指定Registry地址,则从指定的私有库拉取镜像:

1
docker pull 192.168.1.100/ubuntu/14.04.3.tar:latest

删除镜像

可以使用docker rmi命令删除本地的镜像

1
docker rmi IMAGE [IMAGE2 IMAGE3...]

IMAGE可以为仓库名、仓库名:标签、镜像ID

Docker容器管理

创建并启动新容器

1
docker run [OPTIONS] 镜像名 [执行命令] [命令参数]
  • OPTIONS常见选项:
    • –name=”容器名” : 为容器指定名称
    • -i : 以交互模式运行容器,通常与-t同时使用,使容器提供一个交互式shell
    • -t : 为容器分配一个伪tty终端,通常与-i同时使用,使容器提供一个交互式shell
    • -d : 在后台运行容器(创建守护式容器),并返回容器ID
    • -h “hostname” : 为容器指定hostname
    • -p [宿主机IP:]端口:容器端口 : 将容器的指定端口映射到宿主机(指定IP)的指定端口
    • –dns IP : 指定容器使用的DNS服务器地址,不指定的情况下默认与宿主机一致
  • 示例
1
2
docker run -i -t -d --name="sayers_ubuntu" -h "sayers" -p 127.0.0.1:8080:80 --dns 8.8.8.8 ubuntu /bin/bash
#在后台创建并启动一个提供交互式shell的ubuntu容器,指定容器名为sayers_ubuntu,hostname为sayers,将容器的80端口映射到宿主机127.0.0.1:8080端口,并指定容器使用8.8.8.8作为DNS服务器,在容器启动后执行/bin/bash命令

列出容器信息

1
2
3
4
5
6
7
8
9
10
11
docker ps
#列出正在运行的容器信息

docker ps -a
#列出所有容器信息,包括正在运行和已停止的

docker ps -l
#列出最近创建的一个容器

docker ps -a -s
#列出所有容器信息,以及每个容器占用的文件大小

控制已创建的容器

  • 启动已经停止的容器:

    1
    docker start 容器名|容器ID
  • 停止运行中的容器:

    1
    docker stop 容器名|容器ID
  • 强制停止运行中的容器:

    1
    docker kill 容器名|容器ID

    关掉容器时优先使用stop命令,只有当容器内应用存在异常情况而无法正常停止时,才会考虑使用kill命令强制停止容器。

  • 重新启动运行中的容器:

    1
    docker restart 容器名|容器ID

附着到容器上

​ 当容器以后台模式运行时,可以通过docker attach命令附着到容器上,并在容器环境中执行任意命令。

1
docker attach 容器名|容器ID

​ 当使用attach命令附着到容器之后,可以通过Ctrl + P + Q 组合键退出附着环境,此时容器仍会在后台继续运行。

在容器内执行命令

​ 当容器以后台模式运行时,可以用docker exec在容器内执行命令

1
docker exec 容器名|容器ID 命令 [命令参数]

例如,使用docker exec命令在容器中创建一个文件:

1
docker exec 18120f2d4c4d touch /tmp/1.txt
  • docker attach和docker exec的区别:

    attach:将本机的标准输入输出附着到容器上,本质上并没有在容器内创建进程执行命令

    exec:在容器内创建进程执行命令,并返回执行结果

监控容器状态

  • 查看容器内进程

    1
    docker top 容器名|容器ID

    docker top命令类似于Linux操作系统中的ps命令,可以获取当前运行进程的各类信息。Linux操作系统下ps命令的各个参数,在docker top命令下均有效。

  • 统计容器资源消耗

    1
    docker stats 容器名|容器ID [--no-stream=false|true]
    • docker stats命令会反馈容器的CPU、内存、网络I/O和存储I/O的使用情况。所有的使用情况指标都是基于对应的容器环境,而非主机环境。

    • docker stats命令支持统计多个容器的资源情况,只需要输入多个容器的名称或ID,中间用空格分开。

    • docker stats命令支持参数–no-stream,默认值为false。当–no-stream=false时,执行docker stats命令会实时统计资源使用状况。当–no-stream=true时,docker stats命令只会返回一次资源情况,并退出执行。

  • 获取容器内部日志

    1
    docker logs [参数] 容器名|容器ID

    docker logs命令可以获取容器内部stdout和stderr输出的日志信息。

    可以使用以下参数:

    • -f : 实时显示stdout追加输出的日志,不自动退出,这个参数默认为false
    • -t : 在每条日志前加上时间输出,默认为false
    • –since datetime : 用于截取输出日志范围的起始时间为datetime
    • –until datetime : 用于截取输出日志范围的结束时间为datetime
    • –tail N : 用于指定输出最后N条记录

容器和主机间的文件传输

1
2
3
4
5
docker cp 容器名|容器ID:容器内文件路径 主机文件路径
#将指定容器内的指定文件复制到主机指定路径下

docker cp 主机文件路径 容器名|容器ID:容器内文件路径
#将主机内的文件复制到指定容器内的指定路径下

例如,将容器内的/tmp/122.txt拷贝到主机下:

1
docker cp sayers_ubuntu:/tmp/122.txt /tmp/