网站首页 > 技术教程 正文
docker-copyedit使用样例
0x00 背景
在docker中,我们可以使用Dockerfile来从一个已有的镜像build出一个新镜像.在Dockerfile中,基本上可以对基础镜像的很多配置进行修改.但是其中的环境变量(Env)和VOLUME只能增加,不能删除,有时候会导致比较麻烦的问题.
比如我先下载了一个nginx镜像,然后得到其id,使用docker inspect可以看到其默认有NGINX_VERSION,NJS_VERSION两个环境变量.
docker pull nginx docker images|grep nginx docker inspect 881bd08c0b08
我们可以使用docker-copyedit工具来解决这个问题.
0x01 下载docker-copyedit工具
docker-copyedit的地址为https://github.com/gdraheim/docker-copyedit,使用下面的命令即可下载.在其主页有命令的详细用法,大家可以仔细看下.
git clone https://github.com/gdraheim/docker-copyedit.git
其支持的命令行参数如下.其中commands命令的语法比较特殊,需要仔细看下文档的写法.
0x02 使用docker-copyedit工具删除镜像中不需要的环境变量
使用下面的命令来删除镜像中不需要的环境变量.命令的输出也给出了新的镜像id
./docker-copyedit.py from docker.io/nginx into fc.cxy.com/nginx:1.0 -vv -k rm env NGINX_VERSION and rm env NJS_VERSION
使用docker images确定一下.
对新的镜像docker inspect一下,发现确实没有了.
0x03 可以使用docker-copyedit来删除不需要的VOLUME
如果这个镜像现在有一个/data的volume,那么可以使用 remove volume /data接着进行删除.大家可以自己试下.
docker-copyedit是怎么工作的?
在工具的主页文档里面介绍了这个工具是怎么工作的,大家可以看下.而且docker-copyedit.py的源代码不长,读一下源代码就能弄清楚其逻辑.
工具主要使用了docker save和docker load命令. docker save可以将一个镜像打包成一个tar文件,文件里面包含每层的数据,每层的元数据,以及镜像自己的元数据.如下可以看到这个原始的镜像有3层.
docker save 881bd08c0b08 > /tmp/nginx.tar
tar tvf /tmp/nginx.tar
使用如下的命令可以看到三层数据的具体信息和镜像自己元数据所在的json文件.
tar xvf /tmp/nginx.tar -C /tmp/manifest.json jq . /tmp/manifest.json
使用如下命令可以看到镜像的元数据.
tar xvf /tmp/nginx.tar -C /tmp/ 881bd08c0b08234bd19136957f15e4301097f4646c1e700f7fea26e41fc40069.json jq . /tmp/881bd08c0b08234bd19136957f15e4301097f4646c1e700f7fea26e41fc40069.json
这个信息和docker inspect的是相同.
docker-copyedit的整体工作流程如下:
- 将这个tar文件解压出来的内容全部复制到另外一个目录
- 修改manifast.json文件的内容,让镜像的元数据使用另外一个json文件(这儿使用了hashlib.sha256()来生成新的镜像id)
- 直接根据输入的commands来更改新的json文件内容,比如上面例子就是把Env列表中的两个nginx相关的key删除了.
- 使用tar命令把目录压缩回去,得到新镜像的tar文件
- 使用docker load将新镜像导入
- 使用docker tag给新镜像打上tag
大家如果在使用docker的过程遇到过这个问题,可以尝试用这个工具.如果有其他的方法解决这个问题,欢迎留言讨论.
猜你喜欢
- 2024-10-14 Docker 安装 Nginx 容器 (完整详细版)
- 2024-10-14 Nginx日志切割方法(包含docker容器中nginx日志的切割)
- 2024-10-14 k8s删除pod时报错(k8s强制删除pod不重启)
- 2024-10-03 【NGINX】隐藏和伪装Nginx和PHP版本号
- 2024-10-03 使用Docker部署Nginx(docker-compose部署nginx)
- 2024-10-03 centos7-nginx 日志手动或定时清理
- 2024-10-03 企业网站维护教程:宝塔网站安装失败,Nginx报错的解决方法
- 2024-10-03 删除windows服务(window删除服务命令)
- 2024-10-03 我是如何使用docker安装nginx并配置https服务的
- 2024-10-03 解决镜像无法删除的问题(镜像文件不存在怎么办)
你 发表评论:
欢迎- 最近发表
-
- 阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
- Java 在Word中合并单元格时删除重复值
- 解压缩软件哪个好用?4款大多数人常用的软件~
- Hadoop高可用集群搭建及API调用(hadoop3高可用)
- lombok注解@Data没有toString和getter、setter问题
- Apache Felix介绍(apache fineract)
- Spring Boot官方推荐的Docker镜像编译方式-分层jar包
- Gradle 使用手册(gradle详细教程)
- 字节二面:为什么SpringBoot的 jar可以直接运行?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)