Docker实战-关于Docker镜像的相关操作(二)

导语
  之前的分享中,我们介绍了关于Docker镜像的查询操作相关的内容,下面我们继续来介绍删除清理、导入导出、创建镜像等操作。

在这里插入图片描述

如何删除和清理镜像?

使用标签删除镜像

  可以使用docker rmi 或者是 docker image rm 命令来删除镜像,它也包含了几个基本选项

  • -f ,-force:强制删除镜像,即使它存在依赖性也进行删除
  • -no-prune:不要清理未带标签的父镜像
docker rmi  IMAGE [IMAGE……]
[root@localhost ~]# docker rmi myubuntu:new
Untagged: myubuntu:new
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       18.04     f9a80a55f492   8 weeks ago   63.2MB
[root@localhost ~]# 

  这里我们删除了一个myubuntu:new标签的镜像,并且这个删除操作对其他标签的相同镜像不会产生影响。但是如果在镜像中只存在了一个标签的时候,如果再使用删除命令,则会彻底删除镜像。

使用镜像ID来删除镜像

  还是使用docker rmi命令 并且后面更上ID来删除镜像。需要注意的是,如果当镜像创建的容器存在的时候,镜像文件是无法被删除的。当然如果使用-f 参数进行强制删除的话也可以。但通常情况下不推荐使用-f参数来强制删除一个已经存在容器依赖的镜像。正确的做法应该是先删除依赖该镜像的所有容器,然后再去删除镜像。

[root@localhost ~]# docker rmi f9a80a55f492
Error response from daemon: conflict: unable to delete f9a80a55f492 (must be forced) - image is being used by stopped container a9a05f9ef099
[root@localhost ~]# 
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND   CREATED        STATUS                    PORTS     NAMES
a9a05f9ef099   ubuntu:18.04   "bash"    18 hours ago   Exited (0) 18 hours ago             hungry_cannon
[root@localhost ~]# docker rm a9a05f9ef099
a9a05f9ef099
[root@localhost ~]# docker rmi f9a80a55f492
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:152dc042452c496007f07ca9127571cb9c29697f42acbfad72324b2bb2e43c98
Deleted: sha256:f9a80a55f492e823bf5d51f1bd5f87ea3eed1cb31788686aa99a2fb61a27af6a
Deleted: sha256:548a79621a426b4eb077c926eabac5a8620c454fb230640253e1b44dc7dd7562
[root@localhost ~]# 

清理镜像

  在我们使用Docker一段时间之后,系统中可能会存在一些临时性的镜像文件,以及有些从来都没有使用过的镜像,这个时候,我们就可以使用docker image prune 命令来进行清理。

  • -a , -all:删除鄋的无用镜像
  • -filter filter:只清理符合过滤器的镜像
  • -f ,-force:强制删除镜像
[root@localhost ~]# docker image prune -f
Total reclaimed space: 0B
[root@localhost ~]# 

如何创建镜像

  创建镜像的方式有三种

  • 基于已有镜像的容器进行创建
  • 基于本地模板导入的方式
  • 基于Dockerfile文件创建

基于已有容器创建

docker [container] commit 命令
docker [container] commit [OPTIONS] CONTAINER [REPOSITORY] [:TAG] 

  首先我们来创建一个镜像容器,并且在容器中创建一个标识文件。容器ID为5cb48f5d7103。

[root@localhost ~]# docker run -it ubuntu:18.04 /bin/bash
root@5cb48f5d7103:/# touch test
root@5cb48f5d7103:/# ls  
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
root@5cb48f5d7103:/# exit
exit
[root@localhost ~]# 

  经过这一系列的操作,我们知道容器中镜像已经发生了变化,所以我们可以使用上面的命令来创建一个新的镜像。

[root@localhost ~]# docker  commit -m "add a new test file in root" -a "Docker New" 5cb48f5d7103 test:0.1
sha256:05268b440fd9d2cf31f5ee380969e0e196c670c6513cb0cedd2fc1419f9db7a7
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         0.1       05268b440fd9   16 seconds ago   63.2MB
ubuntu       18.04     f9a80a55f492   8 weeks ago      63.2MB
[root@localhost ~]# 

  创建完成之后运行该镜像查看是否有test文件

