Docker技术入门与实战【1.2】

张开发
2026/5/31 14:25:37 15 分钟阅读
Docker技术入门与实战【1.2】
3.3 搜寻镜像使用docker search命令可以搜索远端仓库中共享的镜像默认搜索Docker Hub官方仓库中的镜像。用法为docker search TERM支持的参数包括·--automatedfalse仅显示自动创建的镜像。·--no-truncfalse输出信息不截断显示。·-s,--stars0指定仅显示评价为指定星级以上的镜像。例如搜索带mysql关键字的镜像如下所示$ sudo docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relatihttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 213 [OK] tutum/mysql MySQL Server image - listens in port 3306http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/..http://www.hzcourse.co orchardup/mysql 36 [OK] tutum/lamp LAMP image - Apache listens in port 80, anhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 32 [OK] tutum/wordpress Wordpress Docker image - listens in port 8http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 26 [OK] paintedfox/mariadb A docker image for running MariaDB 5.5, a http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 21 [OK] dockerfile/mysql Trusted automated MySQL (http://dev.mysqlhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/..http://www.hzcourse.c google/mysql MySQL server for Google Compute Engine 13 [OK] anapsix/gitlab-ci GitLab-CI Continuous Integration in Dockerhttp://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 12 [OK] centurylink/drupal Drupal docker image without a DB included http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/... 11 [OK] stenote/docker-lemp MySQL 5.6、 PHP 5.5、 Nginx、 Memcache 10 [OK] http://www.hzcourse.com/resource/readBook?path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...可以看到返回了很多包含关键字的镜像其中包括镜像名字、描述、星级表示该镜像的受欢迎程度、是否官方创建、是否自动创建等。默认的输出结果将按照星级评价进行排序。官方的镜像说明是官方项目组创建和维护的automated资源则允许用户验证镜像的来源和内容。3.4 删除镜像使用镜像的标签删除镜像使用docker rmi命令可以删除镜像命令格式为docker rmi IMAGE[IMAGEhttp://www.hzcourse.com/resource/readBook? path/openresources/teach_ebook/uncompressed/15029/OEBPS/Text/...]其中IMAGE可以为标签或ID。例如要删除掉dl.dockerpool.com5000/ubuntulatest镜像可以使用如下命令$ sudo docker rmi dl.dockerpool.com:5000/ubuntu Untagged: dl.dockerpool.com:5000/ubuntu:latest读者可能会担心本地的ubuntulatest镜像是否会受到此命令的影响。无需担心当同一个镜像拥有多个标签的时候docker rmi命令只是删除了该镜像多个标签中的指定标签而已并不影响镜像文件。因此上述操作相当于只是删除了镜像5506de2b643b的一个标签而已。为保险起见再次查看本地的镜像发现ubuntulatest镜像准确地说是5506de2b643b镜像仍然存在$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 5506de2b643b 1 weeks ago 197.8 MB ubuntu latest 5506de2b643b 1 weeks ago 192.8 MB但当镜像只剩下一个标签的时候就要小心了此时再使用docker rmi命令会彻底删除该镜像。假设本地存在一个标签为mysqllatest的镜像且没有额外的标签指向它执行docker rmi命令可以看出它会删除这个镜像文件的所有AUFS层$ sudo docker rmi mysql:latest Untagged: mysql:latest Deleted: 9a09222edf600a03ea48bd23cfa363841e45a8715237e3a58cb0167f0e8bad54 Deleted: 4daeda4ad839a152a3b649672bd5135977d7f81866d3bc0e16d0af3f65cc8af6 Deleted: cf07a411bf0883bd632940e8108dac49c64456a47f7390507de5685bbd6daf85 Deleted: 4f513746df18b222a07bb8d76d4b6d29752ce5dcb69bfad0ce92e6c1449a3821 Deleted: 228ecd435c8a29d25b77999036701a27f2d67874c915bb8eb9fb175b1f98aa60 Deleted: 37e4b3932afa186924a09eab332bc8ebec3aac8bac074314ed9a2d1e94547f50 Deleted: 898883ccfcee705e440547e30e240cb025c12410d7c9e4d2bcb11973ba075975 Deleted: 0a09ddcf99b7fd8fcb3525c41b54696038ecf13677f4459f1c98c742ffa60ab2 Deleted: 35bc8591e39be5089265a093e234d13a4b155a01d2ab9e8904eafa81664fb597 Deleted: 857e856e4481d59ee88a4cdedd9aaf855666bd494fa38506e6788361c0af4cda使用镜像ID删除镜像当使用docker rmi命令后面跟上镜像的ID也可以是ID能进行区分的部分前缀串时会先尝试删除所有指向该镜像的标签然后删除该镜像文件本身。注意当有该镜像创建的容器存在时镜像文件默认是无法被删除的例如先利用ubuntu镜像创建一个简单的容器输出一句话“helloI am here”$ sudo docker run ubuntu echo hello! I am here!hello! I am here!使用docker ps-a命令可以看到本机上存在的所有容器$ sudo docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe812617b41f6 ubuntu:latest echo hello! I am h 13 seconds ago Exited (0) 12 seconds ago silly_leakey可以看到后台存在一个退出状态的容器是刚基于ubuntulatest镜像创建的。试图删除该镜像Docker会提示有容器正在运行无法删除$ sudo docker rmi ubuntuError response from daemon: Conflict, cannot delete 5506de2b643b because the container e812617b41f6 is using it, use -f to force2014/10/16 18:10:31 Error: failed to remove one or more images如果要想强行删除镜像可以使用-f参数$ sudo docker rmi -f ubuntu笔者不推荐使用-f参数来强制删除一个存在容器依赖的镜像因为这样往往会造成一些遗留问题。再次使用docker images查看本地的镜像列表读者会发现一个标签为none的临时镜像原来被强制删除的镜像换了新的ID继续存在系统中。$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEnone none 2318d26665ef 3 months ago 198.7 MB因此正确的做法是先删除依赖该镜像的所有容器再来删除镜像。首先删除容器e812617b41f6$ sudo docker rm e81e81此时再使用临时的ID来删除镜像此时会正常打印出删除的各层信息corelocalhost ~ $ docker rmi -f 2318d26665efDeleted: 2318d26665eff33e9f91c4c99036751afb40eb58f944a585372bec1407828ad3Deleted: ebc34468f71dca9cb9937bf4c33062540bcacae148df8a70053bfd1acbecaa20Deleted: 25f11f5fb0cb9e41531d1da8dc56351286427e070c536f7015fe76e4dae0a4bcDeleted: 9bad880da3d219b10423804147d6982da1a7bb1e285777a4d746afca6215bebbDeleted: 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158此时查看本地镜像读者会发现临时镜像已经被删除$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE3.5 创建镜像创建镜像的方法有三种基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。本节将重点介绍前两种方法。最后一种基于Dockerfile创建的方法将在后续章节专门予以详细介绍。基于已有镜像的容器创建该方法主要是使用docker commit命令其命令格式为docker commit[OPTIONS]CONTAINER[REPOSITORY[TAG]]主要选项包括·-a,--author作者信息。·-m,--message提交消息。·-p,--pausetrue提交时暂停容器运行。下面将演示如何使用该命令创建一个新镜像。首先启动一个镜像并在其中进行修改操作例如创建一个test文件之后退出$ sudo docker run -ti ubuntu:14.04 /bin/bashroota925cb40b3f0:/# touch testroota925cb40b3f0:/# exit记住容器的ID为a925cb40b3f0。此时该容器跟原ubuntu14.04镜像相比已经发生了改变可以使用docker commit命令来提交为一个新的镜像。提交时可以使用ID或名称来指定容器$ sudo docker commit -m Added a new file -a Docker Newbee a925cb40b3f0 test9e9c814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27顺利的话命令会返回新创建的镜像的ID信息例如9e9c814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27此时查看本地镜像列表即可看到新创建的镜像$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEtest latest 9e9c814023bc 4 seconds ago 225.4 MB基于本地模板导入也可以直接从一个操作系统模板文件导入一个镜像。在这里推荐使用OpenVZ提供的模板来创建。OPENVZ模板的下载地址为http://openvz.org/Download/templates/precreated。比如笔者下载了一个ubuntu-14.04的模板压缩包后可以使用以下命令导入$ sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04然后查看新导入的镜像已经在本地存在了$ sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 14.04 05ac7c0b9383 17 seconds ago 215.5 MB

更多文章