Docker 入门系列(2)- Docker 镜像、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

2023-05-16

Docker 运行容器前需要本地存在对应的镜像,如果镜像没保存在本地,Docker 会尝试先从默认镜像仓库下载 https://hub.docker.com/,用户也可以通过配置,使用自定义的镜像仓库。

1. 获取镜像

docker  pull NAME[:TAG]

其中,NAME 是镜像仓库的名称(用来区分镜像),TAG 是镜像的标签 ( 往往用来表示版本信息) 。如果不显式指定 TAG,则默认会选择 latest 标签,这会下载仓库中最新版本的镜像。

~/docker$ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
7b8b6451c85f: Pull complete 
ab4d1096d9ba: Pull complete 
e6797d1788ac: Pull complete 
e25c5c290bde: Pull complete 
Digest: sha256:e547ecaba7d078800c358082088e6cc710c3affd1b975601792ec701c80cdd39
Status: Downloaded newer image for ubuntu:16.04

2. 查看镜像

docker  images

列出本地主机上已有的镜像,各个字段信息分别为来自于哪个仓库(REPOSITORY)、镜像的标签信息(TAG )、镜像的唯一ID号(IMAGE ID)、创建时间(CREATED)、镜像大小(SIZE)。

~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

3. 修改本地镜像标签

docker tag

为本地镜像添加新的标签:

~/docker$ docker tag ubuntu:16.04 ubuntu:test
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              test                a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

不同标签的镜像 ID 完全一致,说明它们实际上指向了同一个镜像文件,只是别名不同而已。

4. 查看镜像详细信息

docker inspect

docker inspect 命令可以获取该镜像的详细信息,详情如下:

~/docker$ docker inspect ubuntu
[]
Error: No such object: ubuntu
~/docker$ docker inspect ubuntu:16.04
[
    {
        "Id": "sha256:a51debf7e1eb2018400cef1e4b01f2e9f591f6c739de7b5d6c142f954f3715a7",
        "RepoTags": [
            "ubuntu:16.04",
            "ubuntu:test"
        ],
        "RepoDigests": [
            "ubuntu@sha256:e547ecaba7d078800c358082088e6cc710c3affd1b975601792ec701c80cdd39"
        ],
        ....
    }
]

要查看具体某一项时可以使用 -f 来指定,格式必须按照JSON的层次结构来,例如

wohu@wohu-pc:~$ docker inspect --format='{{.NetworkSettings.Networks.carla_0911_default.IPAddress}}' 1112
172.19.0.2
wohu@wohu-pc:~$ docker inspect -f '{{.NetworkSettings.Networks.carla_0911_default.IPAddress}}' 1112
172.19.0.2
wohu@wohu-pc:~$ docker inspect -f {{".NetworkSettings.Networks.carla_0911_default.IPAddress"}} 1112
172.19.0.2
wohu@wohu-pc:~$

5. 查找镜像

docker search

docker search 命令可以搜索远端仓库中共享的镜像,默认搜索官方仓库中的镜像。用法为 docker search TERM,支持的参数主要包括:

  • –automated=true| false: 仅显示自动创建的镜像,默认为否;

  • –no-trunc=true| false: 输出信息不截断显示,默认为否;

  • -s,–stars=X: 指定仅显示评价为指定星级以上的镜像,默认为0,即输出所有镜像。

~/docker$ docker search mysql
NAME                                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql                                                  MySQL is a widely used, open-source relation…   7465                [OK]                
mariadb                                                MariaDB is a community-developed fork of MyS…   2407                [OK]                
...

6. 删除镜像

docker rmi IMAGE[IMAGE...]

docker rmi 命令可以删除镜像,命令格式为 docker rmi IMAGE[IMAGE…],其中 IMAGE 可以为标签或ID。

~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              test                a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB
~/docker$ docker rmi ubuntu:test
Untagged: ubuntu:test
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

当同一个镜像拥有多个标签的时候,docker rmi 命令只是删除该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像 a51debf7e1eb 的标签而已。

当使用 docker rmi 命令,并且后面跟上镜像的 ID ( 也可以是能进行区分的部分 ID 串前缀 ) 时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的。

  • 先创建一个容器:
