docker技术学习总结(1)—— 镜像

1,获取镜像 docker pull name:[tag]

如果不指定tag,默认拉取最新版本(tag为latest)。

几个栗子:  

  • docker pull ubuntu,从ducker hub中Ubuntu仓库下载最新的Ubuntu操作系统镜像
  • docker pull ubuntu:16.04,通过指定标签下载特定版本的镜像
  • docker pull registry-server/ubuntu,指定注册服务器(registry-server默认是hub.docker.com)下载最新版本的镜像

执行docker run -it ubuntu /bin/bash命令即可利用下载好的镜像创建容器并运行容器里的应用

2,查看镜像 docker images


  • REPOSITORY:来自哪个仓库,如ubuntu仓库  
  • TAG:镜像的标签,用来标记来自同一个仓库的不同发行版本的镜像,如ubuntu仓库下有10.04、13.04等版本的镜像
  • IMAGE ID:镜像的唯一id
  • CREATED:创建时间
  • SIZE:镜像大小

    可以用docker tag命令为本地镜像添加便于记忆的标签。例如,为ubuntu:16.04添加ub标签:docker tag ubuntu:16.04 ub,命令执行之后,会多出一个ub:latest镜像。

    IMAGE ID相同的镜像说明指向了同一个镜像,只是别名不同。

    使用docker inspect命令查看镜像详细信息。例如,docker inspect 5e8b97a2a082,查看IMAGE ID以5e8b97a2a082开头的镜像详细信息。返回信息为json格式,如果想只想查看其中某项信息,可以使用-f参数来指定。例如,docker inspect 5e8b97a2a082 -f {{".RootFS.Type"}} 返回根节点下RootFS节点下Type的值。

3,查找镜像 docker search TERM

默认搜索doker hub官方仓库中的镜像,命令支持的参数:

  • --filter=is-automated=false,查询不是自动创建的镜像列表
  • --filter=is-OFFICIAL=true,查询官方的镜像列表
  • --filter=stars=3,查询stars数量大于3的镜像列表
  • --no-trunc=true,输出信息不用...截断显示

多个条件共同使用:--filter=is-automated=false --filter=is-OFFICIAL=true(不是自动创建、官方的镜像列表)

栗子: docker search mysql --filter=is-OFFICIAL=true --no-trunc=true:查找带关键字mysql的官方镜像,不用...截断显示。

4,删除镜像 docker rmi IMAGE [IMAGE...]

  • 使用标签删除:
     docker rmi ub ubuntu:16-04,删除标签为ub和ubuntu:16-04的镜像,当同一个镜像(id相同)存在多个标签时,只会删除镜像的标签。当镜像只剩下一个标签时,会彻底删除镜像。
  • 使用id删除:

docker rmi 5e8b97a2a082,先尝试所有镜像的标签,然后删除镜像。如果有该镜像创建的容器存在时,无法删除镜像,可以使用docker ps -a查看所有容器。


有两个退出状态的容器是基于id为5e8b97a2a082的镜像创建的,不能删除该镜像,如果强制删除,使用-f参数:docker rmi 5e8b97a2a082 -f,不推荐这样删除,会有一些遗留问题。

    正确的做法是先删除镜像的所有容器,再删除镜像,docker rm e48d924e2db7 2863979e58b2。

5,创建镜像

创建镜像有三种方式:基于已有镜像的容器创建、基于本地模版导入、基于dockerFile创建(后续总结)。

  • 基于已有镜像的容器创建 docker commit [options] container [registery[:tag]],主要选项:
  1.  -a,  --author="" 作者信息
  2.  -m,  --message="" 提交信息
  3.  -p,  --pause=true 提交时暂停容器运行

依次执行docker run -it ubuntu /bin/bash、touch test、exit命令,执行docker ps -a,记录容器id:f08de6f16901。此时,容器已经跟原来的镜像相比,发生了变化,可以使用docker commit提交一个新的镜像,可以使用id或名称指定容器:

docker commit -m  "test add" -a "jgx" f08de6f16901 test,查看本地镜像列表,会多出一个标签为test的镜像。

  • 基于本地模版导入(本人没有实践过)

推荐是有那个openVZ提供的模版创建,下载地址:https://openvz.org/Download/template/precreated。

比如下载了一个ubuntu-16.04的压缩包,可以使用以下命令导入:

cat ubuntu-16.04-x86_64-minimal.tar.gz | docker import - ubuntu:16.04

6,存出和载入镜像 docker save、docker load

  • 存出本地镜像hello-world为文件hello-world.tar:

docker save -o hello-world.tar hello-world

  • 存存出的文件导入到本地镜像库:

docker load --input  hello-world.tar或者docker load < hello-world.tar

7,上传镜像 docker push name[:tag]

默认上传到docker hub官方仓库,需登录,在docker hub网站注册之后(要加载google验证码,需),即可上传自己的镜像。例如用户名为user,上传本地的test镜像,可以先添加新的标签user/test,然后执行docker push命令上传:

docker tag test user/test

docker push user/test

第一次上传时会提示登录,如果没有提示登录并报错: requested access to the resource is denied,需手动登录:

docker login ,输入账号和密码提示Login Succeeded,重新push即可。

docker技术学习总结(2)—— 容器

你可能感兴趣的:(docker,容器技术)