【云原生|Docker】Docker镜像操作

article/2025/3/12 13:46:46

作者:柒号华仔
个人主页:欢迎访问我的主页
个人信条:星光不问赶路人,岁月不负有心人。
个人方向:主要方向为5G,同时兼顾其他网络协议,编解码协议,C/C++,linux,云原生等,感兴趣的小伙伴可以关注我,一起交流。


目录

    • 1. 镜像简介
    • 2. 获取镜像
    • 3. 查看镜像信息
    • 4. 搜索镜像
    • 5. 创建镜像
      • 5.1 基于已有镜像创建
      • 5.2 使用Dockerfile 新建镜像
    • 6. 删除镜像


1. 镜像简介

Docker 镜像(Image)是用于创建 Docker 容器的模板。Docker 镜像相当于一个 root 文件系统,比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。在实际使用中,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。

在这里插入图片描述

镜像仓库服务(Image Registry)包含多个镜像仓库(Image Repository),一个镜像仓库中可以包含多个镜像。
对于用户来说,镜像操作一般是指docker的客户端操作,包括镜像获取,创建,修改,运行,删除,搜索,查看等一系列操作。docker最重要的操作命令是docker build,docker pull和docker run。


2. 获取镜像

Docker使用镜像仓库来集中存放Docker镜像,如同代码库一样,我们可以自建私有Registry和使用公用Registry。

通常在仓库中存放有多个镜像,而每个仓库可以包含多个标签(Tag),每个标签对应着一个镜像。我们可以通过<仓库名>:<标签>的格式来指定具体是哪个软件哪个版本的镜像,如果不给出标签,将以 Latest 作为默认标签。

通过docker pull命令可以从仓库下载镜像,其完整格式为:

docker pull [OPTIONS] NAME[:TAG]

  • OPTIONS:
    -a:–all-tags=true|false: 是否获取仓库中的所有镜像,默认为否
    –disable-content-trust:忽略镜像的校验,默认开启
  • NAME:镜像仓库名(用来区分镜像)
  • TAG:镜像标签(通常表示软件版本信息)

对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,此时会下载仓库中最新版本的镜像。

一般来说, 镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化, 内容是不稳定的。因此,如果需要从稳定性上考虑,则不要在生产环境中忽略镜像的TAG使用默认的latest 来标记镜像。

可以直接从官方Docker Hub 镜像源来下载镜像,例如:

$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
58690f9b18fc: Pull complete 
b51569e7c507: Pull complete 
da8ef40b9eca: Pull complete 
fb15d46c38dc: Pull complete 
Digest: sha256:0f71fa8d4d2d4292c3c617fda2b36f6dabe5c8b6e34c3dc5b0d17d4e704bd39c
Status: Downloaded newer image for ubuntu:16.04
docker.io/library/ubuntu:16.04

如果从非官方的仓库下载,则需要在仓库名称前指定完整的仓库地址,例如:

$ docker pull hub.c.163.com/public/ubuntu:16.04

另外,有时需要使用镜像代理服务来加速Docker 镜像获取 过程 ,在前面《Docker安装及加速》一文中已经讲述。


3. 查看镜像信息

使用docker images或docker image ls命令可以列出本地主机上已有镜像的基本信息。

$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
ubuntu        18.04     5a214d77f5d7   10 months ago   63.1MB
hello-world   latest    feb5d9fea6a5   10 months ago   13.3kB
ubuntu        16.04     b6f507652425   11 months ago   135MB

参数说明:

  • REPOSITORY:镜像仓库,比如ubuntu表示ubuntu系列的基础镜像;

  • TAG:镜像标签,比如 18.04是以ubuntu版本号作为了镜像标签;

  • IMAGE ID:镜像ID,每个镜像的ID事唯一的,如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;

  • CREATED:创建时间,显示的是镜像最后更新时间;

  • SIZE:镜像大小。


使用docker inspect命令获取镜像的详细信息,其中,包括创建者,各层的数字摘要等,其格式为:

