jingxiang制作

文章目录

  • jingxiang制作
    • 为什么需要jingxiang制作
    • 如何进行jingxiang制作
  • 快照方式制作jingxiang
    • 制作命令
      • `do cker` commit
  • 快照制作jingxiang
    • 创建临时工作目录
    • 编写一个实例代码
    • 启动一个容器
    • 替换国内软件源
    • 安装编译软件
    • 源代码拷贝到容器中
    • 编译运行
    • 提交为一个jingxiang
    • 测试是否可以正常运行
  • `do cker file`jingxiang制作
    • 什么是`do cker file`
    • 为什么需要`do cker file`
    • 如何进行`do cker file`编写
  • jingxiang制作常见问题整理
    • 1. `ADD` 与 `COPY` 的区别
    • 2. `CMD` 与 `ENTRYPOINT` 的区别
    • 3. 如何使用多个 `FROM` 指令
    • 4. 快照与使用 ``do cker file`` 制作jingxiang的区别
    • 5. 什么是空悬jingxiang(Dangling Images)
    • 6. 中间层jingxiang的概念

jingxiang制作

为什么需要jingxiang制作

在一些特定的环境下,官方的jingxiang无法满足要求,因此就需要使用一定手段来自定义jingxiang来满足要求,通常情况下,可能会有下面的原因导致需要jingxiang:

  1. 编写的代码要打包到jingxiang中直接跟随jingxiang发布
  2. 第三方制作的内容安全性未知,可能有安全问题
  3. 特定的需求或者功能不能满足

如何进行jingxiang制作

制作容器jingxiang,主要有两种方式:

  1. 制作快照方式获得jingxiang,在基础jingxiang上,先登录容器中,安装jingxiang需要的所有软件,再制作快照
  2. do cker file的方式进行构建jingxiang,这种通常是经常更新的jingxiang,把软件安装的流程写成do cker file,使用do cker build构建容器jingxiang

快照方式制作jingxiang

制作命令

do cker commit

功能:从容器中创建一个新的jingxiang

常见的参数有,-a表示jingxiang作者,-c表示使用do cker file指令来创建jingxiang,可以修改启动指令,-m表示提交时的说明文字,-p表示在commit的过程中把容器暂停

比如:

`do cker` commit xxxx zbh/mynginx:v01

快照制作jingxiang

创建临时工作目录

root@VM-24-7-ubuntu:/data/myworkdir/compose/base# cd ~
root@VM-24-7-ubuntu:~# mkdir -p /data/zbh/commitimage
root@VM-24-7-ubuntu:~# cd /data/zbh/commitimage/

编写一个实例代码

root@VM-24-7-ubuntu:/data/zbh/commitimage# cat demo.cc 
#include <iostream>
using namespace std;

int main()
{
    cout << "hello `do cker` commitimage" << endl;
    return 0;
}

启动一个容器

root@VM-24-7-ubuntu:/data/zbh/commitimage# `do cker` container run -it --name mycppcommit centos:7 bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7

替换国内软件源

[root@bd60ae387a04 /]# sed -i.bak \
>     -e 's|^mirrorlist=|#mirrorlist=|g' \
>     -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
>     /etc/yum.repos.d/CentOS-Base.repo
[root@bd60ae387a04 /]# yum makecache
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
base                                                                                   | 3.6 kB  00:00:00     
extras                                                                                 | 2.9 kB  00:00:00     
updates                                                                                | 2.9 kB  00:00:00     
(1/10): base/7/x86_64/group_gz                                                         | 153 kB  00:00:00     
(2/10): base/7/x86_64/filelists_db                                                     | 7.2 MB  00:00:00     
(3/10): base/7/x86_64/primary_db                                                       | 6.1 MB  00:00:00     
(4/10): base/7/x86_64/other_db                                                         | 2.6 MB  00:00:00     
(5/10): extras/7/x86_64/primary_db                                                     | 253 kB  00:00:00     
(6/10): extras/7/x86_64/filelists_db                                                   | 305 kB  00:00:00     
(7/10): extras/7/x86_64/other_db                                                       | 154 kB  00:00:00     
(8/10): updates/7/x86_64/primary_db                                                    |  27 MB  00:00:01     
(9/10): updates/7/x86_64/other_db                                                      | 1.6 MB  00:00:00     
(10/10): updates/7/x86_64/filelists_db                                                 |  15 MB  00:00:02     
Metadata Cache Created

