正文

使用过docker的都知道dockerfile,其用于定义制作镜像的流程,由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。可参考往期文章学习:docker基础知识整理

有时候,我们想在原有镜像基础上修改、增加文件,由于国内网络原因,重新制作镜像会很慢,甚至失败;或者根本不知道镜像的dockerfile长什么样。改动很小情况下,可以用以下方式制作镜像。

拿k8s负载均衡器组件ingress-nginx:0.24.1版本为例:



如果我们修改了其源码,并编译生成nginx-ingress-controller二进制文件,可以用以下方式进行制作新镜像。

首先用命令:

docker run -ti --rm k8s-deploy/nginx-ingress-controller:0.24.1 bash

将镜像运行起来。其中-ti表示打开一个交互输入终端;--rm表示运行停止后自动清理。

运行后可以看到默认用户为www-data,a298fe62a4f9表示容器id

我们可以在容器里创建目录:

重新打开一个shell窗口,用于给容器内复制一个测试文件:

docker cp ingressgroup-upstream.tmpl a298fe62a4f9:/etc/nginx/conf.d/include-server-map/

复制进去后,当要将其移动到其他位置时,报Permission denied权限不足,因为默认为www-data用户,复制到容器内的ingressgroup-upstream.tmpl属主:属组也是root,如果不把root修改为www-data,肯定会报没权限的错。

通过以下命令重新运行镜像:

docker run -ti --rm -u 0 k8s-deploy/nginx-ingress-controller:0.24.1 bash

-u 0代表用root用户运行容器,而不是dockerfile里指定的用户,这样运行后可以看到用户为root,记录容器id:ffdc80f3cce7

重新执行复制操作:

此时就可以随意移动和修改文件的权限、属组、属主了。

修改完毕后,执行以下命令将镜像commit到本地仓库:

docker commit ffdc80f3cce7 k8s-deploy/nginx-ingress-controller:0.24.1-temp

commit后跟的是容器id,最后跟的是新镜像名称。push命令将新镜像推到远程harbor仓库。

运行新制作的镜像,可以看到我们修改的文件。

这种方式一般用于测试,弊端是可能会导致镜像越来越大。



本公众号免费提供csdn下载服务,海量IT学习资源,如果你准备入IT坑,励志成为优秀的程序猿,那么这些资源很适合你,包括但不限于java、go、python、springcloud、elk、嵌入式 、大数据、面试资料、前端 等资源。同时我们组建了一个技术交流群,里面有很多大佬,会不定时分享技术文章,如果你想来一起学习提高,可以公众号后台回复【2】,免费邀请加技术交流群互相学习提高,会不定期分享编程IT相关资源。


扫码关注,精彩内容第一时间推给你

docker镜像制作必备技能的更多相关文章

  1. MySQL、MongoDB、Redis数据库Docker镜像制作

    MySQL.MongoDB.Redis数据库Docker镜像制作 在多台主机上进行数据库部署时,如果使用传统的MySQL的交互式的安装方式将会重复很多遍.如果做成镜像,那么我们只需要make once ...

  2. docker研究-4 docker镜像制作

    这次实验以centos镜像为基础镜像进行相关docker镜像制作. 1. 下载centos镜像 [root@localhost ~]# docker pull centosUsing default ...

  3. 《Docekr入门学习篇》——Docker镜像制作

    Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...

  4. Docker 镜像制作教程:针对不同语言的精简策略

    本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...

  5. doris 0.9.0版本docker镜像制作与使用

    1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1  Dockerfi ...

  6. Nginx+PHP7.3.9 Docker镜像制作

    最近因项目需要制作了多个版本的php docker镜像,制作过程可谓是一波三折,因基于yum的方式安装php的方式在安装扩展插件时很不方便,不容易找到插件对应的yum源,所以PHP在docker镜像中 ...

  7. presto-gateway 试用以及docker 镜像制作

    presto-gateway 是 lyft 团队开源 的prestodb 的工具.以下是一个简单的试用,以及碰到问题的解决 还有就是docker 镜像的制作 Dockerfile 很简单,本地构建然后 ...

  8. 实战【docker 镜像制作与使用】

    一.制作docker 镜像 使用spring boot 构建一个简单的web 项目,返回 “Hello,World ”字符串,使用 Maven 打成 jar 包,使用的Linux 环境是 Centos ...

  9. docker镜像制作及发布

    以centos为例. 主要内容:安装docker,制作镜像,发布镜像. 安装docker 1. 安装docker yum install -y docker 等待一会,安装成功,查看安装列表 2. 启 ...

随机推荐

  1. 一起来读Netty In Action之传输(三)

    当我们的应用程序需要接受比预期多很多的并发连接的时候,我们需要从阻塞传输切换到非阻塞传输上去,如果是我们的网络编程是基于jdk提供的API进行开发地的话,这种传输模式的切换几乎要我们重构整个网络传输相 ...

  2. 脱离脚手架来配置、学习 webpack4.x (一)基础搭建项目

    序 现在依旧记得第一次看到webpack3.x 版本配置时候的状态  刚开始看到这些真的是一脸懵.希望这篇文章能帮到刚开始入门的同学. webpack 是什么? webpack是一个模块化打包工具,w ...

  3. (六十五)c#Winform自定义控件-图标字体

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  4. hbase读取快照数据-lzo压缩遇到的问题

    1.读取hbase快照数据时报UnsatisfiedLinkError: no gplcompression in java.library.path错: 2019-09-04 17:36:07,44 ...

  5. 2018阿里前端 - 认真写下阿里的面筋,祝福大家收到满意的offer(前端向)

    作者:叮!阿里offer请查收!链接:https://www.nowcoder.com/discuss/102509来源:牛客网 首先表达一下对阿里面试官的感谢,以及大公司的气魄——没有因为不是科班出 ...

  6. 033 模块4-PyInstaller库的使用

    目录 一.PyInstaller库基本介绍 1.1 PyInstaller库概述 1.2 pip的使用 1.3 pip install pyinstaller (cmd命令行) 二.PyInstall ...

  7. Net基础篇_学习笔记_第十一天_面向对象(关键字new和this)

     new关键字 new:用来创建对象的.Person zsPerson=new Person();new帮助我们做了3件事儿:1).在内存中开辟一块空间2).在开辟的空间中创建对象3).调用对象的构造 ...

  8. 巨杉Tech | Hbase迁移至SequoiaDB 实战

    背景 在传统银行 IT 架构中,联机交易与统计分析系统往往采用不同的技术与物理设备,通过定期执行的 ETL 将联机交易数据向分析系统中迁移.而作为数据服务资源池,同一份数据可能被不同类型的微服务共享访 ...

  9. fremark遍历出的li怎么加事件(cforeach循环遍历也同样适用)

    遇见这个问题烦了好久好久,网上也没找到答案,琢磨了半天终于找到了方法 1.下面是一个分页信息遍历添加事件,页面跳转 <!-- 分页条信息 --> <div class="c ...

  10. Day 10 用户的提权,用户组的创建删除

    1.如何为用户设定密码,又如何修改密码? 2.用户的创建流程? [扩展了解] 3.用户组如何管理? 4.普通用户无权限怎么办? 切换身份 or 提权? su 切换用户 sudo 提权   5.为用户添 ...