自定义docker镜像,ubuntu安装命令并导出

news2025/4/22 3:04:10

文章目录

    • 问题现象
    • 解决步骤
    • 相关命令详细介绍
      • docker save 与 docker load
      • docker import 与 docker export
      • docker commit

问题现象

  • 我们的通讯服务,需要监测前端设备的在线情况(是否在线、丢包率、延迟等),使用ping命令去实现此功能
  • 前期开发测试没有问题,部署时发现该命令无法执行,报错,找不到这个命令bash: ping:command not found
  • 我们使用的是极简镜像eclipse-temurin:11-jre-focal,这个版本里的ubuntu没有安装不需要的命令

解决步骤

  • Docker是一种流行的容器化平台,它允许开发者将应用程序及其依赖项打包成可移植的容器

  • 一开始想使用docker save 与 docker load 命令,这两个命令配对使用

  • docker save,保存镜像,将已有镜像保存为文件

  • docker load,装载镜像,将已有镜像文件装载到服务器的docker里

  • 失败,这两个是对镜像的导出和使用,对容器里的修改根本没用,影响不到

  • 然后考虑使用 docker import 与 docker export 命令,这两个命令也是配对使用的

  • docker export,保存容器,将已有容器导出,算是一个备份

  • docker import,导入保存的容器,算是恢复

  • 还是失败,这个只是对容器的保存和恢复,没法作为镜像放到其他机器上使用

  • 注意:以上两对命令都是配对使用,不能混用

  • 最终解决方法:docker commit,提交容器修改到镜像,可以在其他机器使用,完美解决
    在这里插入图片描述

  • 具体步骤如下:

# docker load 导入 jib 打包好的 unit镜像
docker load -i unit.tar
# docker images查看下,此时可以看到本镜像188M
docker images
# 根据镜像创建容器
docker-compose up -d unit
# 以root用户(-u0)权限进入容器
docker exec -it -u0 unit /bin/bash
# apt-get update 更新源
apt-get update -y
# 安装ping命令
apt-get install -y iputils-ping
# 测试ping命令(成功)
ping -c 4 -w 2 10.1.1.104
# exit 退出,关闭容器(非必须)
docker stop unit
# 将此安装过ping命令的容器,提交为镜像
docker commit unit unit
# docker images查看下,此时可以看到本镜像427M
docker images
# docker save 将镜像保存成tar文件(供后续load使用,而且此时是413M)
docker save -o unit.tar unit 
  • 此时导出的镜像,可以拿到其他机器装载使用,ping命令也还在
    在这里插入图片描述
  • 此时还存在一个问题,每次打这个镜像都要把这个流程走一遍
  • 正确做法是把我们jib打包使用的eclipse-temurin:11-jre-focal镜像,装载并创建容器,再修改容器安装命令,最后导出供后续jib打包使用,但问题是无法启动创建的容器11-jre-focal,这个后面有时间再去探究

相关命令详细介绍

docker save 与 docker load

Docker提供了多种命令来管理镜像和容器,其中包括docker save和docker load。

docker save: 将一个或多个Docker镜像保存为tar文件。这个tar文件包含了镜像的所有层以及元数据信息,可以用于在其他机器上导入和部署。

使用docker save命令的一般语法为:

docker save <IMAGE> -o <OUTPUT.tar>

其中,<IMAGE>是要保存的镜像的名称或ID,<OUTPUT.tar>是保存的tar文件的输出路径。

示例:

docker save myimage:tag -o myimage.tar

docker load: 从一个tar文件中加载一个或多个Docker镜像,并将其导入本地Docker引擎。加载的镜像可以在本地机器上使用。

使用docker load命令的一般语法为:

docker load -i <INPUT.tar>

其中,<INPUT.tar>是要加载的tar文件的路径。

示例:

docker load -i myimage.tar

需要注意的是,保存的tar文件可以通过网络传输到其他机器上,并使用docker load命令进行加载。这在离线环境或网络带宽较低的情况下非常有用。

docker import 与 docker export

docker import和docker export是Docker提供的两个命令,用于导入和导出容器镜像。

  1. docker export命令用于将容器的文件系统打包为一个tar文件,可以将容器的文件系统保存为一个镜像文件或备份文件,不包含容器的元数据和配置信息。
    使用方法如下:

    docker export [OPTIONS] CONTAINER_NAME > FILENAME.tar
    

    示例:

    docker export my_container > my_container.tar
    
  2. docker import命令用于将通过docker export导出的tar文件导入为一个镜像文件,可以使该镜像文件作为新的基础镜像进行容器创建。
    使用方法如下:

    docker import [OPTIONS] FILENAME.tar [REPOSITORY[:TAG]]
    

    示例:

    docker import my_container.tar my_image:tag
    