安装编译软件

这个直接安装就可以了:

yum install -y gcc

源代码拷贝到容器中

root@VM-24-7-ubuntu:/data/zbh/commitimage# `do cker` cp ./demo.cc mycppcommit:/src
Successfully copied 2.05kB to mycppcommit:/src

编译运行

[root@bd60ae387a04 src]# g++ demo.cc -o demo
[root@bd60ae387a04 src]# ./demo 
hello `do cker` commitimage

提交为一个jingxiang

root@VM-24-7-ubuntu:/data/zbh/commitimage# `do cker` commit mycppcommit mycppimg:v1.0
sha256:c92a4ac1b0feb0aaeb9086889511f1b77321b2eb843b8a2e56914b5c28d56c25

测试是否可以正常运行

root@VM-24-7-ubuntu:/data/zbh/commitimage# `do cker` run -it mycppimg:v1.0 ./src/demo
hello `do cker` commitimage

do cker filejingxiang制作

什么是do cker file

jingxiang的定制实际上就是定制每一层所添加的配置,文件,如果把每一层修改,安装,构建,操作的命令写到一个脚本里面,然后用这个脚本来进行构建,定制jingxiang,这个脚本就是所谓的do cker file

do cker file整体上来说就是一个文本文件,在它内部包含了一个一个的指令,每一个指令都会构建一层,其实就是前面执行的哪一个一个的代码

当写好了一份do cker file后,do cker会按照顺序依次执行do cker file中的内容

为什么需要do cker file

对于do cker file来说,其实在最开始的介绍中已经说过了,适合进行频繁更新的场景,这里再展开进行介绍:

  1. 可以按照需求进行自定义jingxiang
  2. 方便进行自动化构建,重复执行
  3. 维护修改比较方便
  4. 更加标准化

如何进行do cker file编写

这里对于do cker file的规则就不多进行列举了,直接用实例来进行演示,会在do cker file后附带有对应的解释规则

jingxiang制作常见问题整理

1. ADDCOPY 的区别

  • ADD:

    • 功能更强大,能从构建主机的本地文件系统或远程 URL 复制文件/目录到jingxiang文件系统。
    • 支持自动解压特定类型的压缩文件。
    • 相较于 COPY,它更灵活,但使用时需注意其额外功能可能带来的复杂性。
  • COPY:

    • 仅用于从构建主机本地文件系统复制文件/目录到jingxiang。
    • 当只需简单拷贝文件,特别是压缩包时,推荐使用 COPY

2. CMDENTRYPOINT 的区别

  • ENTRYPOINT:

    • 定义容器启动时运行的命令,且不可被 ``do cker run 的命令行参数覆盖,这些参数会作为 ENTRYPOINT 命令的参数。
    • do cker file 中只能有效指定一个 ENTRYPOINT(如果有多个,只有最后一个生效)。
    • 可与 CMD 结合使用,为 ENTRYPOINT 提供默认参数。
  • CMD:

    • 也定义容器启动命令或参数,但可被 ``do cker run 的命令行参数覆盖。
    • 如果同时存在 ENTRYPOINTCMDCMD 的值将作为 ENTRYPOINT 的默认参数。

3. 如何使用多个 FROM 指令

  • 多个 FROM 指令实现多阶段构建,每个阶段创建一个临时jingxiang,最终jingxiang基于最后一个 FROM 指令。
  • 允许在不同阶段分别处理编译、安装、清理等工作,然后仅将必要的文件从前一阶段复制到下一阶段,以减少最终jingxiang的大小。
  • 特别适用于分离编译环境和运行环境。

