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镜像

  1. [root@192 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. centos latest 300e315adb2f 3 months ago 209MB

步骤2:下载Tomcat镜像到本地

  1. [root@192 ~]# docker pull tomcat:9.0
  2. 9.0: Pulling from library/tomcat
  3. b9a857cbf04d: Pull complete
  4. d557ee20540b: Pull complete
  5. 3b9ca4f00c2e: Pull complete
  6. 667fd949ed93: Pull complete
  7. 661d3b55f657: Pull complete
  8. 511ef4338a0b: Pull complete
  9. a56db448fefe: Pull complete
  10. 00612a99c7dc: Pull complete
  11. 326f9601c512: Pull complete
  12. c547db74f1e1: Pull complete
  13. Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
  14. Status: Downloaded newer image for tomcat:9.0
  15. docker.io/library/tomcat:9.0
  16. [root@192 ~]# docker images
  17. REPOSITORY TAG IMAGE ID CREATED SIZE
  18. tomcat 9.0 040bdb29ab37 2 months ago 649MB
  19. 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容器,进行修改。

  1. # 进入Tomcat容器中
  2. [root@192 ~]# docker exec -it tomcat123 /bin/bash
  3. root@d60ed0bff852:/usr/local/tomcat#
  4. # webapps.dist目录中的内容,全部拷贝到webapps目录中。
  5. root@d60ed0bff852:/usr/local/tomcat# cp -r webapps.dist/* webapps
  6. root@d60ed0bff852:/usr/local/tomcat# ls -l webapps
  7. total 4
  8. drwxr-xr-x. 3 root root 223 Mar 18 05:02 ROOT
  9. drwxr-xr-x. 15 root root 4096 Mar 18 05:02 docs
  10. drwxr-xr-x. 7 root root 99 Mar 18 05:02 examples
  11. drwxr-xr-x. 6 root root 79 Mar 18 05:02 host-manager
  12. drwxr-xr-x. 6 root root 114 Mar 18 05:02 manager

说明:

因为发现默认Tomcat的webapps目录中是没有应用,这是镜像的原因,官方的镜像默认webapps下面是没有文件的。

所以通过上面的操作,当我们启动Tomcat镜像的时候,就可以访问到Tomcat的欢迎界面了。(具体可看前面的Docker安装Tomcat容器的练习)

步骤5:提交镜像

将我们操作过的Tomcat容器通过commit提交为一个新的镜像,我们以后就使用我们修改过的镜像即可。

命令如下:

  1. docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

示例:

  1. # 退出Tomcat容器
  2. root@d60ed0bff852:/usr/local/tomcat# exit
  3. exit
  4. # 执行docker commit 提交生成新的tomcat镜像
  5. [root@192 ~]# docker commit -m="add webapps App" -a="sunwukong" d60ed0bff852 tomcat123:1.0
  6. sha256:e42c33552c6c3df7587f254803a0c1b4a686ff78d9f5e28aed0a94a3c91b22a4
  7. [root@192 ~]#
  8. # 查看本地Docker镜像
  9. [root@192 ~]# docker images
  10. REPOSITORY TAG IMAGE ID CREATED SIZE
  11. tomcat123 1.0 e42c33552c6c About a minute ago 653MB
  12. tomcat 9.0 040bdb29ab37 2 months ago 649MB
  13. 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操作的更多相关文章

  1. 『现学现忘』Docker基础 — 9、Docker简介

    目录 1.什么是Docker? 2.Docker的出现解决了什么问题? 3.Docker的特别之处 4.Docker相关网站 1.什么是Docker? 2010年dotCloud公司在旧金山成立,PA ...

  2. 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理

    目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...

  3. 『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷

    目录 1.简单了解一下DockerFile 2.通过DockerFile的方式挂载数据卷 (1)创建DockerFile文件 (2)编辑Dockerfile文件 (3)构建Dokcer镜像 (4)启动 ...

  4. 『现学现忘』Docker基础 — 34、DockerFile文件详解

    目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...

  5. 『现学现忘』Docker基础 — 35、实战:自定义CentOS镜像

    目录 1.前提说明 2.编写Dockerfile文件 3.构建镜像 4.运行镜像 5.列出镜像的变更历史 1)目标:自定义镜像wokong_centos. 2)所用到的保留字指令: FROM:基础镜像 ...

  6. 『现学现忘』Docker基础 — 10、Docker的安装

    目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...

  7. 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令

    目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...

  8. 『现学现忘』Docker基础 — 31、实现MySQL同步数据

    目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...

  9. 『现学现忘』Docker基础 — 40、发布镜像到Docker Hub

    目录 1.准备工作 2.Docker登陆命令 3.Docker提交命令 4.总结: 5.补充:docker tag命令 1.准备工作 Docker Hub地址:https://hub.docker.c ...

