云计算-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开源项目

目录
相关文章
|
16天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
17天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
36 9
|
1月前
|
缓存 Linux 网络安全
docker的镜像无法下载如何解决?
【10月更文挑战第31天】docker的镜像无法下载如何解决?
1517 29
|
17天前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
40 4
|
1月前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
1月前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
145 2
|
1月前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
133 1
|
1月前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
1月前
|
缓存 JavaScript 安全
深入理解Docker镜像构建过程
深入理解Docker镜像构建过程
68 0