Docker入门(1)-对镜像的操作

-a, --all-tags=false

下载所有tegged的镜像(下载所有标签不同的镜像)

--help=false

Print usage

  • 如果不显式的指定TAG,则默认会选择latest标签,就是下载镜像库中最新的版本.
  • DEMO
    • 下面演示的是从Docker HubUbuntu仓库下载一个最新的Ubuntu操作系统的(不指定版本,默认为latest)镜像
      • [root@Ninemax-LPC3 ~]# docker pull ubuntu
      • latest: Pulling from ubuntu
      • 02658b5e0e10: Pull complete
      • ...
      • Digest: sha256:8e6b67faf44a036a18b9a3987e826fe3accbd1742e219145a461a3210a9d8142
      • Status: Downloaded newer image for ubuntu:latest
    • 解释:
      • 该命令实际上下载的就是ubuntu:latest镜像
      • 由于未指定注册服务器,即从默认的注册服务器registry.hub.docker.com中的ubuntu仓库下载镜像,相当于docker pull registry.hub.docker.con/ubuntu:latest
      • 下载过程中可以看出,镜像文件一般由若干层组成,行首的02658b5e0e10这样的字符串代表了各层的ID.下载过程中会获取并输出镜像的各层信息.(layer) 其实是AUFS(Advanced Union File System,一种文件联合系统)中的重要概念,是实现增量保存与更新的基础.

       

    • 还可以通过指定标签(tag)来下载特定版本的一某一个镜像,例如14.04标签的镜像
      • [root@Ninemax-LPC3 ~]# sudo docker pull ubuntu:14.04

         

    • 当然了,你也能从第三方服务器下载镜像,例如从DaoCloud社区下载一个镜像.
      • [root@Ninemax-LPC3 ~]# docker pull daocloud.io/library/nginx:latest
    • 解释:
      • 上面的命令就是我们从 daocloud下载一个镜像
      • 这段命令(docker pull daocloud.io/library/nginx:latest)可拆分为四部分:

docker pull

毋庸置疑的docker命令

daocloud.io/library/

注册服务器地址

nginx

访问的仓库

latest

