• 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 
    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指的是仓库名和标签均为 的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被删除时,这些中间层也会被自动清理。
  • 相关阅读:
    Ubuntu虚拟机镜像下载及创建
    计算机毕业设计——简单的网页设计
    带约束条件的运筹规划问题求解(模拟退火算法实现)
    【docker】容器跟宿主机、其他容器通信
    RabbitMQ(基于AMQP的开源消息代理软件)
    使用VsCode调试UE5的PuerTs
    【Windows 10 】关机后自动重启
    基础HTML和HTML5
    Talk预告 | FAIR研究科学家刘壮:高效和可扩展的视觉神经网络架构
    人工智能基础 | 回归分析(四)
  • 原文地址:https://blog.csdn.net/qq_73899585/article/details/139606999