docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

cf20dc0e7d4552ddce9c5741254c43b3.png

紧接着上篇《关于 Docker 镜像的操作,看完这篇就够啦 !(上)》,奉上下篇 !!!

镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌握的。本文将带您一步一步,图文并重,上手操作来学习它。

目录:

一、Docker 删除镜像

  • 1.1 通过标签删除镜像
  • 1.2 通过 ID 删除镜像
  • 1.3 删除镜像的限制
  • 1.4 清理镜像

二、Docker 创建镜像

  • 2.1 基于已有的镜像创建
  • 2.2 基于 Dockerfile 创建

三、Docker 导出&加载镜像

  • 3.1 导出镜像
  • 3.2 加载镜像

四、Docker 上传镜像

  • 4.1 获取 Docker ID
  • 4.2 创建镜像仓库
  • 4.3 上传镜像

五、总结

一、Docker 删除镜像

1.1 通过标签删除镜像

通过如下两个都可以删除镜像:

docker rmi [image]

或者:

docker image rm [image]

支持的子命令如下:

  • -f,-force: 强制删除镜像,即便有容器引用该镜像;
  • -no-prune: 不要删除未带标签的父镜像;
26f97c51c461680a5ea7ff3da5f25133.png

例如,我们想删除上章节创建的 allen_mysql:5.7 镜像,命令如下:

docker rmi allen_mysql:5.7
331704040e1d4cc84e2c4680d8517bd2.png

从上面章节中,我们知道 allen_mysql:5.7 和 docker.io/mysql:5.7 实际上指向的是同一个镜像,那么,您可以能会有疑问,我删除了 allen_mysql:5.7, 会不会将 docker.io/mysql:5.7 镜像也给删除了?

实际上,当同一个镜像拥有多个标签时,执行 docker rmi 命令,只是会删除了该镜像众多标签中,您指定的标签而已,并不会影响原始的那个镜像文件。

不信的话,我们可以执行 docker images 命令,来看下 docker.io/mysql:5.7 镜像还在不在:

47278e116097df497e6bd5095f440748.png

可以看到, docker.io/mysql:5.7 镜像依然存在!

那么,如果某个镜像不存在多个标签,当且仅当只有一个标签时,执行删除命令时,您就要小心了,这会彻底删除镜像。

例如,这个时候,我们再执行 docker rmi docker.io/mysql:5.7 命令:

003f6e341194ccb4a902be7691216210.png

从上图可以看到,我们已经删除了 docker.io/mysql:5.7 镜像的所有文件层。该镜像在本地已不复存在了!

1.2 通过 ID 删除镜像

除了通过标签名称来删除镜像,我们还可以通过制定镜像 ID, 来删除镜像,如:

docker rmi ee7cbd482336

一旦制定了通过 ID 来删除镜像,它会先尝试删除所有指向该镜像的标签,然后在删除镜像本身。

1.3 删除镜像的限制

删除镜像很简单,但也不是我们何时何地都能删除的,它存在一些限制条件。

当通过该镜像创建的容器未被销毁时,镜像是无法被删除的。为了验证这一点,我们来做个试验。首先,我们通过 docker pull alpine 命令,拉取一个最新的 alpine 镜像, 然后启动镜像,让其输出 hello,docker!:

b6f5d07645cd010f25c79eed2a692681.png

接下来,我们来删除这个镜像试试:

7a57d6deb85422faf595bd78668c4021.png

可以看到提示信息,无法删除该镜像,因为有容器正在引用他!同时,这段信息还告诉我们,除非通过添加 -f 子命令,也就是强制删除,才能移除掉该镜像!

docker rmi -f docker.io/alpine

但是,我们一般不推荐这样暴力的做法,正确的做法应该是:

  1. 先删除引用这个镜像的容器;
  2. 再删除这个镜像;

也就是,根据上图中提示的,引用该镜像的容器 ID ( 9d59e2278553), 执行删除命令:

docker rm 9d59e2278553

然后,再执行删除镜像的命令:

docker rmi 5cb3aa00f899
036997e86f2e1ff6f22ce37d92109a2d.png

这个时候,就能正常删除了!

1.4 清理镜像

我们在使用 Docker 一段时间后,系统一般都会残存一些临时的、没有被使用的镜像文件,可以通过以下命令进行清理:

docker image prune

它支持的子命令有:

  • -a,--all: 删除所有没有用的镜像,而不仅仅是临时文件;
  • -f,--force:强制删除镜像文件,无需弹出提示确认;

另外,执行完 docker image prune 命令后,还是告诉我们释放了多少存储空间!

二、Docker 创建镜像

此小节中,您将学习 Docker 如何创建镜像?Docker 创建镜像主要有三种:

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

我们将主要介绍常用的 1,2 两种。

2.1 基于已有的镜像创建

