『现学现忘』Docker基础 — 27、Docker镜像的commit操作
1、commit命令作用
在运行的容器中,并在镜像的基础上做了一些修改,我们希望保存起来,封装成一个新的镜像,方便我们以后使用,也就是提交容器副本,使之成为一个新的镜像。
即:docker commit,从容器创建一个新的镜像。
例如:
我们以Tomcat镜像为例,运行启动Tomcat镜像后得到Tomcat容器,我们在Tomcat容器中做了一些自定义的设计或者修改,使此时的Tomcat容器成为符合我们需求的容器,之后就可以通过docker commit命令提交生成一个新的Tomcat镜像,也就是生成一个符合我们使用需求的Tomcat镜像,再下次在使用Tomcat容器时,直接使用我们自定义的新Tomcat镜像即可。
2、commit命令说明
命令格式如下:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
OPTIONS说明:
-a:提交的镜像作者;-c:使用Dockerfile指令来创建镜像;-m:提交时的说明文字;-p:在commit时,将容器暂停。
3、示例演示
我们通过示例加深对镜像操作和理解。
步骤1:查看本地Docker镜像
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 3 months ago 209MB
步骤2:下载Tomcat镜像到本地
[root@192 ~]# docker pull tomcat:9.0
9.0: Pulling from library/tomcat
b9a857cbf04d: Pull complete
d557ee20540b: Pull complete
3b9ca4f00c2e: Pull complete
667fd949ed93: Pull complete
661d3b55f657: Pull complete
511ef4338a0b: Pull complete
a56db448fefe: Pull complete
00612a99c7dc: Pull complete
326f9601c512: Pull complete
c547db74f1e1: Pull complete
Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 040bdb29ab37 2 months ago 649MB
centos latest 300e315adb2f 3 months ago 209MB
步骤3:启动容器
执行命令:docker run -it --name tomcat123 -p 8888:8080 tomcat:9.0(注意该命令最后不要加/bin/bash)
(-p用法可以看前面的Docker安装Tomcat容器的练习)
如下图:

提示:-P大P的用法如下:

也可以执行命令:docker run -d -p 6666: 8080 tomcat:9.0,进行Tomcat容器的后台启动。
步骤4:对Tomcat镜像进行修改
把Tomcat中webapps.dist目录中的内容,全部拷贝到webapps目录中。
我们在XShell中新建一个窗口,进入Tomcat容器,进行修改。
# 进入Tomcat容器中
[root@192 ~]# docker exec -it tomcat123 /bin/bash
root@d60ed0bff852:/usr/local/tomcat#
# webapps.dist目录中的内容,全部拷贝到webapps目录中。
root@d60ed0bff852:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@d60ed0bff852:/usr/local/tomcat# ls -l webapps
total 4
drwxr-xr-x. 3 root root 223 Mar 18 05:02 ROOT
drwxr-xr-x. 15 root root 4096 Mar 18 05:02 docs
drwxr-xr-x. 7 root root 99 Mar 18 05:02 examples
drwxr-xr-x. 6 root root 79 Mar 18 05:02 host-manager
drwxr-xr-x. 6 root root 114 Mar 18 05:02 manager
说明:
因为发现默认Tomcat的
webapps目录中是没有应用,这是镜像的原因,官方的镜像默认webapps下面是没有文件的。所以通过上面的操作,当我们启动Tomcat镜像的时候,就可以访问到Tomcat的欢迎界面了。(具体可看前面的Docker安装Tomcat容器的练习)
步骤5:提交镜像
将我们操作过的Tomcat容器通过commit提交为一个新的镜像,我们以后就使用我们修改过的镜像即可。
命令如下:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
示例:
# 退出Tomcat容器
root@d60ed0bff852:/usr/local/tomcat# exit
exit
# 执行docker commit 提交生成新的tomcat镜像
[root@192 ~]# docker commit -m="add webapps App" -a="sunwukong" d60ed0bff852 tomcat123:1.0
sha256:e42c33552c6c3df7587f254803a0c1b4a686ff78d9f5e28aed0a94a3c91b22a4
[root@192 ~]#
# 查看本地Docker镜像
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat123 1.0 e42c33552c6c About a minute ago 653MB
tomcat 9.0 040bdb29ab37 2 months ago 649MB
centos latest 300e315adb2f 3 months ago 209MB
我们可以看到本地Docker镜像多可以一个tomcat123镜像,且是1.0版本。
也可以发现tomcat123镜像的大小为653MB,比原先的Tomcat镜像649MB多了几兆。
提示:
docker commit -m="add webapps App" -a="sunwukong" d60ed0bff852 tomcat123:1.0命令的最后
tomcat123:1.0为自定义的镜像名和版本,也可以在前面加入Namespace的,也就如abc/tomcat123:1.0,这个abc就叫Namespace。你就可以想象于Java中,类前面的包名。我们拉取镜像的时候也经常会看到一些这样命名的包,如用到过的portainer/portainer工具。关于Namespace命名空间,以后会详细讲解。
步骤6:启动自定义的Tomcat镜像
执行命令:docker run -it -p 8888:8080 tomcat123:1.0
这里提示一下,如果需要让外部访问容器的服务,一定要进行端口映射。
直接在外部浏览器中访问,如下:

可以直接显示Tomcat服务的欢迎界面。
到了这里大概才算是入门Dokcer!
『现学现忘』Docker基础 — 27、Docker镜像的commit操作的更多相关文章
- 『现学现忘』Docker基础 — 9、Docker简介
目录 1.什么是Docker? 2.Docker的出现解决了什么问题? 3.Docker的特别之处 4.Docker相关网站 1.什么是Docker? 2010年dotCloud公司在旧金山成立,PA ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...
- 『现学现忘』Docker基础 — 34、DockerFile文件详解
目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...
- 『现学现忘』Docker基础 — 35、实战:自定义CentOS镜像
目录 1.前提说明 2.编写Dockerfile文件 3.构建镜像 4.运行镜像 5.列出镜像的变更历史 1)目标:自定义镜像wokong_centos. 2)所用到的保留字指令: FROM:基础镜像 ...
- 『现学现忘』Docker基础 — 10、Docker的安装
目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...
- 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...
- 『现学现忘』Docker基础 — 31、实现MySQL同步数据
目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...
- 『现学现忘』Docker基础 — 40、发布镜像到Docker Hub
目录 1.准备工作 2.Docker登陆命令 3.Docker提交命令 4.总结: 5.补充:docker tag命令 1.准备工作 Docker Hub地址:https://hub.docker.c ...
随机推荐
- 在VMware上安装Linux虚拟机
1.新建虚拟机 2.选择典型安装 3.点击稍后安装操作系统 4.选择类型和版本 5.选择一个英文路径 6. 7.调整硬件 8. 9. 10.选择第一项 11.选择中文 12.选择最小安装 13. 14 ...
- Solution -「CF 1392G」Omkar and Pies
\(\mathcal{Description}\) Link. 给定两个长度为 \(K\) 的 \(01\) 串 \(S,T\) 和 \(n\) 组操作 \((a_i,b_i)\),意义为交换 ...
- Filter(过滤器)与Listener(监听器)详解
11.Filter(重点) Filter:过滤器,用来过滤网站的数据: 处理中文乱码 登陆验证... Filter开发步骤: 导包 编写过滤器 导包不要错 实现Filter接口,重写对应的方法即可 p ...
- .NET官方封装的Win32API类库
大部分朋友在使用C#.NET调用Win32API时都不清楚API函数的声明,要么就是抄网上的代码,但是总会遇到各种各样奇奇怪怪难以解决的问题,打算自己封装又发现工作量实在太大. 其实完全没有必要自己动 ...
- 花里胡哨之自定义linux终端前缀显示
文章目录 1.先看默认的linux终端前缀 2.查看默认的终端前缀变量 3.符号所代表的意义 4.修改PS1变量,达成自定义效果 4.1.只显示主机名和完整目录 4.2.给他点颜色看看 5.谢幕 1. ...
- Vue2.0源码学习(2) - 数据和模板的渲染(下)
vm._render是怎么实现的 上述updateComponent方法调用是运行了一个函数: // src\core\instance\lifecycle.js updateComponent = ...
- Nginx安装启用
安装版本为1.17.8. 1.安装Nginx依赖, pcre. openssl. gcc. zlib(推荐使⽤yum源⾃动安装) yum -y install gcc zlib zlib-devel ...
- React 也就这样 01——React 元素的创建和渲染
React 是一个用于构建用户界面的 JavaScript 库 它包括两个库:react.js 和 react-dom.js react.js:React 的核心库,提供了 React.js 的核心功 ...
- Vue 源码解读(3)—— 响应式原理
前言 上一篇文章 Vue 源码解读(2)-- Vue 初始化过程 详细讲解了 Vue 的初始化过程,明白了 new Vue(options) 都做了什么,其中关于 数据响应式 的实现用一句话简单的带过 ...
- VS2019配置eigen
本文讲述如何在VS2019中配置eigen eigen版本:eigen-3.3.9 百度网盘地址:https://pan.baidu.com/s/1Bu5A58qV2n8doDs4NpPfJQ 提取 ...