下载的镜像版本

   

  • 2.查看镜像信息
    • DOCKER IMAGES
      • 使用docker iamges 查看当前本机上已有的镜像
        • [root@Ninemax-LPC3 ~]# docker images
        • 仓库 标签信息 镜像ID 镜像创建时间 镜像大小
        • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
        • ubuntu latest dc8dd8718e57 4 weeks ago 119.2 MB
        • ubuntu 14.04 7198809c062f 4 weeks ago 188 MB
        • daocloud.io/library/centos latest 4beff0251382 9 weeks ago 192.5 MB
        • daocloud.io/library/nginx latest bb8f1ef45c26 10 weeks ago 109.4 MB
      • 需要了解:
        • 其中镜像的ID( IMAGE ID )信息十分重要,它唯一标识了镜像.
        • TAG信息用来标记来自同一个仓库的不同镜像. 例如ubuntu仓库中有多个镜像,通过TAG信息来区分发型版本,包括 10.01,12.04,13.04,14.04等标签

         

    • DOCKER TAG
      • 还可以使用docker tag命令为本地镜像添加一个新的标签.例如
        • Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
        • [root@Ninemax-LPC3 ~]# docker tag ubuntu:latest ubuntu:aaa
        • [root@Ninemax-LPC3 ~]# docker images
        • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
        • ubuntu latest dc8dd8718e57 4 weeks ago 119.2 MB
        • ubuntu aaa dc8dd8718e57 4 weeks ago 119.2 MB
      • 需要了解:
        • 上面执行docker tag命令已经对镜像新增了一个TAGaaa的标签
        • 两个镜像的IMAGE ID完全相同,这就代表了这两个其实是指向同一镜像文件的,只是TAG不同

         

    • DOCKER INSPECT
      • 使用docker inspect 命令可以获取镜像的详细信息:
        • [root@Ninemax-LPC3 ~]# docker inspect dc8dd8718e57
        • [{
        • "Id": "dc8dd8718e57c6bfb877b74b12b0b74572f9af31bcac6143321817d8318045bc",
          • ...........................................................太长了 不粘贴了
      • 当然了,你还可以指定显示某一个字段的信息,例如:
        • [root@Ninemax-LPC3 ~]# docker inspect -f {{".Architecture"}} dc8dd8718e57
        • amd64
        • [root@Ninemax-LPC3 ~]# docker inspect -f {{".VirtualSize"}} dc8dd8718e57
        • 119165165

         

  • 3.搜寻镜像(DOCKER SEARCH)
    • 使用docker search命令可以仓库中共享的镜像,默认搜索Docker Hub官方仓库的镜像
    • 语法:
      • Usage:        docker search [OPTIONS] TERM
      • OPTIONS:

--automated=false

只列出 automated build类型的镜像

--help=false

Print usage

--no-trunc=false

显示完整的镜像描述

-s, --stars=0

列出收藏数不小于指定值的镜像

   

  • 例如,搜索带mysql关键词的镜像如下所示:
    • [root@Ninemax-LPC3 ~]# docker search mysql
    • NAME DESCRIPTION STARS OFFICIAL AUTOMATED
    • mysql MySQL is a widely used, open-source relati... 4663 [OK]

   

  • 4.删除镜像(DOCKER RMI)
    • 使用 docker rmi 命令可以删除本地镜像.
    • 语法:
      • Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
      • OPTIONS:

-f, --force=false

强制删除镜像(忽略容器正在使用)

--help=false

Print usage

--no-prune=false

不移除该镜像的过程镜像,默认移除

   

  • DEMO
    • 使用镜像的标签删除镜像(REPOSITORY:TAG)
      • [root@Ninemax-LPC3 ~]# docker rmi ubuntu:14.04
      • Untagged: ubuntu:14.04
      • Deleted: 7198809c062fa2c10dcb93792e4cf76000a8c8a0d5a4588b1f170e9406b7dd4e
      • ...省略删除信息
    • 用镜像ID删除镜像(IMAGE ID):
      • [root@Ninemax-LPC3 ~]# docker rmi bb8f1ef45c26
    • 使用区别:
      • IMAGE ID:使用ID删除一个镜像时,会删除此镜像的所有标签和文件,
      • TAG:使用标签删除镜像时,只有当镜像标签全部删除后,镜像文件才会被删除(推荐使用这种)

   

  • 强制删除镜像:
    • 如果有容器正在运行此镜像(无法删除镜像时),可以在rmi命令中追加一个-f进行强制删除!这种强制删除会造成其他的遗留问题.
    • 正确的做法是
      • 查看本机上的所有容器(命令 docker ps -a)
      • 停止此镜像正在运行中的所有容器 (命令:docker stop CONTAINER ID )
      • 删除依赖依赖此镜像的容器(命令: docker rm CONTAINER ID )
      • 删除此镜像(命令: docker rmi IMAGE ID)

         

  • 5.创建镜像
    • 创建镜像的方法有三种:基于已有镜像的容器创建,基于本地模板导入,基于DockerFile创建,这里我只说

       

    • 基于已有镜像的容器创建(DOCKER COMMIT):
      • 该方法主要是使用docker commit命令
      • 语法:
        • 从容器创建一个新的镜像
        • Usage:        docker commit [OPTIONS] CONTAINER [NEW_REPOSITORY[:TAG]]
        • OPTIONS:

-a, --author=

作者信息 (e.g., "姓名 <邮箱>")

-c, --change=[]

使用Dockerfile指令来创建镜像

--help=false

Print usage

-m, --message=

提交时的说明文字

-p, --pause=true

commit时,将容器暂停

  • 实战:
    • 下面将掩饰如何使用该命令创建一个新镜像,首先要创建一个容器,并在其中进行修改操作,例如,创建一个test文件,之后退出!
      • [root@Ninemax-LPC3 ~]# docker run -ti centos:7.3 /bin/bash
      • [root@Ninemax-LPC3 ~]# cd /home
      • 创建文件并保存,退出容器(ctrl+D或者 输入exit+火车)
      • 记住容器的ID (也可以通过命令:dockers ps -a查看),例如我的ID: 9f21e71c8ab0
    • 下面我们实际运行一下commit命令:
      • [root@Ninemax-LPC3 ~]# docker commit -a "linglongtouzianhongdou" -m "new Docker Image" 9f21e71c8ab0 newdocker:1.0
      • 5b59c0c6496fe987ecc19eb3b67663cd14b013da8a04df8dfa7e0b8c99a2c550(生成出的镜像ID)
    • 我们可以看到, commit后跟的-a -mcommit命令的选项 ,之后是我们的CONTAINER ID:9f21e71c8ab0 之后是一个 NAME[:TAG] 仓库名:标签
    • 现在我们查看我们刚刚创建的镜像:
      • [root@Ninemax-LPC3 ~]# docker images
      • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
      • newdocker 1.0 5b59c0c6496f 18 seconds ago 192.5 MB
      • centos 7.3 4beff0251382 9 weeks ago 192.5 MB

       

       

  • 6.存出和载入镜像
    • 可以使用docker savedocker load命令来导入镜像和载出镜像

       

    • 存出镜像(DOCKER SAVE):
      • 如果要存储镜像到本地文件,可以使用docker save命令
      • 语法:
        • 保存镜像(载出镜像)
        • Usage:        docker save [OPTIONS] IMAGE [IMAGE...]
        • Usage:        docker save IMAGE > file|URL
        • OPTIONS:

--help=false

Print usage

-o, --output=

输出路径

  • 实战
    • 先查看镜像:
      • [root@Ninemax-LPC3 ~]# docker images
      • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
      • centos 7.3 4beff0251382 9 weeks ago 192.5 MB
    • 存储镜像:
      • 这行命令中有个参数 -o 指定路径和文件名称,如果没写路径,会存到当前路径中!
      • [root@Ninemax-LPC3 ~]# docker save -o centos_7.3.tar centos:7.3
        • or
      • [root@Ninemax-LPC3 ~]# docker save centos:7.3 > centos_7.3.tar
  • 载入镜像(DOCKER LOAD):
    • 可以使用docker load从本地的文件中再导入到本地的镜像仓库,例如从文件 centos_7.3.tar导入到本地镜像列表
    • 语法:
      • 加载镜像(载入镜像)
      • Usage:        docker load [OPTIONS]
      • Usage:        docker load < file|URL

--help=false

Print usage

-i, --input=

文件路径

   

  • 实战:
    • 先查看镜像列表
      • [root@Ninemax-LPC3 docker]# docker images
      • REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
    • 载入镜像:
      • [root@Ninemax-LPC3 docker]# docker load -i centos_7.3.tar
      • [root@Ninemax-LPC3 docker]# docker load < centos_7.3.tar

       

  • 7.上传镜像
    • 可以使用docker push 命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录),命令格式为docker push NAME[:TAG] (push需要用tag命令先打个标签)

       

    • 需要提前在官网注册一下帐户!
      • [root@Ninemax-LPC3 docker]# docker tag centos:7.3 user/test:7.3
      • [root@Ninemax-LPC3 docker]# docker push user/test:7.3
      • The push refers to a repository [user/test] (len: 1)
      • 4beff0251382: Image push failed
      • 4beff0251382: Buffering to Disk
      • Please login prior to push:
      • Username:
      • Password:
      • Email:
posted @ 2017-08-22 19:36  玲珑骰子安红豆  阅读(345)  评论(0编辑  收藏  举报