需要注意的是,使用docker import导入的镜像文件不包含容器的元数据和配置信息,只包含文件系统。因此,通过该方式导入的镜像不能保留容器的运行状态、端口映射等配置信息。

如果需要完整地备份和恢复容器,推荐使用docker commit和docker save命令。docker commit命令用于保存容器的状态为一个新镜像文件,docker save命令用于将镜像保存为tar文件,可以包含所有的信息和配置。

希望可以帮到你!有其他问题请继续提问。

docker commit

Docker commit是Docker提供的一种命令,用于将运行中的容器保存为一个新的镜像。通过该命令,可以将容器的当前状态打包保存为一个镜像,以供后续使用或分享。

使用Docker commit命令,可以在容器上进行一些操作,如修改配置文件、安装软件等。然后通过commit命令将容器的状态保存为一个新的镜像,以便后续创建新的容器时使用。

具体使用方法如下:

  1. 启动一个容器:首先需要使用docker run命令启动一个容器。

    docker run -it [容器名称] /bin/bash
    
  2. 在容器内进行操作:在容器内部,可以进行需要的配置和操作,如修改配置文件、安装软件等。

  3. 提交容器为镜像:操作完毕后,使用docker commit命令提交容器为镜像。该命令的基本格式如下:

    docker commit [容器ID] [新镜像名称]
    

    容器ID可以通过docker ps命令查看,新镜像名称是你给新镜像取的名称。

  4. 查看新镜像:使用docker images命令可以查看所有的镜像列表,包括刚刚提交的新镜像。

通过Docker commit命令,可以快速创建和管理自定义的镜像。然而,需要注意的是,Docker官方推荐使用Dockerfile来构建镜像,因为Dockerfile可以更好地管理镜像的构建过程和依赖关系。

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

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

相关文章

unity学习笔记----游戏练习03

一、修复植物种植的问题 1.当手上存在植物时&#xff0c;再次点击卡片上的植物就会在手上添加新的植物&#xff0c;需要修改成只有手上没有植物时才能再次获取到植物。需要修改AddPlant方法。 public bool AddPlant(PlantType plantType) { //防止手上出现多个植…

Python pandas 操作 excel 详解

文章目录 1 概述1.1 pandas 和 openpyxl 区别1.2 Series 和 DataFrame 2 常用操作2.1 创建 Excel&#xff1a;to_excel()2.2 读取 Excel&#xff1a;read_excel()2.2.1 header&#xff1a;标题的行索引2.2.2 index_col&#xff1a;索引列2.2.3 dtype&#xff1a;数据类型2.2.4 …

Java基础语法(注释,关键字,字面量,变量,数据类型,标识符,键盘录入,IDEA安装,类,模块,项目)

文章目录 day02 - Java基础语法1. 注释使用的技巧注意点 2. 关键字2.1 概念2.2 第一个关键字class 3. 字面量区分技巧 4. 变量4.1 什么是变量&#xff1f;4.2 变量的定义格式4.2.1 格式详解4.2.2 常用的数据类型4.2.3 变量的注意事项 4.3 变量的练习 5. 数据类型5.1 Java语言数…

YOLOv5算法进阶改进(9)— 引入ASPP | 空洞空间金字塔池化

前言:Hello大家好,我是小哥谈。ASPP是空洞空间金字塔池化(Atrous Spatial Pyramid Pooling)的缩写。它是一种用于图像语义分割任务的特征提取方法。ASPP通过在不同尺度上进行空洞卷积操作,从而捕捉到图像中不同尺度的上下文信息。ASPP的主要思想是在输入特征图上应用多个不…

High-Throughput Algae Cell Detection

一、数据集 About Dataset Microalgae, as an important natural resource, find widespread applications in various fields such as marine environments, biomedical research, clean energy, and food engineering. Monitoring the abundance and species composition of…

MFC消息机制详细剖析

易语言程序的破解99%的时候都需要用到FF55FC5F5E这个特征码 新建一个MFC应用程序&#xff1a; 去编辑MFC的.rc资源文件来DIY窗体 静态编译的&#xff0c;把很多静态库的代码都添加进去了 &#xff0c;所以速度很慢 消息机制针对的是GUI程序&#xff08;比如窗口程序&#xf…

51单片机项目(24)——基于51单片机的温控风扇protues仿真

1.功能设计 使用传感器测量温度&#xff0c;并将温度显示在LCD1602上。如果温度超过阈值&#xff0c;那么就打开风扇&#xff0c;否则风扇不打开。&#xff08;仿真的时候&#xff0c;用直流电机模拟风扇&#xff09;。 仿真截图如下&#xff1a; 此时温度是27度&#xff0c;我…