通过如下命令来创建:

docker container commit

支持的子命令如下:

  • -a,--author="": 作者信息;
  • -c,--change=[]: 可以在提交的时候执行 Dockerfile 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORIR 等;
  • -m,--message="": 提交信息;
  • -p,--pause=true: 提交时,暂停容器运行。

接下来,基于本地已有的 Ubuntu 镜像,创建一个新的镜像:

92565fc9f752062531355b49766d72d2.png

首先,让我将它运行起来,并在其中创建一个 test.txt 文件:

830fa362fe20c4a4865eed0ad35c3446.png

命令如下:

docker run -it docker.io/ubuntu:latest /bin/bashroot@a0a0c8cfec3a:/# touch test.txtroot@a0a0c8cfec3a:/# exit

创建完 test.txt 文件后,需要记住标注的容器 ID: a0a0c8cfec3a, 用它来提交一个新的镜像(PS: 你也可以通过名称来提交镜像,这里只演示通过 ID 的方式)。

执行命令:

docker container commit -m "Added test.txt file" -a "Allen" a0a0c8cfec3a test:0.1

提交成功后,会返回新创建的镜像 ID 信息,如下图所示:

7067b24a7f863aef4cbc9b9b7d935b82.png

再次查看本地镜像信息,可以看到新创建的 test:0.1 镜像了:

b8b52eaa20f2c297a33bba3cd619e4d5.png

2.2 基于 Dockerfile 创建

通过 Dockerfile 的方式来创建镜像,是最常见的一种方式了,也是比较推荐的方式。Dockerfile 是一个文本指令文件,它描述了是如何基于一个父镜像,来创建一个新镜像的过程。

下面让我们来编写一个简单的 Dockerfile 文件,它描述了基于 Ubuntu 父镜像,安装 Python3 环境的镜像:

