获取镜像
  • 命令:docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

  • 默认地址是 Docker Hub, 仓库由<用户名>/<仓库名>两段式命名,默认用户名library(官方仓库)

  1. $ docker run -d -p 80:80 --name webserver nginx
  2. Unable to find image 'nginx:latest' locally
  3. latest: Pulling from library/nginx
  4. f7e2b70d04ae: Pull complete
  5. 08dd01e3f3ac: Pull complete
  6. d9ef3a1eb792: Pull complete
  7. Digest: sha256:98efe605f61725fd817ea69521b0eeb32bef007af0e3d0aeb6258c6e6fe7fc1a
  8. Status: Downloaded newer image for nginx:latest
  9. 1136b11756c216eed732c948ba3ab0f263c11c480ea601c3b2251267c64198ae

运行
  • 命令:docker run

列出镜像
  • 命令:docker image ls

  • 默认列表包含了仓库名、标签、镜像 ID、创建时间、所占用的空间

  • 镜像ID,是镜像的唯一标识,同一个镜像不同标签(即多个版本),镜像ID相同

  • 由于镜像是多层构建的,不同的镜像可能依赖共同的基础层,故实际镜像所占空间会小于命令显示的镜像空间总和。

  • 可使用 docker system df 来查看镜像、容器、数据卷所占用的空间

  • 虚悬镜像docker pulldocker build命令,由于新旧镜像同名,从而出现 <none> <none> 00285df0df87 5 days ago 342MB 之类的无标签镜像。可使用 docker image prune 命令删除

  • 参数解析:

    • -a: 列出 中间层镜像(镜像共同依赖的基础层,不应删除)
    • -f: 即 过滤器(filter), 用于筛选显示所需部分
      • dangling=true : 列出虚悬镜像
      • since=mongo:3.2: 列出指定镜像之后创建的镜像
    • -format: 自定义输出格式。可参照 Go语法模板
    • -q: 仅列出镜像ID
    • --digests: 显示镜像摘要

删除镜像
  • 命令:docker image rm [选项] <镜像1> [<镜像2> ...]

  • 可使用 镜像ID、镜像名、镜像摘要 来删除镜像

  • 若镜像存在正在运行的容器,则删除不成功

  • Untagged

    • 由于不同标签的镜像对应的 镜像ID镜像摘要相同,故删除时,首先需要取消所有要删除的镜像的标签
    • 使用删除命令时,实际上是在删除某个标签的镜像,但除要删除的指定标签外,可能仍旧存在其他标签指向该镜像,此时删除命令仅导致 untagged,未触发真正的 deleted 操作
  • 配合 image ls,示例:docker image rm $(docker image ls -q redis)

docker commit

  • 此命令用于将容器的存储层保存下来,成为新的镜像

  • 慎用,黑箱操作不便于维护,应使用 Dockerfile 构建镜像

  1. # 以nginx镜像为基础启动容器,命名为 webserver1 (不能与已有容器重名)
  2. docker run --name webserver1 -d -p 80:80 nginx
  3. # 进入容器 bash ,并创造一个交互界面
  4. docker exec -it webserver1 bash
  5. # 覆盖默认欢迎页
  6. echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  7. # exit 退出后,查看容器存储层的改动
  8. docker diff webserver1
  9. # 保存这一改动
  10. docker commit --author 'xx' --message 'xx' webserver1 nginx:v2
  11. # 查看历史修改
  12. docker history nginx:v2
  13. # 基于v2版本运行容器,可访问本地81端口查看
  14. docker run --name web2 -d -p 81:80 nginx:v2

docker镜像导出导入

  1. # 注意,file为 .tar 格式
  2. docker save image_id> filepath
  3. # 将镜像导入,运行docker image list 可查看镜像
  4. docker load --input filepath