如何修改docker官方镜像内部内容并重新build镜像

 更新时间:2024年08月08日 17:12:28   作者:大王我亲自来巡山  
这篇文章主要介绍了如何修改docker官方镜像内部内容并重新build镜像问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

应用场景

在某些情况下,我们可能需要修改官方的docker镜像,不过,首先需要搞明白,镜像:image 和容器:container 的区别:

  • 镜像image:类似于java中的类
  • 容器container:类似于java中的对象

因此,我们往往从docker hub下载官方镜像,然后,把镜像部署到服务器,然后,我们真正用到该服务的时候,往往是根据该镜像生成一个容器,然后运行容器。

和java中类和对象的概念很像,镜像就是类,根据类生成对象后,真正使用的是对象,对应docker就是容器。

修改官方docker镜像

首先,明白了前面关于镜像和容器的概念,我们就会明白,我们需要修改的是镜像,如果我们只是在容器运行时做改动,则不会影响到镜像。

下面就以我的一个例子来详细说一下:

我的需求是更新matomo镜像中的Apache http server版本

1.下载镜像

首先,下载镜像,可以从docker hub或者从自己的服务器下载。

我本来想着,既然更新的是matomo中的Apache http server版本,那我直接把matomo更新到最新不就好了?

可惜,结果不如我所想,最新的matomo中,Apache仍然版本过低,所以,只能修改官方镜像了

2.启动容器

查找所有镜像:

docker images

找到你需要修改的镜像,保存下镜像id

然后,进入你要修改的镜像(其实就是运行该镜像的容器):

docker run -it ‘镜像id' /bin/sh

此时,你会进入容器内部的shell命令行,其实就是一个微型的Linux系统,然后就可以用Linux命令操作该容器,我在这里是升级了Apache版本:

你可以在这里做你需要的改动

apt-get update //获取更新信息
apt-get upgrade //更新版本

如果发生以下错误

$ apt-get update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/

说明权限问题,有可能你不知道密码,所以,此时,保持当前窗口中容器的运行,不要动,再打开一个终端。

在新的终端中,输入

docker ps -a

根据镜像id,找到你在另一个终端中正在运行的容器

注意:

为什么要挂着另一个终端,就是因为,有的容器如果退出,就找不到容器id了,下面的命令需要用到容器id

docker exec -u root -it <container_id> /bin/bash

此时就通过管理员账户登陆进了容器,然后在依次执行上述的apt-get update和apt-get upgrade就行了

3.生成新镜像

  • 修改后,先执行exit退出容器
  • 然后查找刚才运行的容器信息:
docker ps -a

用docker commit命令从容器打包成镜像:

其中,备注和作者其实不重要,随便写,容器id就是你在上一步查找容器信息时获取的容器id,找你刚才修改的容器,镜像repository就是你打包生成的新镜像的repository

docker commit -m “备注” -a “作者” 容器id 镜像repository

最后,再次docker images就能看到你刚刚生成的新镜像了

最后加个小功能,如何修改镜像的tag:

docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker Compose网络配置指南分享

    Docker Compose网络配置指南分享

    本文详细介绍了Docker网络配置的各个方面,包括基础网络架构、自定义网络配置、典型场景配置、高级网络技巧、调试与诊断以及最佳实践,通过多个实战案例和常见问题解决方案,帮助读者更好地理解和应用Docker网络技术
    2025-11-11
  • docker搭建Jenkins以及基本使用图文教程

    docker搭建Jenkins以及基本使用图文教程

    Jenkins是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目,这篇文章主要给大家介绍了关于docker搭建Jenkins以及基本使用的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • 使用docker compose一键部署WordPress博客的方法

    使用docker compose一键部署WordPress博客的方法

    这篇文章主要介绍了docker-compose一键部署WordPress博客,本文分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Docker 镜像源配置详细步骤

    Docker 镜像源配置详细步骤

    文章介绍了如何配置Docker镜像源以提高国内拉取镜像的速度,步骤包括找到并编辑配置文件、写入镜像源配置、重启Docker服务等,文章还详细比较了systemctl和service的区别,并提供了验证配置是否成功的命令,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • docker安装部署 onlyoffice的详细过程

    docker安装部署 onlyoffice的详细过程

    本文给大家分享docker安装部署 onlyoffice的详细过程,通过图文并茂实例相结合给大家分享安装Docker Desktop及如何进入BIOS设置CPU的虚拟化,感兴趣的朋友一起看看吧
    2021-06-06
  • Spring Boot Docker打包工具小结

    Spring Boot Docker打包工具小结

    本文对几种常见的Spring Boot Docker打包工具进行了简单总结,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • docker安装使用系列之交叉编译详解

    docker安装使用系列之交叉编译详解

    在x86平台上使用Docker实现跨平台编译ARM端程序,需要安装Docker,拉取包含ARM工具链的镜像,启动QEMU支持,并使用相应的Dockerfile进行构建,构建完成后,可以运行并测试ARM程序,导出所需文件,若在ARM平台运行x86镜像,需使用Rosetta2等工具
    2024-10-10
  • Docker compose up -d与Docker restart的区别

    Docker compose up -d与Docker restart的区别

    本文主要介绍了Docker compose up -d与Docker restart的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Docker无法stop或者rm指定容器问题解决方案

    Docker无法stop或者rm指定容器问题解决方案

    这篇文章主要介绍了Docker无法stop或者rm指定容器问题解决方案,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Docker安装anythingllm流程

    Docker安装anythingllm流程

    该文介绍了如何使用Docker安装并运行anythingllm应用程序,通过挂载两个本地目录(C:\anythingllm\storage和C:\anythingllm\env)到Docker容器中,并在浏览器中访问http://localhost:3001/,即可启动并使用anythingllm,作者分享个人经验,鼓励大家参考并支持脚本之家
    2025-02-02

最新评论