docker inspect [IMAGE_NAME|ID

例如:

$ docker inspect ubuntu:18.04
[{"Id": "sha256:5a214d77f5d747e6ed81632310baa6190301feeb875cf6bf9da560108fa09972","RepoTags": ["ubuntu:18.04"],"RepoDigests": ["ubuntu@sha256:0fedbd5bd9fb72089c7bbca476949e10593cebed9b1fb9edf5b79dbbacddd7d6"],"Parent": "","Comment": "","Created": "2021-10-01T02:23:24.179667784Z","Container": "20d614d2eca1b5a9ad6d5a56a80efce44096b87ca76a98256eb51f8dbaf7a8d2","ContainerConfig": {"Hostname": "20d614d2eca1",......

4. 搜索镜像

使用 docker search 命令可以搜索Docker Hub 官方仓库中的镜像,显示信息包括镜像名字、描述、收藏数、是否官方创建、是否自动创建等,命令格式为:

docker search [option] keyword

option选项主要包括:

  • -f,–filter filter: 过滤输出内容;
  • –format string: 格式化输出内容;
  • –limit int:限制输出结果个数, 默认为 25 个;
  • –automated :只列出 automated build类型的镜像;
  • –no-trunc :显示完整的镜像描述.

例如从官方库中搜索mysql相关镜像:

$ docker search -f stars=10 mysql
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                         MySQL is a widely used, open-source relation…   12976     [OK]       
mariadb                       MariaDB Server is a high performing open sou…   4972      [OK]       
phpmyadmin                    phpMyAdmin - A web interface for MySQL and M…   594       [OK]       
percona                       Percona Server is a fork of the MySQL relati…   583       [OK]       
bitnami/mysql                 Bitnami MySQL Docker Image                      72                   [OK]
linuxserver/mysql-workbench                                                   40                   
ubuntu/mysql                  MySQL open source fast, stable, multi-thread…   36                   
linuxserver/mysql             A Mysql container, brought to you by LinuxSe…   36                   
circleci/mysql                MySQL is a widely used, open-source relation…   26                   
google/mysql                  MySQL server for Google Compute Engine          21                   [OK]
rapidfort/mysql               RapidFort optimized, hardened image for MySQL   13     

参数说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否 docker 官方发布
  • stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。
  • AUTOMATED: 自动构建。

5. 创建镜像

镜像的来源有两种,其一是从镜像库下载镜像,其二是我们创建一个新的镜像。创建镜像也分为两种,其一是基于已有镜像创建,其二是使用 Dockerfile 来创建一个新的镜像。

5.1 基于已有镜像创建

首先,我们需要使用镜像来创建一个容器,以运行目标镜像,并在容器内创建一个测试文件test.txt。在完成操作之后,输入 exit 命令来退出这个容器。

$ docker run -t -i ubuntu:18.04 /bin/bash
root@49152c044299:/# touch test.txt
root@49152c044299:/# exit

此时 ID 为 49152c044299 的容器,就是我们完成更改的容器,可以通过命令 docker commit 来提交容器副本。

$ docker container commit -m "add test.txt" -a "testdocker" 49152c044299 testdocker/ubuntu:test
sha256:9c44392a137352f2b22acbe322543eb6f30970b9bd2edf9145d19c28d5fe21fc

参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • 49152c044299:容器 ID
  • testdocker/ubuntu:test : 指定要创建的目标镜像名

我们可以使用 docker image ls命令来查看我们的新镜像 testdocker/ubuntu:test:

$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
testdocker/ubuntu   test      9c44392a1373   19 seconds ago   63.1MB
ubuntu              18.04     5a214d77f5d7   10 months ago    63.1MB
hello-world         latest    feb5d9fea6a5   10 months ago    13.3kB
ubuntu              16.04     b6f507652425   11 months ago    135MB

5.2 使用Dockerfile 新建镜像

使用命令 docker build 可以从零开始创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建镜像。
在这里插入图片描述

首先使用vim编写一个Dockerfile文件:

FROM ubuntu:18.04
MAINTAINER test <xxxxx@163.com>WORKDIR /home
RUN touch testImage.txt
EXPOSE 80

内部指令:

  • FROM:指定使用哪个镜像源

  • RUN :告诉docker 在镜像内执行什么命令

然后,使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像:

$ docker build -t testimage/ubuntu:testimage1 .
Sending build context to Docker daemon  2.048kB
Step 1/5 : FROM ubuntu:18.04---> 5a214d77f5d7
Step 2/5 : MAINTAINER test <chenhua2820@163.com>---> Running in 92f0afdaf3bf
Removing intermediate container 92f0afdaf3bf---> 88d4b9bc0c0e
Step 3/5 : WORKDIR /home---> Running in ec9fd2b1cbcc
Removing intermediate container ec9fd2b1cbcc---> 6a91a52c5589
Step 4/5 : RUN touch testImage.txt---> Running in d60d6a8de1db
Removing intermediate container d60d6a8de1db---> 1a7c4f1cd570
Step 5/5 : EXPOSE 80---> Running in 7c2922e1bb55
Removing intermediate container 7c2922e1bb55---> f3fdbec0b0f9
Successfully built f3fdbec0b0f9
Successfully tagged testimage/ubuntu:testimage1

参数说明:

  • -t :指定要创建的目标镜像名

  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为f3fdbec0b0f9:

$ docker image ls
REPOSITORY          TAG          IMAGE ID       CREATED          SIZE
testimage/ubuntu    testimage1   f3fdbec0b0f9   38 seconds ago   63.1MB
testdocker/ubuntu   test         9c44392a1373   45 minutes ago   63.1MB
ubuntu              18.04        5a214d77f5d7   10 months ago    63.1MB
hello-world         latest       feb5d9fea6a5   10 months ago    13.3kB
ubuntu              16.04        b6f507652425   11 months ago    135MB

运行新的镜像,可以看到/home目录下已经创建了测试文件testImage.txt:

$ docker run -t -i testimage/ubuntu:testimage1 /bin/bash
root@952d273dc630:/home# ls
testImage.txt

6. 删除镜像

当我们不再需要某个镜像的时候,可以通过 docker image rm 或者docker rmi 命令从 Docker 主机删除该镜像。其格式为:

docker rmi [image]
docker image rm [image]

删除操作会在当前主机上删除该镜像以及相关的镜像层。这意味着无法通过 docker image ls 命令看到删除后的镜像,并且对应的包含镜像层数据的目录会被删除。但是,如果某个镜像层被多个镜像共享,那只有当全部依赖该镜像层的镜像都被删除后,该镜像层才会被删除。

例如,删除掉前面创建的测试镜像testimage/ubuntu:testimage1:

$ docker rmi testimage/ubuntu:testimage1
Untagged: testimage/ubuntu:testimage1
Deleted: sha256:f3fdbec0b0f96a8f3bb2e6a4b07ba04dc45b9c59618c2b376ebea7b68ed53971
Deleted: sha256:1a7c4f1cd57038116b7a5eff05a323fc244a135741c2fd69ad89f21569f00afb
Deleted: sha256:22997b7cad7e4294d4eb9b02bc475e2bcc94c2dd168b8a8499adb02cfc4cb573
Deleted: sha256:6a91a52c5589c29f6439bf6c7def37942037a5346a2fd8520f3d8a1fc3d49ccb
Deleted: sha256:88d4b9bc0c0ee678efad3b8192d3c0cf017dfae142dbc7e87af4fecaafb4f847

删除完成后,docker image ls查看一下当前镜像列表,可以看到testimage/ubuntu:testimage1已不在列表内:

$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
testdocker/ubuntu   test      9c44392a1373   About an hour ago   63.1MB
ubuntu              18.04     5a214d77f5d7   10 months ago       63.1MB
hello-world         latest    feb5d9fea6a5   10 months ago       13.3kB
ubuntu              16.04     b6f507652425   11 months ago       135MB

如果被删除的镜像上存在运行状态的容器,那么删除操作不会被允许。再次执行删除镜像命令之前,需要停止并删除该镜像相关的全部容器。例如删除时遇到如下错误:

$ docker rmi testimage/ubuntu:testimage1
Error response from daemon: conflict: unable to remove repository reference "testimage/ubuntu:testimage1" (must force) - container 952d273dc630 is using its referenced image f3fdbec0b0f9

可以先使用docker ps -a查看依赖的容器id,然后docker rm [容器ID]删除容器后,最后执行docker rmi [镜像名]来删除镜像。



http://chatgpt.dhexx.cn/article/PuGJmxkR.shtml

相关文章

Docker私有镜像仓库是什么?

Docker镜像仓库概述 镜像仓库作为Docker技术的核心组件之一&#xff0c;其主要作用就是负责镜像内容的存储和分发。Docker镜像仓库从使用范围来说分为“公有镜像仓库”和“私有镜像仓库”&#xff0c;公有镜像仓库是可以被任何人使用的&#xff0c;例如Docker公司维护的在线存储…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后&#xff0c;反响不错&#xff0c;也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的&#xff0c;但是半路杀出了这个活动&#x1f602;&#xff0c;为表敬意&#xff0c;先参与一波吧。 本文主要介绍一下容…

Docker容器之镜像仓库详解

Docker容器之镜像仓库详解 文章目录 Docker容器之镜像仓库详解1. 什么是Docker Image&#xff1f;2. 什么是Docker Registry?3. 镜像相关的操作 本文将集中对镜像、仓库、容器的概念与三者之间的联系进行详细介绍&#xff0c;以及基本的镜像管理操作。 1. 什么是Docker Image&…

docker镜像仓库

一、docker镜像仓库 docker镜像仓库&#xff08;repository&#xff09;是集中存放镜像的地方。方便与后续的镜像拉取与上传&#xff0c;便于对镜像的集中管理。镜像仓库一般可分为Docker Hub公共中央仓库和个人或者公司使用的私有仓库&#xff0c;私有仓库如果是个人使用则可…

Docker -- 镜像仓库(搭建私有镜像仓库、向镜像仓库推送镜像、从镜像仓库拉取镜像)

文章目录 1. 镜像仓库1.1 镜像仓库概念 2. 搭建私有镜像仓库2.1.简化版镜像仓库&#xff08;不推荐&#xff09;2.2 带有图形化界面版本&#xff08;推荐&#xff09;2.2.1 配置Docker信任地址2.2.2 使用DockerCompose部署带有图象界面的DockerRegistry 3. 向镜像仓库推送镜像4…

最全经典 | 机器视觉基础知识汇总

人工智能的小白资源群&#xff0c;这里有最齐全的干货资源&#xff0c;可以和你一样的入门小白一同交流学习亦可以得到专业技术大神的指导。欢迎入群813416857&#xff08;AI人工智能学习交流&#xff09;&#xff0c;785685380&#xff08;机器学习技术交流群&#xff09;&…

机器视觉光源知识总结(二)

更多文章请关注微信公众号&#xff1a;机器视觉专业论坛

机器视觉系统的搭建

对于许多新人来说能成功搭建一套完善的视觉系统是比较困难的&#xff0c;机器视觉包括了许多需要掌握的知识点、比产品选型&#xff1a;视觉软件、相机、光源、镜头。比如安装高度、视野大小、系统要求的运行时间、工作环境等等&#xff0c;对于新人来说需要一套完善的知识体系…

OpenCV与机器视觉

最近在网易云课堂把南科大于仕琪团队的OpenCV教程完整看了一遍&#xff0c;对图像处理或者机器视觉又有了一个系统性的理解。OpenCV中文网站就是他创建的&#xff0c;他的研究团队及其相应成果可以在个人网站中查阅。回想过去在图像处理方面的点点滴滴&#xff0c;做了一个详细…

机器视觉——车牌识别实验汇总

文章目录 前言一、车牌识别背景资料简介二、实现车牌识别步骤1.图像采集&#xff08;Image Correction&#xff09;2.角度修正&#xff08;Angle Correction&#xff09;3.字符分割 第一次分割4.车牌定位&#xff08;License Plate Location&#xff09;5.字符分割 第二次分割6…

机器视觉源码分享

视觉方面的研究&#xff0c;但毕业后未能再此领域深耕&#xff0c;故预将研究阶段所做的工业视觉程序进行分享&#xff0c;作为兴趣爱好愿与有识之人一起交流。 有需要的请留言&#xff0c;以下介绍均有源码 0cHM6Ly9ibG9nLmNzZG4ubmV0L01CU0VwZWVr,size_16,color_FFFFFF,t_70)…

机器视觉基础应用知识详解

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达随着工业4.0时代的到来&#xff0c;机器视觉在智能制造业领域的作用越来越重要&#xff0c;为了能让更多用户获取机器视觉的相关基础知识&#xff0c;包括机器视觉技术是…

机器视觉工程师必须了解的基础知识

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达正文 CCD&#xff08;像素&#xff09;与视觉系统的基础知识 关于摄像元件 CCD 数码相机的构造与传统的胶片式相机&#xff08;模拟式&#xff09;基本相同。所不同的是数…

机器视觉与图像处理知识点总结

图像灰度均值是对平均灰度的一种度量&#xff0c;反映了图像的亮度&#xff0c;均值越大说明图像亮度越大&#xff0c;反之越小。图像灰度方差反映了图像像素值与均值的离散程度&#xff0c;标准差越大说明图像的质量越好。方差是对平均对比度的度量&#xff0c;每个像素点颜色…

机器视觉基础知识详解

什么是机器视觉 机器视觉是人工智能正在快速发展的一个分支。简单说来&#xff0c;机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品&#xff08;即图像摄取装置&#xff0c;分CMOS和CCD两种&#xff09;将被摄取目标转换成图像信号&#xff0c;传送…

机器视觉需要学什么?学习机器视觉需要掌握哪些知识?

图像采集&#xff1a;需要对镜头、光源、相机(CCD)的选型有所了解&#xff0c;有经验的工程师说打光是图像采集的关键。图像采集是对我们后续工作的支撑&#xff0c;采集不到好的图像&#xff0c;对图像处理就会难上好几倍甚至几百倍。 图像处理&#xff1a;图像处理技术一般包…

干货!机器视觉基础知识汇总

来源丨新机器视觉 点击进入—>3D视觉工坊学习交流群 现如今&#xff0c;中国已经成为世界机器视觉发展最为活跃地区&#xff0c;应用范围涵盖了工业、农业、医药、军事、航天、气象等国民经济各个行业。虽然机器视觉的成长速度非常快&#xff0c;但是还是有很多人对机器视觉…

TextView 倾斜属性

android:textStyle"italic"

Android textAppearance的属性设置及TextView属性详解

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) 转自&#xff1a;http://blog.csdn.net/jaycee110905/article/details/8762238 textAppearance的属性设置 android:textAppearance"?android:attr/textA…

Android控件 TextView属性大全

一、TextView TextView控件一般是用来显示文本 二、如何使用 在layout布局里直接引用&#xff1a; <TextViewandroid:gravity"center_horizontal"android:id"id/tv_moneytext"android:layout_width"match_parent"android:layout_height&q…