[root@localhost ~]# docker run -it test:0.1 /bin/bash
root@cf40152b3907:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
root@cf40152b3907:/# exit
exit
[root@localhost ~]# 

基于本地模板导入

  可以直接操作一个系统模板文件来导入镜像,使用 docker [container] import 命令来是完成。

docker [image] import [OPTIONS] file|URL -[REPOSITORY] [:TAG]

  要想直接导入一个模板,我们可以使用OpenVZ来提供模板,或者使用导出的镜像来作为模板。

基于Dockerfile文件创建

  基于Dockerfile文件是我们最为常见的一种创建镜像的方式。下面我们就来演示具体的操作过程。

  首先需要创建一个Dockerfile的文件。

FROM centos
RUN yum -y install wget \&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \&& tar -xvf redis.tar.gz

  然后执行如下的操作

[root@localhost ~]# docker build -t nginx:0.1 .
Sending build context to Docker daemon    274MB
Step 1/2 : FROM centos
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest---> 5d0da3dc9764
Step 2/2 : RUN yum -y install wget     && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"     && tar -xvf redis.tar.gz---> Running in 3198306bde68
CentOS Linux 8 - AppStream                       54  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum -y install wget     && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"     && tar -xvf redis.tar.gz' returned a non-zero code: 1
[root@localhost ~]# 

  完成之后会看到在镜像中出现了该镜像

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
test         0.1       05268b440fd9   17 minutes ago   63.2MB
ubuntu       18.04     f9a80a55f492   8 weeks ago      63.2MB
centos       latest    5d0da3dc9764   22 months ago    231MB
[root@localhost ~]# 

总结

  上面我们介绍了关于镜像的删除和清理,并且介绍了如何去创建一个镜像,在后续的分享中还会介绍到使用Dockerfile文件创建镜像的方式,希望大家多多关注。

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

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

相关文章

segment-anything使用说明

文章目录 一. segment-anything介绍二. 官网Demo使用说明三. 安装教程四. python调用生成掩码教程五. python调用SAM分割后转labelme数据集 一. segment-anything介绍 Segment Anything Model(SAM)根据点或框等输入提示生成高质量的对象遮罩&#xff0c…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题,就是服务向spring eureka中注册实例的时候使用的是机器名,然后出现localhost、xxx.xx等这样的内容,如下图: eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028

然后再来看字符串的高级操作 取长度 查找字符串下标位置 判断是否以某个字符,开头结尾 计算字符出现次数 替换

sigmoid ReLU 等激活函数总结

sigmoid ReLU sigoid和ReLU对比 1.sigmoid有梯度消失问题:当sigmoid的输出非常接近0或者1时,区域的梯度几乎为0,而ReLU在正区间的梯度总为1。如果Sigmoid没有正确初始化,它可能在正区间得到几乎为0的梯度。使模型无法有效训练。 …

什么是OCR?OCR技术详解

光学字符识别(Optical Character Recognition)简称为“OCR”。ORC是指对包含文本资料的图像文件进行分析识别处理,获取文字及版面信息的技术。 一般包括以下几个过程: 1.图像输入 针对不同格式的图像,有着不同的存储格式和压缩方式。目前&…

TypeScript学习笔记

1.ts和js的区别 2. ts的优势 3. ts下载后报错解决方法 报错: PS C:\Users\\Desktop> tsc -v tsc : 无法加载文件 C:\Users\32173\AppData\Roaming\npm\tsc.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/ go.microsoft.com/fwlink/?…

接口测试——电商网站接口测试实战(四)

1. 接口测试需求分析 常见接口文档提供的两种方式 ①word文档 ②在线文档 电商网站网址模拟练习:Swagger UI 2. 登陆的分析 慕慕生鲜网址:慕慕生鲜账号密码点击execute后 输入账号密码后点击开发者工具,再登录,点击网络&…

Linux下C/C++的gdb工具与Python的pdb工具常见用法之对比

