管理镜像

  • 从docker hub下载镜像
1
[root@node1 ~]# docker pull hello-world
  • 查看镜像信息
    1
    [root@node1 ~]# docker images hello-world
  • 给镜像添加tag标签(起别名,创建链接)
1
[root@localhost ~]# docker tag hello-world:latest hello-world:0.0.1
  • 运行镜像
1
[root@node1 ~]# docker run -it ubuntu bash
  • 查看镜像创建历史
1
[root@node1 ~]# docker history hello-world
  • 搜索镜像
1
[root@localhost ~]# docker search nginx
  • 删除镜像

  • rmi 只能删除 host 上的镜像,不会删除registry 的镜像。

  • 如果一个镜像对应了多个 tag,只有当最后一个 tag 被删除时,镜像才被真正删除。

  • 后台存在退出状态的容器,依赖该镜像时不可以删除,可以使用docker ps -a查看,使用docker rm 删除依赖的容器,然后才能删除该镜像

1
2
3
4
5
[root@node1 ~]# docker image rm ubuntu:18.10

[root@node1 ~]# docker rmi ubuntu:18.10

[root@node1 ~]# docker image rm feb5d9fea6a5
  • 清理临时镜像

    1
    [root@localhost ~]# docker image prune

构建镜像

基于已有镜像

  • 第一步: 运行容器

    1
    [root@node1 ~]# docker run -it alpine
  • 第二步: 进行自定义操作(安装bash)

    1
    2
    3
    4
    # 更新Alpine的软件源为国内(清华大学)的站点
    echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories
    # 安装bash vim
    apk update && apk upgrade && apk add --no-cache bash bash-doc bash-completion vim && rm -rf /var/cache/apk/* && /bin/bash
  • 第三步: 在宿主机操作,查看容器名称

    1
    2
    3
    4
    # docker ps

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    4cb9079a8de4 alpine "/bin/sh" 5 minutes ago Up 5 minutes gallant_noether
  • 第四步: 将容器保存为镜像

    1
    2
    3
    4
    [root@node1 ~]# docker commit gallant_noether alpine-vim-bash:1.0
    sha256:88068208e6f16aba3743a727a7da88659afc2c8315cb3981fda7fe48178b0f5f
    # 或者根据容器id直接创建
    [root@node1 ~]# docker commit 4cb9079a8de4 alpine-vim-bash:1.0
  • 第五步: 查看新镜像属性

    1
    2
    3
    [root@node1 ~]# docker images alpine-vim-bash
    REPOSITORY TAG IMAGE ID CREATED SIZE
    alpine-vim-bash 1.0 88068208e6f1 About a minute ago 34.1MB
  • 第六步: 从新镜像启动容器,验证操作

    1
    2
    docker run -it alpine-vim-bash:1.0
    # vim

本地模板导入

  • 第一步: 访问openvz模板网站,下载模板文件

  • 第二步: 导入到docker镜像中

    1
    2
    3
    [root@node1 ~]# wget http://download.openvz.org/template/precreated/centos-7-x86_64-minimal.tar.gz

    [root@node1 ~]# cat centos-7-x86_64-minimal.tar.gz | docker import - centos:7
  • 第三步: 查看镜像列表

    1
    [root@node1 ~]# docker images centos:7

Dockerfile 构建镜像

  • 第一步: 准备Dockerfile文件

    1
    2
    3
    4
    [root@node1 ~]# mkdir ~/docker && touch ~/docker/Dockerfile
    [root@node1 ~]# vim ~/docker/Dockerfile
    FROM alpine
    RUN apk update && apk upgrade && apk add --no-cache bash bash-doc bash-completion vim && rm -rf /var/cache/apk/* && /bin/bash
  • 第二步: 使用docker build 创建镜像

    1
    2
    3
    4
    5
    [root@node1 docker]# cd ~/docker
    [root@node1 docker]# docker build -t alpine:2.0 .
    # -t: 创建镜像的标签
    # . 表示Dockerfile文件在当前路径
    # -f 参数指定 Dockerfile 的位置
  • 第三步: 查看alpine:2.0镜像信息

    1
    [root@node1 docker]# docker images alpine:2.0
  • 第四步: 查看镜像构建历史,验证镜像

    1
    2
    3
    4
    5
    6
    [root@node1 docker]# docker history alpine:2.0
    IMAGE CREATED CREATED BY SIZE COMMENT
    51462ce6c32b 9 minutes ago /bin/sh -c apk update && apk upgrade && apk … 36.3MB
    c059bfaa849c 10 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
    <missing> 10 months ago /bin/sh -c #(nop) ADD file:9233f6f2237d79659… 5.59MB

导出和导入镜像

  • 导出镜像

    1
    2
    docker save image_name > xx.tar
    docker save -o xx.tar image_name
  • 导入镜像

    1
    2
    docker load < xx.tar
    docker load -i xx.tar

镜像总结

命令 说明
images 显示镜像列表
history 显示镜像构建历史
commit 从容器创建新镜像
build 从 Dockerfile 构建镜像
tag 给镜像打 tag
pull 从 registry 下载镜像
push 将 镜像 上传到 registry
rmi 删除 Docker host 中的镜像
search 搜索 Docker Hub 中的镜像
image prune 清理临时镜像

镜像命令

  1. docker images列出本地主机上的镜像

    • 显示说明:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      REPOSITORY:表示镜像的仓库源
      TAG:镜像的标签
      IMAGE ID:镜像ID
      CREATED:镜像创建时间
      SIZE:镜像大小

      同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

      如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,
      docker 将默认使用 ubuntu:latest 镜像
    • OPTIONS说明:

      1
      2
      3
      4
      -a :列出本地所有的镜像(含中间映像层)
      -q :只显示镜像ID。
      --digests :显示镜像的摘要信息
      --no-trunc :显示完整的镜像信息
  2. docker search 某个XXX镜像名字

    • 从网站:https://hub.docker.com 上查找

    • 命令: docker search [OPTIONS] 镜像名字

    • OPTIONS说明

      1
      2
      3
      --no-trunc : 显示完整的镜像描述
      -s : 列出收藏数不小于指定值的镜像。
      --automated : 只列出 automated build类型的镜像;
  3. docker pull 某个XXX镜像名字下载镜像

    • docker pull 镜像名字[:TAG]
  4. docker rmi 某个XXX镜像名字ID删除镜像

    • 删除单个: docker rmi -f 镜像ID

    • 删除多个: docker rmi -f 镜像名1:TAG 镜像名2:TAG

    • 删除全部:docker rmi -f $(docker images -qa)