百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Docker实战005:docker镜像使用详解

bigegpt 2024-08-21 12:08 2 浏览

Docker镜像是docker的核心成员,类似于虚拟机镜像的文件系统(一个镜像往往由多层文件系统组成,相当于一个精简的操作系统同时还包含应用运行所必须的文件和依赖包。),用来提供容器运行时所需的程序、库、资源、配置等资源。Docker镜像是基于Dockerfile文件构建的,Dockerfile文件内包含了一条条构建镜像所需的指令和说明。Docker build会读取定制的Dockerfile并通过Docker服务器创建镜像。Docker镜像是一个只读的模板,镜像内不包含任何动态数据即使构建之后也不会被改变。用户可以从 Docker Hub 获取已有镜像,也可以利用本地文件系统创建镜像。

获取镜像

镜像是Docker运行容器的前提,有了Docker镜像才可以创建Docker容器,一个镜像支持创建多个容器。Docker官方提供了一个公共仓库:https:/hub.docker.com并提供了数万个镜像供用户下载,基本可以满足大部分用户的镜像需求。Docker安装之后本地并没有镜像,镜像需要从远程镜像仓库服务中下载。docker提供了拉取命令:docker pull [options] <origin>/<repository>:<tag>,该命令表示从origin远程仓库(默认Docker Hub )中的repository仓库拉取标签为tag的镜像(如果省略标签则拉取标签为latest的镜像)。当然我们也可以从其他的注册中心拉取镜像,但是输入注册中心的URL时前面不需要加http://或https://。

查看docker镜像

docker镜像是一个文件系统(它没有状态也不会被改变),镜像可以启动复杂的软件供用户使用。 通过命令:docker images或者docker image ls可以列出本机已有的镜像,REPOSITORY资源仓库名,TAG指镜像的标签信息(即版本信息),IMAGE ID:是镜像的 ID(唯一的),CREATED:指镜像最后的更新时间,SIZE:指镜像的大小。如果还想更精确地查看docker镜像可以添加filter进行过滤,过滤属性有dangling、before、since、lable、reference。如果需要查看docker镜像的详细信息可以使用命令:docker inspect ubuntu:12.04 实现,查看镜像历史可以通过命令:docker history ubuntu:12.04实现。

搜索docker镜像

当我们下载镜像时通常需要先知道仓库是否存在该镜像,特别是指定标签下载时我们需要先查看下该镜像有哪些版本。此时我们可以通过docker提供的search命令来查询Docker Hub官方仓库中的镜像,命令格式为:docker search [options] keyword。输出内容包括镜像名称、镜像描述、收藏数、是否官方创建、是否自动创建等信息,默认输出的结果按收藏数进行排序。

删除docker镜像

删除之前要确认此镜像是否被容器使用,如果存在正在运行的docker容器则需要先删除对应的docker容器。因为该镜像被容器引用,所以会导致镜像删除失败。或者当同一个镜像拥有多个标签时,执行删除命令时只是删除了该镜像指定的标签并不会影响原始的那个镜像文件。我们先通过命令先删除引用这个镜像的容器:docker rm containerId(containerId 是容器的ID,可以通过docker ps -a来查看到包括未运行的所有容器id),然后再来执行删除镜像的命令:docker rmi imageId/repository(imageId 是镜像的ID,可以通过docker images来查看所有镜像id)。

清理docker镜像

Docker使用一段时间后系统会残存一些临时的或者未被使用的镜像文件(比如部署升级),随着时间的推移主机中的镜像文件会越来越多。但是其中有很多临时的、未被使用的镜像会占用了大量的存储空间,此时就需要定期清理没有价值的镜像以保证系统的良好运行。通常主机中有使用中的镜像、历史版本镜像、基础镜像和dangling镜像,其中dangling镜像和历史版本镜像是不需要的镜像文件,会占用了一定的存储空间需要及时清理。dangling镜像是由于同一个tag多次构建内容不同的镜像时由docker build 或 docker pull 命令生成的,该镜像不具有名称也没有作用,一般在docker iamges查看镜像中显示<none>:<none>。docker提供了专门清理dangling镜像的命令:docker image prune [options],想要清除所有没有容器引用的镜像增加一个参数 -a,想要强制删除则添加参数-f。

总结:

运行容器时如果使用的镜像本地不存在会自动从官方Docker Hub 镜像源仓库中下载,我们也可以自己制作镜像供他人下载。以上内容是小编给大家分享的【Docker实战005:docker镜像使用详解】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