1、gdb和pdb分别是什么? 1.1、gdb GDB(GNU Debugger)是一个功能强大的命令行调试工具,由GNU项目开发,用于调试C、C等编程语言的程序。它在多个操作系统中都可以使用,包括Linux、MacOS和Windows&#xff0…

oracle的管道函数

Oracle管道函数(Pipelined Table Function)oracle管道函数 1、管道函数即是可以返回行集合(可以使嵌套表nested table 或数组 varray)的函数,我们可以像查询物理表一样查询它或者将其赋值给集合变量。 2、管道函数为并行执行,在…

如何实现基于场景的接口自动化测试用例?

自动化本身是为了提高工作效率,不论选择何种框架,何种开发语言,我们最终想实现的效果,就是让大家用最少的代码,最小的投入,完成自动化测试的工作。 基于这个想法,我们的接口自动化测试思路如下…

软件设计师(七)面向对象技术

面向对象: Object-Oriented, 是一种以客观世界中的对象为中心的开发方法。 面向对象方法有Booch方法、Coad方法和OMT方法等。推出了同一建模语言UML。 面向对象方法包括面向对象分析、面向对象设计和面向对象实现。 一、面向对象基础 1、面向对象的基本…

【数据结构与算法】二叉排序树(BST)

二叉排序树(BST) 需求: 给你一个数列{7,3,10,12,5,1,9},要求能够高效的完成对数据的查询和添加。 解决方案分析 使用数组 数组未排序,优点:直接在数组尾添加,速度快。缺点:查找速…

[C++项目] Boost文档 站内搜索引擎(3): 建立文档及其关键字的正排 倒排索引、jieba库的安装与使用...

之前的两篇文章: 第一篇文章介绍了本项目的背景, 获取了Boost库文档 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…第二篇文章 分析实现了parser模块. 此模块的作用是 对所有文档html文件, 进行清理并汇总 🫦[C项目] …

Spring Boot整合ES的两种方式

使用Spring Data Elasticsearch Starter 在Spring Boot中整合Elasticsearch的方式之一是使用Elasticsearch的官方Spring Data Elasticsearch Starter。该Starter提供了对Elasticsearch的高级集成,简化了配置和管理Elasticsearch客户端。 下面是使用Spring Data E…

【C++】智能指针

一、为什么要智能指针 下面我们先分析下面这段程序有没有什么内存方面的问题? int Div(int a, int b) {if (b 0)throw invalid_argument("除0错误");elsereturn a / b; } void Func() {// 1、如果 p1 这里 new 抛异常会如何?// 2、如果 p2 …

【C++从0到王者】第十六站:stack和queue的使用

文章目录 一、stack的使用1.stack的介绍2.stack的使用 二、queue的使用1.queue的护额晒2.queue的使用 三、stack和queue相关算法题1.最小栈2.栈的压入、弹出序列3.逆波兰表达式4.两个栈实现一个队列5.用两个队列实现栈6.二叉树的层序遍历1.双队列2.用一个变量levelSize去控制 7…

K8S系列文章 之 编写自动化部署K8S脚本

介绍 通过ansible脚本shell实现自动化部署k8s基础集群(v1.25.0) 部署结构 1. 通过二进制部署包镜像安装k8s集群、目录etcd节点只支持1-3个节点、最多三个etcd节点 2. 因k8s版本相对较新、需要升级内核来支持后台程序、当前版本只支持Cento7,内核版本(5.19.4-1.el7…

ffmpeg+nginx实现rtsp协议摄像头web端播放

ffmpegnginx实现rtsp协议摄像头web端播放 环境准备准备nginx环境添加rtmp模块添加hls转发 使用ffmpeg,将摄像头rtsp转为rtmp并推送到nginxVLC播放验证 环境准备 nginx(需要安装rtmp模块)ffmpeg 6.0vlc播放器(本地播放验证&#x…

大数据课程H2——TELECOM的电信流量项目实现

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解TELECOM项目的数据收集; ⚪ 了解TELECOM项目的数据清洗; ⚪ 了解TELECOM项目的数据导出; ⚪ 了解TELECOM项目的数据可视化&…

观察者模式(C++)

定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。 ——《设计模式》GoF 使用场景 一个对象(目标对象)的状态发生改变,所有的依赖对…