在一些特定的环境下,官方的jingxiang无法满足要求,因此就需要使用一定手段来自定义jingxiang来满足要求,通常情况下,可能会有下面的原因导致需要jingxiang:
制作容器jingxiang,主要有两种方式:
do cker file的方式进行构建jingxiang,这种通常是经常更新的jingxiang,把软件安装的流程写成do cker file,使用do cker build构建容器jingxiangdo cker commit功能:从容器中创建一个新的jingxiang
常见的参数有,-a表示jingxiang作者,-c表示使用do cker file指令来创建jingxiang,可以修改启动指令,-m表示提交时的说明文字,-p表示在commit的过程中把容器暂停
比如:
`do cker` commit xxxx zbh/mynginx:v01
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
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 filejingxiang的定制实际上就是定制每一层所添加的配置,文件,如果把每一层修改,安装,构建,操作的命令写到一个脚本里面,然后用这个脚本来进行构建,定制jingxiang,这个脚本就是所谓的do cker file
do cker file整体上来说就是一个文本文件,在它内部包含了一个一个的指令,每一个指令都会构建一层,其实就是前面执行的哪一个一个的代码
当写好了一份do cker file后,do cker会按照顺序依次执行do cker file中的内容
do cker file对于do cker file来说,其实在最开始的介绍中已经说过了,适合进行频繁更新的场景,这里再展开进行介绍:
do cker file编写这里对于do cker file的规则就不多进行列举了,直接用实例来进行演示,会在do cker file后附带有对应的解释规则
ADD 与 COPY 的区别ADD:
COPY,它更灵活,但使用时需注意其额外功能可能带来的复杂性。COPY:
COPY。CMD 与 ENTRYPOINT 的区别ENTRYPOINT:
run 的命令行参数覆盖,这些参数会作为 ENTRYPOINT 命令的参数。do cker file 中只能有效指定一个 ENTRYPOINT(如果有多个,只有最后一个生效)。CMD 结合使用,为 ENTRYPOINT 提供默认参数。CMD:
run 的命令行参数覆盖。ENTRYPOINT 和 CMD,CMD 的值将作为 ENTRYPOINT 的默认参数。FROM 指令FROM 指令实现多阶段构建,每个阶段创建一个临时jingxiang,最终jingxiang基于最后一个 FROM 指令。do cker file 制作jingxiang的区别do cker file 使用提供了标准化、可复现的jingxiang构建过程,允许通过脚本化的方式精确控制jingxiang每一层的内容和配置。do cker file 则是指导这一系列快照生成的具体指令集。 的jingxiang,通常是因为更新或重建导致旧jingxiang被新的覆盖。 image ls -f dangling=true 命令列出并安全删除,以释放空间。do cker 构建过程中为了优化和复用资源而产生的。do cker` image ls` 输出中,需使用 do cker image ls -a 查看所有(包括中间层)jingxiang。