~/docker$ docker run ubuntu:16.04 echo "Hello, world"
Hello, world
  • 使用 docker ps -a 命令可以看到本机上存在的所有容器:
~/docker$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS                      PORTS               NAMES
f632ff0305aa        ubuntu:16.04        "echo 'Hello, world'"   46 seconds ago      Exited (0) 45 seconds ago                       eloquent_swartz
33197473a278        hello-world         "/hello"                3 days ago          Exited (0) 3 days ago                           frosty_galileo
  • 试图删除该镜像,Docker 会提示有容器正在运行,无法删除:
~/docker$ docker rmi ubuntu:16.04
Error response from daemon: conflict: unable to remove repository reference "ubuntu:16.04" (must force) - container f632ff0305aa is using its referenced image a51debf7e1eb
  • 先删除依赖该镜像的所有容器,再使用ID 来删除镜像:
:~/docker$ docker rm f6
f6
:~/docker$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                  PORTS               NAMES
33197473a278        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                       frosty_galileo

7. 创建镜像

创建镜像有三种方法:

  1. 基于已有镜像的容器创建
  2. 基于本地模板导入
  3. 基于 Dockerfile 创建

基于已有镜像的容器创建:
该方法主要是使用 docker commit 命令。命令格式为

docker commit [OPTIONS]CONTAINER[REPOSITORY[:TAG]]

主要选项包括:

  • -a,–author=“”:作者信息
  • c,–change=[]:提交的时候执行 Dockerfile指令,包括CMD|
    ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;
  • -m,–message=“”:提交消息
  • p,–pause=true:提交时暂停容器运行

创建新镜像示例

先启动一个镜像,并在其中进行修改操作,例如创建一个 test 文件,之后退出。

~/docker$ docker run -ti ubuntu:16.04
root@c53b34da8804:/# touch test.sh
root@c53b34da8804:/# pwd
/
root@c53b34da8804:/# ls
bin   dev  home  lib64  mnt  proc  run   srv  test.sh  usr
boot  etc  lib   media  opt  root  sbin  sys  tmp      var
root@c53b34da8804:/# exit
exit
~/docker$

容器 ID 为 c53b34da8804,该容器跟原来的 ubuntu 镜像相比已发生变化。使用 docker commit 命令提交为一个新的镜像,提交时使用 ID 或者名称来指定容器。

~/docker$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
c53b34da8804        ubuntu:16.04        "/bin/bash"         16 minutes ago      Exited (0) 16 minutes ago                       mystifying_sanderson
33197473a278        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           frosty_galileo
~/docker$ docker commit -m "add new file" -a "wohu1104" c53b34da8804  test_image
sha256:1cd880207b3efc2ce140237803672344fe3ec7ed3970dffc63c113cac262ed50
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        18 seconds ago      116MB
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              latest              93fd78260bd1        2 weeks ago         86.2MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

8. 导出和导入镜像

  • 使用 docker save 命令用来将镜像导出到本地文件
~/docker$ docker save -o ubuntu.tar ubuntu:16.04
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        9 minutes ago       116MB
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
ubuntu              latest              93fd78260bd1        2 weeks ago         86.2MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB
~/docker$ ls
ubuntu.tar

其中 -o 和 > 表示输出到文件,ubuntu.tar 为目标文件,ubuntu:16.04 是源镜像名(name:tag)

  • 使用 docker load 将导出本地文件再导入到本地镜像库
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        14 minutes ago      116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB
~/docker$ docker load -i ubuntu.tar
Loaded image: ubuntu:16.04
~/docker$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test_image          latest              1cd880207b3e        15 minutes ago      116MB
ubuntu              16.04               a51debf7e1eb        2 weeks ago         116MB
hello-world         latest              4ab4c602aa5e        2 months ago        1.84kB

其中 -i 和 < 表示从文件输入。会成功导入镜像及相关元数据,包括tag信息

9. 上传镜像

使用 docker push 命令上传镜像到仓库,默认上传到 Docker Hub官方仓库 ( 需要登录 )。命令格式为:

