1. 获取镜像


  • 从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

    1. docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签]
  • 具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。仓库名:这里的仓库名是两段式名称,即 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

    docker pull ubuntu:16.04
    
  • 上面的命令没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 ubuntu:16.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 16.04 的镜像。

    2. 运行镜像


  • 有了镜像后,我们就能以这个镜像为基础启动并运行一个容器。以上面的 ubuntu:16.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令:

    docker run -it --rm ubuntu:16.04 bash
    
    • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t:终端。
    • --rm:这个参数是说容器退出后随之将其删除。
    • ubuntu:16.04 :这里指用 ubuntu16.04 镜像为基础来启动容器。
    • bash:放到镜像名后的是命令,这里我们希望有个交互式的 Shell,因此用的是 bash
  • 我们通过 exit 退出这个容器。

    3. 列出镜像


  • 要想列出已经下载下来得镜像,可以使用以下命令。列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。

    docker image ls
    docker images
    
  • 查看镜像、容器、数据卷所占用的空间。

    docker system df
    
  • 仓库名、标签均为 的镜像称为虚悬镜像(dangling image),显示这类镜像:

    docker image ls -f dangling=true
    
  • 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。

    docker image prune
    

4. 删除本地镜像


  • 如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

    docker image rm [选项] <镜像1> [<镜像2> ...]
    
    • 启动,<镜像> 可以是镜像短 ID、镜像长 ID、镜像名或者镜像摘要。
  • 使用 docker image ls -1 来配合 docker image rm,这样可以批量删除希望删除的镜像。

    docker image rm $(docker image ls -q ubuntu) # 删除所有仓库名为 ubuntu 的镜像
    
  • 删除所有在 ubuntu:16.04 之前的镜像:

    docker image rm $(docker image ls -q -f before=ubuntu:16.04)
    
  • 删除所有镜像

    docker image rm $(docker image ls -q)
    

5. 启动容器


1. 基于镜像新建一个容器并启动

docker run
  • 输出一个 “Hello World”,之后终止容器。

    docker run ubuntu:16.04 /bin/echo 'Hello World'
    
  • 启动一个 bash 客户端,允许用户进行交互

    docker run -t -i ubuntu:16.04 /bin/bash
    
  • -t 让 Docker 分配一个伪终端并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。

  • 当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
    • 检查本地是否存在指定的镜像,不存在就从公共仓库下载。
    • 利用镜像创建并启动一个容器。
    • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
    • 从地址池配置一个 ip 地址给容器。
    • 执行用户指定的应用程序。
    • 执行完毕后容器被终止。

      2. 启动已终止的容器

      docker container start
      docker start
      

6. 后台运行


  • 很多时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。
  • 此时,可以通过添加 -d 参数来实现。
    • 如果不适用 -d 参数来运行容器,比如 docker run hello-world 会把日志打印在控制条。
    • 如果使用了 -d 参数运行容器,比如 docker run -d hello-world 不会输出日志,只会打印容器 id(输出结果可以用 docker logs 查看)。
  • 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。

    7. 停止运行的容器


  • 可以使用 docker container stopdocker stop 来终止一个运行中的容器。
  • 终止状态的容器可以用 docker container ls -adocker ps -a 命令看到。
  • 处于终止状态的容器,可以通过 docker container start 命令来重新启动。
  • 此外,docker container restart 命令会将一个运行态的容器终止,然后再重新启动它。

    8. 进入容器


  • 在使用 -d 参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,使用 docker exec 命令可以进入到容器中。
  • exec 命令 -i -t 参数
    • docker exec 后边可以跟多个参数,这里主要说明 -i -t 参数
    • 只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。
    • -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。
docker exec -it 容器ID /bin/bash

9. 导出和导入容器


导出容器

  • 如果要导出本地某个容器,可以使用 docker export 命令
    docker export 容器ID > 导出文件名.tar
    

导入容器

  • 可以使用 docker import 从容器快照文件中再导入为镜像。

    cat 导出文件名.tar | docker import - 镜像用户/镜像名:镜像版本
    
  • 此外,也可以通过指定 URL 或者某个目录来导入

    docker import http://study.zp.com/image.tgz example/imagerepo
    

10. 删除容器


删除容器

  • 可以使用 docker comtainer rm 来删除一个处于终止状态的容器。

    docker container rm 容器ID
    
    • 如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。

      清理所有处于终止状态的容器

  • docker container ls -a 命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。

    docker container prune