为了方便学习,下面附上本文用到的源码:

// 从注册服务器registry.hub.docker.com中的ubuntu仓库下载标记为 12.04 的镜像。
$ docker pull  registry.hub.docker.com/ubuntu:12.04  
Options:                            
# -a							拉取所有不同标签的镜像(可选参数)
  -a, --all-tags                Download all tagged images in the repository
#								忽略镜像校验,默认项
      --disable-content-trust   Skip image verification (default true)
---------------------------------------------------------------------------------
# docker pull ubuntu:12.04   //默认从docker.io/library/ubuntu:12.04下载
12.04: Pulling from library/ubuntu
d8868e50ac4c: Pull complete 
83251ac64627: Pull complete 
589bba2f1b36: Pull complete 
d62ecaceda39: Pull complete 
6d93b41cfc6b: Pull complete 
Digest: sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005
Status: Downloaded newer image for ubuntu:12.04
docker.io/library/ubuntu:12.04
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              12.04               5b117edd0b76        3 years ago         104MB
# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              12.04               5b117edd0b76        3 years ago         104MB
# docker image ls --filter [dangling|before|since|lable|reference]
------------------------------------------------------------------------
// dangling: 值为true时返回没有标签的镜像,值为false时返回有标签的镜像。
// before:需要镜像名或镜像ID作为参数,返回之前创建的全部镜像。
// since: 同样需要镜像名或镜像ID作为参数,返回之后创建的全部镜像。
// lable: 根据标注的名称或值过滤镜像。
// reference: 根据repository和tag搜索相关镜像
$ docker search ubuntu  
Options: 
    -f, --filter     过滤输出的内容
    --format string  格式化输出内容
    --limit int      限制输出结果个数
    --no-trunc       不截断输出结果
------------------------------------------------------
# docker search --limit 5  ubuntu
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                 Ubuntu is a Debian-based Linux operating sys…   11389               [OK]                
rastasheep/ubuntu-sshd                                 Dockerized SSH service, built on top of offi…   248                                     [OK]
ubuntu-upstart                                         Upstart is an event-based replacement for th…   110                 [OK]                
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5   ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
ubuntu-debootstrap                                     debootstrap --variant=minbase --components=m…   44                  [OK]               
# docker run ubuntu:12.04
# docker ps -a
CONTAINER ID  IMAGE       COMMAND        CREATED     STATUS        PORTS       NAMES
1ec7b98eaf2e ubuntu:12.04 "/bin/bash"10 seconds ago Exited (0) 9 seconds ago   pensive_elion
# docker rm 1ec7b98eaf2e 
1ec7b98eaf2e
# docker ps -a
CONTAINER ID  IMAGE       COMMAND        CREATED     STATUS        PORTS       NAMES
# docker images
REPOSITORY          TAG           IMAGE ID            CREATED            SIZE
ubuntu              12.04        5b117edd0b76        3 years ago         104MB
# docker rmi ubuntu:12.04
Untagged: ubuntu:12.04
Untagged: ubuntu@sha256:18305429afa14ea462f810146ba44d4363ae76e4c8dfc38288cf73aa07485005
Deleted: sha256:5b117edd0b767986092e9f721ba2364951b0a271f53f1f41aff9dd1861c2d4fe
Deleted: sha256:8c7f3d7534c80107e3a4155989c3be30b431624c61973d142822b12b0001ece8
Deleted: sha256:969d5a4e73ab4e4b89222136eeef2b09e711653b38266ef99d4e7a1f6ea984f4
Deleted: sha256:871522beabc173098da87018264cf3e63481628c5080bd728b90f268793d9840
Deleted: sha256:f13e8e542cae571644e2f4af25668fadfe094c0854176a725ebf4fdec7dae981
Deleted: sha256:58bcc73dcf4050a4955916a0dcb7e5f9c331bf547d31e22052f1b5fa16cf63f8
# docker image prune 
options:
    -a, --all       删除所有没有用的镜像,而不仅仅是临时文件
    -f, --force     强制删除镜像文件,无需弹出提示确认
----------------------------------------------------
# docker image prune
WARNING! This will remove all dangling images.    // 提示会删除所有dangling镜像!
Are you sure you want to continue? [y/N] 
// 使用docker rmi结合命令,如果删除了<none>:<none> image会提示你释放了多少空间:
# docker rmi $(docker iamges -f dangling=true -q)
Total reclaimed space: 100MB

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...