docker push NAME[:TAG] |[REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

10. 清理镜像

使用 Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过下面命令进行清理

docker image prune -f 

参考:
https://www.cnblogs.com/lsgxeva/p/8746644.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 入门系列(2)- Docker 镜像、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像 的相关文章

  • spdlog 封装为 DLL

    项目中需要快速写入巨量日志 xff0c 一开始用的是boost log xff0c 但遇到崩溃问题 xff0c 程序负载大了 xff0c 滚动日志时偶尔会崩溃 xff0c 总是报 xff1a boost filesystem error x
  • 驼峰命名法与下划线命名法之争

    窃以为 xff0c 驼峰命名开发效率更高 xff0c 原因如下 xff1a 下划线命名多输入一个字符 例如 xff1a set name 对比 setName xff0c 多输入一个下划线字符 xff0c 敲击键盘两次Shift 43 而驼
  • [PyQt] 在QLabel上用drawText实现文字滚动

    span class token keyword from span PyQt4 span class token punctuation span QtGui span class token keyword import span sp
  • [PyQt] PyQt4写的音乐播放器

    实现了 xff1a 播放歌曲 xff1b 上 下一首 xff1b 随机 循环 单曲循环 xff1b 批量添加 删除歌曲 xff1b 打开 存储播放列表 xff08 M3U格式 xff09 xff1b 添加到收藏 xff1b 单行 多行歌词桌
  • [PyQt] 使用.qrc 生成资源文件供程序中使用

    建立 images qrc文件 xff0c 里面保存了资源位置 xff1a span class hljs doctype lt DOCTYPE RCC gt span span class hljs tag lt span class h
  • Tcl/tk实例-工具栏和菜单-图片预览工具

    可以打开并查看图片 xff0c 点击工具栏上 Previous 和 Next 按钮来浏览 前 下 一张 仅仅是一个例子 xff0c 其它按钮和菜单未添加命令 package require Ttk package require Img p
  • Tcl/tk实例—使用tclkit工具将脚本打包成可执行文件(.exe)

    下载 tclkit exe 工具 xff0c 及 sdx kit 文件 复制一份tclkit exe xff0c 命名为tclkit2 exe 假设你的脚本文件为 xff1a app tcl Step1 命令行执行 tclkit exe s
  • C语言将十进制转换成十六进制

    include lt stdio h gt main char arr 50 61 34 34 char p 61 arr int i scanf 34 d 34 amp i 输入一个十进制的数 int result 61 0 while
  • 软件版本中的release,stable,alpha,beta,pre,snapshot

    转自 xff1a https www jianshu com p aefe0453d081 我们在下载软件会遇到诸如release stable alpha beta pre current eval rc snapshot等版本 xff0
  • kylin ubuntu20.04使用记录

    1 配置dns vim etc systemd resolved conf 修改 DNS 61 119 29 29 29 223 5 5 5 多个DNS地址使用空格分隔 2 配置samba sudo vim etc samba smb co
  • linux进程、线程状态 tomcat线程数 并发数查看

    1 linux进程查看 ps aux top USER PID CPU MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0 0 0 0 10368 116 Ss Jan16 4 57 init
  • 字符编码(三) 字节序、bit序、 有效位

    1 字节序 xff1a 一个 xff08 占多字节的 xff09 数据单元的字节顺序 Java中byte没有字节序问题 xff0c 其他都有字节序问题 不必考虑byte内部bit的细节 bit序 xff1a 一个字节内 xff0c bit的
  • STM32:串口发送

    1 main c代码如下 include stm32f10x h nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp Device header include Delay h include OLED
  • 太阳晒进屋里 太刺眼懒得起来关窗帘?做一个光感遥控吧

    在一个智能音响的交流群里 xff0c 有位群友提出了个想法 xff0c 家里太阳晒进屋里每次都要起来拉窗帘 xff0c 有没有什么办法可以让太阳晒进屋就关窗帘 xff0c 没太阳了又打开窗帘能 xff1f 后来这位群友找到我 xff0c 我
  • 用Python爬虫获取NBA球员的生涯数据

    NBA球迷往往对球员的各项数据以及对应的排名很感兴趣 xff0c 而basketball reference com这个网站的数据十分详尽 为方便浏览 xff0c 我在github建了一个项目 xff0c 借助该网站提供的数据来汇总某个球员
  • FreeRTOS 二值信号量

    参考 开发手册 二值信号量 简介 二值信号量通常用于互斥访问或同步 xff0c 二至信号量没有优先级继承 xff0c 更适合用于同步 xff08 任务与任务或任务与中断的同步 xff09 二值信号量其实就是一个只有一个队列项的队列 xff0
  • QGC地面站二次开发 环境搭建过程

    文章目录 将本机文件复制到安装的虚拟机系统中方法一方法二 ubuntu QT 安装过程问题一 xff1a 安装开始的时候 xff0c 显示磁盘容量不足 问题二 xff1a 现需解决 磁盘已成功扩展 您必须从客户机操作系统内部对磁盘重新进行分
  • c++应该怎样学习?c++服务器开发必备知识

    笔者从事软件开发工作5年 针对c 的特性 用途 整理的进阶式学习笔记 从浅入深地总结重点知识 本文旨在为c c 初学者 初中级开发者和意在转型c 服务器研发的同学们 对基础知识和进阶路线进行详细的整理 适合c 初学者 c 中高级开发岗的同学
  • Hadoop 安装与 HDFS 基础实践

    一 环境 xff08 1 xff09 操作系统 xff1a Linux Ubuntu 20 04 xff08 2 xff09 Hadoop 版本 xff1a 3 3 2 xff08 3 xff09 JDK 版本 xff1a 1 8 或者以上
  • select版的TCP通信

    编写代码之前 xff0c 大概先说一下利用select编写tcp的思路及select特点 select系统调用是用来让程序监视多个文件句柄的状态变化的 xff0c 程序会停在select这里等待 xff0c 直到被监视的句柄有一个或者多个发

随机推荐

  • ubuntu20.04上编译android 7.1

    一 安装 OpenJDK 8 sudo apt get install openjdk 8 jdk 提示 xff1a 安装 openjdk 8 jdk xff0c 会更改 JDK 的默认链接 xff0c 这时可用 xff1a sudo up
  • GIT介绍

    1 概述 对于软件版本管理工具 xff0c 酷讯决定摒弃CVS而转向Git了 为什么要选择Git xff1f 你真正学会使用Git时 xff0c 你就会觉得这个问题的回答是非常自然的 然而当真正需要用文字来回答时 xff0c 却觉得文字好像
  • 软件设计师-知识产权和标准化知识

    1 1 1 1 标准化的基本知识 什么是标准 xff1f 为在一定的范围内获得最佳秩序 xff0c 对活动或其结果规定共同的和重复使用的规则 导则 或特性的文件 xff0c 称为标准 该文件经协商一致制定并经一个公认机构的批准 标准应以科学
  • MAPREDUCE详解

    1 MAPREDUCE原理篇 xff08 1 xff09 Mapreduce是一个分布式运算程序的编程框架 xff0c 是用户开发 基于hadoop的数据分析应用 的核心框架 xff1b Mapreduce核心功能是将用户编写的业务逻辑代码
  • VNC如何连接远程服务器

    所有VPS均同时支持MSTSC VNC和手机远程控制 xff0c 本篇为VNC Viewer连接教程 1 运行已安装好的VNC Viewer xff0c 输入连接地址 xff08 如果没特别指定 xff0c 那么连接地址一般是VPS地址的端
  • 为什么硬盘只能最多有四个主分区

    主分区 xff0c 也称为主磁盘分区 xff0c 和扩展分区 逻辑分区一样 xff0c 是一种分区类型 主分区中不能再划分其他类型的分区 xff0c 因此每个主分区都相当于一个逻辑磁盘 xff08 在这一点上主分区和逻辑分区很相似 xff0
  • 查看ubuntu版本号

    转自 xff1a http www cnblogs com zero1665 archive 2010 05 24 1742962 html 方法一 xff1a cat etc issue 返回结果 xff1a Ubuntu 6 06 2
  • Android SDK聚合原理讲解(参考U8)

    想要实现一套聚合sdk框架 xff0c 我们来思考一下 xff0c 我们接入一个sdk xff0c 需要实现哪些东西 1 首先 xff0c 客户端需要接入多款SDK xff0c 为了能够多款游戏重用 xff0c 我们不可以在游戏里面直接去接
  • 高德地图POI数据2020年高德POI

    高德地图POI是Point of Interest 的缩写 xff0c 可以翻译成兴趣点 xff0c 一共有三级分类 xff08 大类 中类 小类 xff09 xff0c 其中一级分类有23个 涵盖餐饮服务 购物服务 生活服务 体育休闲服务
  • C++笔试题整理

    目录 1 笔试题1 1 1 链表反转 1 2 String 2 笔试题2 2 1 求下面函数的返回值 xff08 微软 xff09 2 2 什么是 引用 xff1f 申明和使用 引用 要注意哪些问题 xff1f 2 3 将 引用 作为函数参
  • C/C++程序实现通过http代理访问网页内容

    公司通过代理上网 xff0c C程序直接通过发http请求不能获取网页内容 xff0c 故实现了下通过代理访问http网页的一个测试程序 程序很简单 xff0c 有几个重点 先通过socket直接连接代理服务器 向代理服务器发送HTTP的C
  • Ubuntu搭建Apache+Svn+Submin环境

    1 环境搭建部分参考网站 xff1a 搭建Apache 43 Svn 43 Submin环境 2 使用submin最新版2 3 3 不通过邮件方式 xff0c 直接修改admin密码 xff1a vim passwd py 输入脚本如下 s
  • 磁力计如何用来计算姿态(2)

    上一篇 磁力计如何用来计算姿态 xff08 1 xff09 介绍了磁强计算姿态角的原理 本篇介绍 xff0c 在无人飞行器上 常用的 加速度计 43 磁强计 的定姿方法 静止状态 抑或 悬停状态 xff1a 利用加速度 计算横滚角 xff0
  • readdir_r()

    概述 xff1a 1 readdir r函数 xff0c 是readdir函数的可重入版本 xff0c 也就是线程安全的 2 readdir函数使用静态数据 xff0c 因而不可重入 xff0c 即不是线程安全的 readdir r 就是采
  • CSDN>>2011年重大IT安全事件回顾

    在2010年新年前夜 xff0c 由于无人知道密码 xff0c 旧金山无法获取其紧急行动中心上运行的备份系统 xff0c 这或许可以被视为一个不祥的预兆 2011年即将过去 xff0c 我们需要回顾并盘点一下这一年中发生的重大IT安全事件
  • FRP入门篇

    目录 一 前言 1 概述 2 原理 3 支持功能 4 适用场景 二 环境准备 三 使用 1 安装包下载 2 服务端部署 2 1 上传安装包 2 3 启动服务端 3 客户端部署 3 1 代理服务准备 3 2 上传安装包 3 3 客户端配置 3
  • Python 笔记(14)— 类对象及属性内置方法 classmethod、delattr、dir、hasattr、getattr、callable

    1 classmethod Python 使用关键字 class 定制自己的类 xff0c self 表示类实例对象本身 classmethod 修饰符对应的函数不需要实例化 xff0c 不需要 self 参数 第一个参数需要是表示自身类的
  • Depends, python2.7-minimal (= 2.7.15_rc1-1) 问题解决方法使用 aptitude 安装以及与 apt-get 的区别

    1 问题现象 使用命令 sudo apt install python2 7 安装 Python2 时报如下错误 wohu 64 ubuntu1804 etc apt span class token function sudo span
  • Ubuntu 安装 Docker - Dependency failed for Docker Application Container

    Docker 安装 由于 apt 官方库里的 Docker 版本可能比较旧 xff0c 所以先卸载可能存在的旧版本 xff1a span class token function sudo span span class token fun
  • Docker 入门系列(2)- Docker 镜像、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    Docker 运行容器前需要本地存在对应的镜像 xff0c 如果镜像没保存在本地 xff0c Docker 会尝试先从默认镜像仓库下载 https hub docker com xff0c 用户也可以通过配置 xff0c 使用自定义的镜像仓