云计算-5-docker commit定制镜像

简介: 镜像是容器的基础,在每次执行docker run的时候都会指定那个镜像作为容器的基础,之前我们的例子中的镜像都是来自镜像仓库(Docker Hub,以后可能会来源于自己的私有仓Harbor),这些镜像有时候可能不满足我们的需求,那么就需要我们定制镜像以达到我们的需要,接下来几章接我们介绍一下如何定制镜像。

云计算-5-docker commit定制镜像


镜像是容器的基础,在每次执行docker run的时候都会指定那个镜像作为容器的基础,之前我们的例子中的镜像都是来自镜像仓库(Docker Hub,以后可能会来源于自己的私有仓Harbor),这些镜像有时候可能不满足我们的需求,那么就需要我们定制镜像以达到我们的需要,接下来几章接我们介绍一下如何定制镜像。



我们以我们之前讲过如何快速的部署nginx为例子,来讲解镜像如何构建

docker run --name mynginx -p 8080:80   -d nginx



执行上面命令后,nginx镜像会启动容器,名字为mynginx,并且映射到了宿主机8080端口上,启动成功以后我们就可以使用浏览器访问nginx服务器。


如果是本地运行Docker,可以直接使用http://localhost:8080,如果是虚拟机或者云服务器,那么将localhost换成对应的IP地址即可。访问结果如下:


fcfea6b65d670907575e0e3ec14a25cf.png

但是如果我们因为工作需要,想将这个页面换成我们需要的页面,例如换成SpribootBoot葵花宝典欢迎你使用Docker的文字,那么我们需要使用docker exec命令进入容器,修改页面内容

#进入容器
docker exec -it mynginx bash  
#修改页面
echo '<h1>welcome My Docker!</h1>' > /usr/share/nginx/html/index.html
#推出容器
exit



我们通过交互式方式进入mynginx容器,执行bash命令,获得一个可以操作的shell。

然后我们将<h1>welcome My Docker!</h1>覆盖/usr/share/nginx/html/index.html原来内容,然后我们刷新浏览器,内容发生改变



ee52e7ccbf8c1a8564b8346215044770.png

查看修改后区别docker diff


我们修改过容器内容以后,实际上就是修改了容器的存储层,我们可以使用命令docker diff mynginx查看具体的改动。

[root@hecs-17222 ~]# docker diff mynginx
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp


保存修改后容器内容,形成镜像


当我们希望将我们修改后的容器保存下来形成容器的时候,可以使用的、docker commit命令将在镜像原有的基础上,加上修修改容器的存储层,构成新的镜像。

docker commit [选项] <容器ID\容器名> [<仓库名>[:<标签>]]


我们使用命令将mynginx容器保存为镜像

docker commit \
    --author "Springboot葵花宝典 <1359282905@qq.cm>" \
    --message "修改nginx默认网页" \
    mynginx \
    mynginx:v2


  • –author:用于表示容器修改的作者
  • –message:距离修改的内容信息



查看修改后 镜像:

docker image ls mynginx


49a3df2aea6f88892665f0b13e1eeab4.png


我们可以使用docker history查看镜像内修改的记录

docker history mynginx:v2



a64c64c24e84902ba7620d42e9391872.png

运行新的容器:

docker run --name mynginx2 -d -p 8081:80 mynginx:v2


docker commit谨慎使用

我们在使用docker commit的时候虽然可以比较直观的理解镜像存储的概念,但是一般在实际环境中我们不使用这个docker commit命令而是使用dockerfile有以下几点原因


如果简单修改,命令简单没有什么,如果要安装软件、编译构建

会有大量的无关内容被添加进来,将会导致镜像极为臃肿。


docker commit是黑箱操作,生成的镜像被称为黑箱镜像,就是说除了制造镜像的人其他人不知道执行过什么命令,怎么生成的镜像,而且如果时间久远的话,制作人也会忘记操作过程,其维护成本过高。


如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!


3aaf1f53697bcd2b44f9970837dea9fd.png




springboot葵花宝典


主要分享JAVA技术,主要包含SpringBoot、SpingCloud、Docker、中间件等技术,以及Github开源项目

目录
相关文章
|
3天前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
119 28
|
17天前
|
缓存 监控 持续交付
|
5天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
58 2
|
7天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
15 1
|
8天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
13天前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
24 1
|
19天前
|
Docker 容器
docker:记录如何在x86架构上构造和使用arm架构的镜像
为了实现国产化适配,需将原x86平台上的Docker镜像转换为适用于ARM平台的镜像。本文介绍了如何配置Docker buildx环境,包括检查Docker版本、安装buildx插件、启用实验性功能及构建多平台镜像的具体步骤。通过这些操作,可以在x86平台上成功构建并运行ARM64镜像,实现跨平台的应用部署。
219 2
|
20天前
|
存储 应用服务中间件 云计算
深入解析:云计算中的容器化技术——Docker实战指南
【10月更文挑战第14天】深入解析:云计算中的容器化技术——Docker实战指南
50 1
|
23天前
|
网络协议 Docker 容器
docker pull命令拉取镜像失败的解决方案
docker pull命令拉取镜像失败的解决方案
522 0
|
24天前
|
Go Docker Python
docker的python与go镜像的制作
docker的python与go镜像的制作
26 1