FROM docker.io/ubuntu:latestLABEL version="1.0" maintainer="Allen "RUN apt-get update &&  apt-get install -y python3 &&  apt-get clean &&  rm -rf /var/lib/apt/lists/*

创建完成后,通过这个 Dockerfile 文件,来构建新的镜像,执行命令:

docker image build -t python:3 .

注意:命令的最后有个点,如果不加的话,会构建不成功 !

d9a07519556994ef0ee026e7b25ffdda.png

编译成功后,再次查看本地镜像信息,就可以看到新构建的 python:3 镜像了。

fb96942dc9a09bdcec53b1adda13cdeb.png

三、Docker 导出&加载镜像

此小节中,您将学习 Docker 如何导出&加载镜像。

通常我们会有下面这种需求,需要将镜像分享给别人,这个时候,我们可以将镜像导出成 tar 包,别人直接通过加载这个 tar 包,快速地将镜像引入到本地镜像库。

要想使用这两个功能,主要是通过如下两个命令:

  1. docker save
  2. docker load

3.1 导出镜像

查看本地镜像如下:

fb96942dc9a09bdcec53b1adda13cdeb.png

例如,我们想要将 python:3 镜像导出来,执行命令:

docker save -o python_3.tar python:3

执行成功后,查看当前目录:

649e2e172f0f464c74b36ad718d94e8e.png

可以看到 python_3.tar 镜像文件已经生成。接下来,你可以将它通过复制的方式,分享给别人了!

3.2 加载镜像

别人拿到了这个 tar 包后,要如何导入到本地的镜像库呢?

通过执行如下命令:

docker load -i python_3.tar

或者:

docker load < python_3.tar

导入成功后,查看本地镜像信息,你就可以获得别人分享的镜像了!怎么样,是不是很方便呢!

四、Docker 上传镜像

我们将以上传到 Docker Hub 上为示例,演示 Docker 如何上传镜像。

4.1 获取 Docker ID

想要上传镜像到 Docker Hub 上,首先,我们需要注册 Docker Hub 账号。打开 Docker Hub 网址 https://hub.docker.com,开始注册:

2dc382aa6dce1266c180f60fef6ca08c.png

填写您的 Docker ID (也就是账号),以及密码,Email, 点击继续。

接下来,Docker Hub 会发送验证邮件,到您填写的邮箱当中:

0e60b69c47f2e6154cc6f51a8ba202a7.png

点击验证即可,接下来,再次返回 Docker Hub 官网,用您刚刚注册的 Docker ID 和密码来登录账号!

a7e182130aaa2d52748824670e940189.png

4.2 创建镜像仓库

登录成功后,会出现如下页面:

ed001233601cf8e16718fd6326fc9412.png

选择创建一个镜像仓库:

82d808036f890d33100ef8043ff6419c.png

填写仓库名称描述信息是否公开后,点击创建。

a976632982e6d813050302e3bdda5c77.png

我们看到,仓库已经创建成功了,但是里面还没有任何镜像,接下来开始上传镜像,到此新创建的仓库中。

4.3 上传镜像

进入命令行,用我们刚刚获取的 Docker ID 以及密码登录,执行命令:

docker login
4244f356d38432768d80e762b58efd90.png

登录成功后,我们开始准备上传本地的 python:3 镜像:

fe027b96eff658fd108a0d7d2a4f5849.png

首先,我们对其打一个新的标签,前缀与我们新创建的 Docker ID 、仓库名保持一致:

ocker tag python:3 weiwosuoai1991/python:3
664a22e3e8752e3b2ededc7116d82145.png

查看本地信息,可以看到,标签打成功了。接下开,开始上传!执行命令:

docker push weiwosuoai1991/python:3
c349612d217a03f840b5153fe17429c6.png

上传成功!去 Docker Hub 官网,新创建的仓库的信息页面验证一下,是否真的成功了:

cc60a144fb0a359b3238d425878fc93f.png

大工告成!!!

五、总结

本文中,我们着重学习了 Docker 中如何删除镜像, 创建镜像,导出&加载镜像,以及向 Docker Hub 上传镜像。本文是 Docker 镜像学习的下篇,后续会带来更多 Docker 相关的学习文章,祝您学习愉快!

六、赠送 | 面试&学习福利资源

最近在网上发现一个不错的 PDF 资源《Java 核心面试知识.pdf》分享给大家,不光是面试,学习,你都值得拥有!!!

获取方式: 关注公众号: 小哈学Java, 后台回复 资源,既可获取资源链接,下面是目录以及部分截图:

7ad30f85918f4c0d8b4e3c6c9410eb0e.png
056a28011620a49b95f0c6d214caa1dd.png
62ddaf359a5728763c338c848bf159c5.png
b62ffb80bf7038602fc8cc8dffff1da8.png
22dd13825e77f275a3a164403a789b2f.png
404297ec66ed5b74549e07fe0adc2e36.png
68b395368ada646435b24593ce78192d.png

重要的事情说两遍,获取方式: 关注公众号: 小哈学Java, 后台回复 资源,既可获取资源链接 !!!

欢迎关注微信公众号: 小哈学Java

bac4a06f396f72cfd425accabe87a3f7.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python与access选哪个_从Python连接到Access

I want to be connected to a database Boreas (Access) from Python. How to be connected from Python to Access database Northwind? 解决方案 Here are 2 ways, with COM dispatch and with odbc. You will need the pywin32 extensions and/or pyodbc to use these meth…

设备唯一标识/设备码/设备标识码

文章目录一、MAC地址二、IMEI三、MEIDMEID 和 IMEI 用途的区别四、序列号&#xff08;一&#xff09;苹果手机序列号&#xff08;二&#xff09;华为手机序列号一、MAC地址 MAC地址&#xff08;英语&#xff1a;Media Access Control Address&#xff09;&#xff0c;直译为媒…

java登录界面命令_Java命令行界面(第18部分):JCLAP

java登录界面命令Giles Winstanley的JCLAP &#xff08; Java命令行参数解析器 &#xff09;是基于Java的命令行处理库的系列文章中介绍的第18个库。 这篇文章的示例基于JCLAP 1.4 &#xff0c;它需要Java 8 。 JCLAP主页上指出&#xff1a;“ JCLAP帮助Java开发人员为其应用程…

java登录界面命令_Java命令行界面(第15部分):Jargo

java登录界面命令Jargo在其GitHub主页上定义为“一种减轻程序参数/选项处理的工具”。 当已经存在许多其他命令行处理库时&#xff0c;该页面为另一个命令行处理库提供了基本原理 &#xff0c;该列表的顶部是“因为类型安全性&#xff0c;不变性和可读性很重要”。 Jargo的选项…

没学过编程能学python吗_我没学过编程,能否学会Python?

学习Python编程语言&#xff0c;是大家走入编程世界的最理想选择。那么我没学过编程&#xff0c;能否学会Python?上海Python培训肯定的回答您&#xff1a;of course!完全能学会!设计大师说过&#xff0c;留白是很好的风景&#xff0c;适当的留白是设计的至高境界;对于没有编程…

java登录界面命令_Java命令行界面(第13部分):JArgs

java登录界面命令JArgs 1.0的区别在于&#xff0c;这是我的第13篇文章的主题&#xff0c;该文章是关于Java命令行参数解析的。 JArgs是一个开放源代码&#xff08; BSD许可 &#xff09;库&#xff0c;主要由Steve Purcell和Ewan Mellor等 不同贡献者支持。 事实证明&#xff0…

java登录界面命令_Java命令行界面(第11部分):CmdLn

java登录界面命令这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn&#xff08;Java命令行解析器&#xff09;来处理基于Java的应用程序中的命令行参数。 Ostermiller Java实用程序包括几种不同类型的实用程序 &#xff0c;但本文的重点是组件页面上描述的“命…

socket模拟http的登陆_Python网络爬虫之模拟登陆 !

为什么要模拟登陆&#xff1f;Python网络爬虫应用十分广泛&#xff0c;但是有些网页需要用户登陆后才能获取到信息&#xff0c;所以我们的爬虫需要模拟用户的登陆行为&#xff0c;在登陆以后保存登陆信息&#xff0c;以便浏览该页面下的其他页面。保存用户信息模拟登陆后有两种…

java登录界面命令_Java命令行界面(第12部分):CLAJR

java登录界面命令第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 &#xff08;CLAJR&#xff09;。 该“库”是单个Java源文件&#xff08; CLAJR-0.9.java &#xff09;&#xff0c; 可从SourceForge下载 。 CLAJR的主页当前显示2006年版…

openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3&#xff0c;怎么办呢&#xff1f;一台台的操作显然不符合我摸鱼的风格&#xff0c;既然每台操作都一样&#xff0c;Ansible Roles 就有用武之地了。正常升级流程首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包&#xff0c;rpm -…

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化&#xff0c;以及解析和注册我们定义的 bean 信息。其中&#xff0c;「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述&#xff0c;「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中&#xff0c;我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外&#xff0c;我们还添加Thymeleaf和hsqldb&#xff0c;因为我们使用的是嵌入式数据…

MySQL 批量生成 SQL 脚本语句解决实际的业务需求/如何拼接字符串/拼接字符串的 SQL 语句

文章目录实际需求分析思路写拼接 SQL 脚本的脚本语句执行得到脚本语句保存成 SQL 脚本文件实际需求 有些行政区域的字段 area_fullname 是空的&#xff0c;如何补全呢&#xff1f;如下所示&#xff1a; 分析思路 &#xff08;一&#xff09;如何取到每个区域的上级名称和上…

php的变量都放在哪里,php变量一般放在哪个位置

php变量一般放在哪个位置php定义变量的要求格式&#xff0c;是非常宽松的&#xff0c;至于在哪里定义变量就需要看你的需求&#xff0c;可以在构造函数&#xff0c;也可以在你定义的方法中定义局部变量&#xff0c;也可以在构造函数外面定义全局变量。// 局部变量 函数内部func…

oauth2令牌刷新_了解OAuth2令牌认证

oauth2令牌刷新1.简介 在本教程中&#xff0c;我们将了解OAuth2令牌身份验证 &#xff0c;以便只有经过身份验证的用户和应用程序才能获得有效的访问令牌&#xff0c;该令牌随后可用于访问服务器上的授权API&#xff08;在OAuth术语中仅是受保护的资源&#xff09;。 使用基于…

jsap支付_Java命令行界面(第20部分):JSAP

jsap支付JSAP &#xff08; Java Simple Argument Parser &#xff09;2.1是本系列文章的第二十篇&#xff0c;重点是处理Java的命令行参数。 JSAP页面描述了该库存在的原因&#xff1a;“我在Internet上找到了多个解析器&#xff0c;所有解析器都处理了开关&#xff0c;但是没…

python语句大全input_input提示文字 Python基础输入函数,if-else语句,if-elif

input&#xff08;&#xff09;函数 此功能用于获取用户输入。 &#xff08;调用1&#xff09;input后&#xff0c;程序将立即暂停并等待用户输入。在用户完成内容输入后&#xff0c;单击Enter&#xff0c;程序将继续向下执行。 例如&#xff1a; input() &#xff08;2&#x…

ftp限流java,FTP流量限制的方法

一般来说&#xff0c;下载都是通过FTP来实现的&#xff0c;这样简单的采用ACLs就可以实现的。不过这样存在一个问题&#xff0c;就是原来正常的网络访问也给禁止了&#xff0c;无法继续工作&#xff0c;另外&#xff0c;还有大量的DOWNLOAD不通过FTP&#xff0c;而是借助HTTP协…

argparser_Java命令行界面(第22部分):argparser

argparserJohn Lloyd的argparser是本系列的第二十二篇有关基于Java的命令行参数解析的文章中介绍的库。 该库的主页除了提供单个源代码示例外&#xff0c;还提供了指向基于Javadoc的API文档 &#xff0c;JAR文件&#xff0c;ZIP文件和TAR文件的链接。 本帖子中使用的示例与本系…

判断 小程序 是否 滚动到页面底部 scrolltolower_微信小程序长列表性能优化——recycle-view

背景&#xff1a;第七次人口普查项目使用是微信小程序原生框架&#xff0c;组件是根据用户需求由项目组前端组组长封装完成的。采集小程序正式登记首页列表页面&#xff0c;根据腾讯老哥在sentry上的监控可以看出&#xff0c;列表页面前端性能比较差&#xff0c;主要表现在一些…