4. 快照与使用 do cker file 制作jingxiang的区别

  • do cker file 使用提供了标准化、可复现的jingxiang构建过程,允许通过脚本化的方式精确控制jingxiang每一层的内容和配置。
  • 快照更多指的是jingxiang构建过程中对文件系统的即时状态保存,而 do cker file 则是指导这一系列快照生成的具体指令集。

5. 什么是空悬jingxiang(Dangling Images)

  • 空悬jingxiang指的是仓库名和标签均为 <none> 的jingxiang,通常是因为更新或重建导致旧jingxiang被新的覆盖。
  • 可以通过 ``do cker image ls -f dangling=true 命令列出并安全删除,以释放空间。

6. 中间层jingxiang的概念

  • 中间层jingxiang是 do cker 构建过程中为了优化和复用资源而产生的。
  • 它们不会直接显示在默认的 do cker` image ls` 输出中,需使用 do cker image ls -a 查看所有(包括中间层)jingxiang。
  • 这些jingxiang是其他jingxiang的基础,不应随意删除,因为它们是依赖项,当依赖它们的jingxiang被删除时,这些中间层也会被自动清理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

04 远程访问及控制

1、SSH远程管理 SSH是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。 SSH协议对通信双方的数据传输进行了加密处理&#xff08;包括用户登陆时输入得用户口令&#xff09;。 终端&#xff1a;接收用户的指令 TTY终端不能远程&#xff0c;它…

《跟我一起学“网络安全”》——等保风评加固应急响应

等保风评加固应急响应 一、安全加固 背景 随着IP技术的飞速发展&#xff0c;一个组织的信息系统经常会面临内部和外部威胁的风险&#xff0c;网络安全已经成为影响信息系统的关键问题。 虽然传统的防火墙等各类安全产品能提供外围的安全防护&#xff0c;但并不能真正彻底的消…

吴恩达2022机器学习专项课程C2W3:2.26 机器学习发展历程

目录 开发机器学习系统的过程开发机器学习案例1.问题描述2.创建监督学习算法3.解决问题4.小结 误差分析1.概述2.误差分析解决之前的问题3.小结 增加数据1.简述2.增加数据案例一3.增加数据案例二4.添加数据的技巧5.空白创建数据6.小结 迁移学习1.简述2.为什么迁移学习有作用3.小…

【设计模式-12】代理模式的代码实现及使用场景

&emsp&#xff1b;代理模式是一种应用很广发的结构性设计模式&#xff0c;它的设计初衷就是通过引入新的代理对象&#xff0c;在客户端和目标对象之间起到中介的作用&#xff0c;从而实现控制客户端对目标对象的访问&#xff0c;比如增强或者阉割某些能力。 1. 概述 代理模…

如何理解电流镜负载的差分对的增益

我们知道最普通的电阻负载的差分对的差分增益是-gmRD&#xff0c;如果我们不希望输出是双端的&#xff0c;而是希望单端输出&#xff0c;那么使用电阻负载的差分对会导致增益变为原先的一半&#xff0c;因此引入了电流镜负载的差分对&#xff0c;它可以在保证增益与原先相同的情…

一小时搞定JavaScript(1)——JS基础

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!! 文章目录 1.基本语法1.1 JS语言的特点1.2 创建一个JS文件1.3 输入与输出1.4 变量1.4.1 命名规则1.4.2 变量声明数字类型字符串类型布尔类型未定义类型 1.4.3 类型转换隐式转换显示转…

数据可视化实验一:Panda数据处理及matplotlib绘图初步

目录​​​​​​​ 2024-6-17 一、请将所有含有发明家“吴峰”的发明专利的“申请日”打印出来。并将含有“吴峰”的所有发明专利条目保存到Excel中 1.1 代码实现 1.2 运行结果 二、读取文件创建城市、人口、性别比、城镇化率DataFrame对象&#xff0c;计算指标排名&…

嘴尚绝卤味:传统与创新的味蕾碰撞,尝鲜必备美食!

在当今的餐饮市场中&#xff0c;各式各样的美食层出不穷&#xff0c;让人目不暇接。而在这一片美食的海洋中&#xff0c;嘴尚绝卤味以其独特的魅力和口感&#xff0c;成功吸引了众多食客的目光。今天&#xff0c;就让我们一起来探索一下&#xff0c;嘴尚绝卤味究竟有何魔力&…