感染了后缀为.[sqlback@memeware.net].2700勒索病毒如何应对?数据能够恢复吗?

导言&#xff1a; 近期&#xff0c;[sqlbackmemeware.net].2700 勒索病毒成为网络安全的一大威胁。该勒索病毒采用高度复杂的加密算法&#xff0c;将用户文件加密并勒索赎金。了解该病毒的特征对于有效恢复被加密数据以及预防进一步感染至关重要。如果受感染的数据确实有恢复的…

私有部署ELK,搭建自己的日志中心(三)-- Logstash的安装与使用

一、部署ELK 上文把采集端filebeat如何使用介绍完&#xff0c;现在随着数据的链路&#xff0c;继续~~ 同样&#xff0c;使用docker-compose部署&#xff1a; version: "3" services:elasticsearch:container_name: elasticsearchimage: elastic/elasticsearch:7.9…

『精』CSS 小技巧之BEM规范

『精』CSS 小技巧之BEM规范 文章目录 『精』CSS 小技巧之BEM规范一、什么是BEM&#xff1f;二、BEM要怎么用&#xff1f;三、不用BEM会少个胳膊吗&#xff1f;&#x1f48a;四、Sass与BEM的结合&#x1f388;五、块与修饰符应放在一块&#x1f47f;参考资料&#x1f498;推荐博…

Redis经典五大类型源码及底层实现(一)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part1

原创 古猫先生 存储随笔 2023-12-31 08:31 发表于上海 回首2023 2-8月份有近半年时间基本处于断更状态 好在8月份后小编没有松懈 &#xff08;虽然2023年度总结&#xff0c;更像是近4个月总结&#xff09; 本年度顺利加V啦&#xff01; 感谢各位粉丝朋友的一路支持与陪伴 …

Linux之磁盘分区,挂载

Linux分区 分区介绍 对linux来说无论有几个分区&#xff0c;分给哪个目录使用&#xff0c;归根结底只有一个根目录&#xff0c;linux中每个分区都是用来组成整个文件系统的一部分。linux采用“载入"的处理方法&#xff0c;他的整个文件系统中包含一整套的文件和目录&…

osg::DrawElements*系列函数及GL_QUAD_STRIP、GL_QUADS绘制四边形效率对比

目录 1. 前言 2. osg::DrawElements*系列函数用法说明 3. GL_QUADS、GL_QUAD_STRIP用法及不同点 4. 效率对比 5. 总结 6. 参考资料 1. 前言 利用osg绘制图元&#xff0c;如&#xff1a;三角形、四边形等&#xff0c;一般用osg::PrimitiveSet类。其派生出了很多子类&#…

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码&#xff1a; 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0&#xff0c;另存为123.zip&#xff1a; 即可绕过加密&#xff1a; 得到一个zip一个docx&#xff0c;但zip需要密码&#xff1a; 因此看docx有无敏感信息&#x…

面向对象基础-类与对象-封装

1、类与对象 1.1 概念 类&#xff1a;类是一个抽象的概念&#xff0c;用于描述一类对象的特点。 对象&#xff1a;根据类的概念所创造的实体。 【思考】一个对象可以没有对应的类嘛&#xff1f; 不可以&#xff0c;因为必须现有类才能创建对象。 1.2 类的内容 类中最基础的内容…

x-cmd pkg | fzf - 命令行模糊查找器

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 fzf 是一个由 Go 编写的命令行模糊搜索工具&#xff0c;用于在大量文本数据中快速定位和选择内容&#xff0c;可以与任何列表一起使用&#xff08;e.g. 文件、命令历史记录、进程、主机名、书签、git 提交等&#xff…

鲲志说:向我乘风破浪,好事多磨的2023致敬!(感恩有礼,感谢有你)

伴随着2023最后一个工作日的结束&#xff0c;也终于要给一年的工作划上一个结尾了&#xff0c;当然&#xff0c;也要给自己一个交代&#xff0c;给自己一个年度总结 2023年&#xff0c;大的挫折也是有的&#xff0c;但我相信好事多磨&#xff0c;总的来说是事业型的一年&#x…

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…

关于“Python”Django 管理网站的核心知识点整理大全52

目录 注意 18.2.2 激活模型 settings.py 18.2.3 Django 管理网站 1. 创建超级用户 注意 2. 向管理网站注册模型 admin.py 注意 3. 添加主题 Climbing。 18.2.4 定义模型 Entry models.py 18.2.5 迁移模型 Entry 18.2.6 向管理网站注册 Entry admin.py 往期快速…