随机推荐

  1. Zabbix企业级开源监控解决方案

    Zabbix企业级开源监控解决方案 目录 Zabbix企业级开源监控解决方案 一.Zabbix 1. 监控系统的必要性 2. 监控软件的作用 3. Zabbix的定义 4. Zabbix的监控原理 5 ...

  2. 问题描述 ens33 不见了

    事情是这样紫的 我今天用Xshell 连接Linux 发现连接不上去百思不得其解,然后就去Linux里看 ifconfig 的配置,然后发现 ens33居然不见了,就只有lo 和 virbr()  , ...

  3. 使用rsync+inotify实现/www目录实时同步

    一.实现bak-server 1.1安装rsync # yum -y install rsync 1.2修改配置文件 # vi /etc/rsyncd.conf #添加下面内容 uid=test gi ...

  4. Solution -「LOJ #138」「模板」类欧几里得算法

    \(\mathcal{Description}\)   Link.   \(T\) 组询问,每次给出 \(n,a,b,c,k_1,k_2\),求 \[\sum_{x=0}^nx^{k_1}\left\ ...

  5. Solution -「HNOI 2009」「洛谷 P4727」图的同构计数

    \(\mathcal{Description}\)   Link.   求含 \(n\) 个点的无标号简单无向图的个数,答案模 \(997\). \(\mathcal{Solution}\)   首先 ...

  6. JVM调优——JVM监控工具jvisualvm的使用及GC插件安装

    一.前言 在高并发的场景下,我们网站的的访问性能会降低,我们怎么优化,这是个问题!天天听JVM调优,实际上还是不知道怎么调优,调优也是看着网上说的修改一下JVM的堆的空间等等进行的.实际上我们应该在压 ...

  7. Vue脚手架报错 Component name "Student" should always be multi-word vue/multi-word-component-names

    报错信息分析: 新手在第一个次使用脚手架的时候难免会遇到各种各样奇怪的问题,最近在学习Vue的过程中就出现了如下问题 通过阅读报错信息可知: 是我们的组件名有一些问题,(报错信息翻译过来大概就是组件名 ...

  8. 我们一起来学Shell - shell的条件判断

    文章目录 Shell 条件测试语法 符号说明 Shell 测试表达式 文件测试表达式 字符串测试表达式 整数操作符 逻辑操作符 测试表达式的区别总结 Shell 条件判断之if语句 单分支 IF 条件 ...

  9. Spring Boot AOP 扫盲,实现接口访问的统一日志记录

    AOP 是 Spring 体系中非常重要的两个概念之一(另外一个是 IoC),今天这篇文章就来带大家通过实战的方式,在编程猫 SpringBoot 项目中使用 AOP 技术为 controller 层 ...

  10. iceberg合并小文件冲突测试

    基于iceberg的master分支的9b6b5e0d2(2022-2-9). 参数说明 1.PARTIAL_PROGRESS_ENABLED(partial-progress.enabled) 默认 ...