MongoDB~分片数据存储Chunk;其迁移原理、影响,以及避免手段

分片数据存储&#xff1a;Chunk存储 Chunk&#xff08;块&#xff09; 是 MongoDB 分片集群的一个核心概念&#xff0c;其本质上就是由一组 Document 组成的逻辑数据单元。每个 Chunk 包含一定范围片键的数据&#xff0c;互不相交且并集为全部数据。 分片集群不会记录每条数据…

Java多线程下载工具,多线程,多任务,断点续传,GUI

目录 一、题目要求 二、效果展示 三、功能实现 四、代码 一、题目要求 序号 功能名称 功能需求标识 简要描述 1 下载功能 Download 当用户输入一个下载链接后&#xff0c;能识别链接并开始多线程下载工作&#xff0c;包括线程监听、线程管理等。 2 续传功能 …

[面试题]Spring

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis Spring 是一个很庞大的技术体系&#xff0c;可以说包容一切&…

APP Android

APP Android 安卓源生应用程序 APP IOS-CSDN博客 05.04 06:11Testing

MySQL修改用户权限(宝塔)

在我们安装好的MySQL中&#xff0c;很可能对应某些操作时&#xff0c;不具备操作的权限&#xff0c;如下是解决这些问题的方法 我以宝塔创建数据库为例&#xff0c;创建完成后&#xff0c;以创建的用户名和密码登录 这里宝塔中容易发生问题的地方&#xff0c;登录不上去&#…

电离层对流层延迟解算

前言&#xff1a; 本章节代码均在Gitee中开源&#xff1a; 电离层对流层延迟解算https://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E7%94%B5%E7%A6%BB%E5%B1%82%E5%AF%B9%E6%B5%81%E5%B1%82%E8%AF%A…

Python学习笔记12:进阶篇(一),类的相关知识

前言 在讲类之前&#xff0c;我们简单介绍一些Python的知识。这些知识在入门篇没讲&#xff0c;想学Python的&#xff0c;基本都对Python有基础的了解&#xff0c;但是今天开始的进阶知识&#xff0c;会涉及到一些Python的特性&#xff0c;所以在这里介绍一下。 Python是一种高…

数据仓库与数据挖掘(期末复习)

数据仓库与数据挖掘&#xff08;期末复习&#xff09; ETL的含义Extract 、 Transformation、Load。 ODS的全称Operational Data Store。 DW全称 Data Warehourse DM全称是Data Mart 数据仓库数据抽取时所用到技术是增量、全量、定时、调度 STAGE层作用是提供业务系统数据…

HTC手机卷土重来,价格和配置给我看麻了

第一眼看到我是不敢相信的&#xff0c;HTC 竟然还活着。 提到 HTC&#xff0c;相信不少同学会发出「那是我在夕阳下奔跑并逝去的青春」这样的感叹吧。 曾经辉煌一时的手机大佬&#xff0c;市占率曾一度达到 15%。 璀璨就如同天边一闪而过的流星。关于它的风光地位&#xff0c;…

FinalShell 连接虚拟机超时,主机ping不通虚拟机,解决

出现问题&#xff1a; 连接主机...java.net.ConnectException: Connection timed out: connect 在排查错误时发现&#xff1a; 虚拟机内能互相ping通&#xff0c;虚拟机能ping通主机 但是主机的cmd命令ping不通虚拟机 问题原因&#xff1a; 虚拟机内能互相ping通&#xff0…

基于Java+Swing贪吃蛇小游戏(含课程报告)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

计算机组成原理历年考研真题对应知识点(数制与编码)

目录 2.1数制与编码 2.1.1进位计数制及其相互转换 【命题追踪——采用二进制编码的原因(2018)】 【命题追踪——十进制小数转换为二进制小数(2021、2022)】 2.1.2 定点数的编码表示 【命题追踪——补码的表示范围(2010、2013、2014、2022)】 【命题追踪——补码和真值的相…