Docker - 生成镜像
利用docker commit命令生成镜像
Docker镜像是多层存储,每一层是在前一层的基础上进行的修改。而容器是镜像为基础层的多层存储。
如果不使用数据卷,运行一个容器的时候,对任何文件的修改都会被记录于容器存储层。
docker commit 命令可以将容器存储层保存下来成为镜像。也就将原有镜像的基础层和容器存储层,并构成包含原有容器最后的文件变化的新镜像。
但在实际环境中,推荐使用Dockerfile来完成定制镜像,而不是使用docker commit 命令。
原因如下:
- 大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。
- 使用 docker commit命令生成的是黑箱镜像,除了制作镜像的作者清楚具体的改动,他人只能通过docker diff命令获取很少的线索,难以维护。
示例:
[root@CentOS-7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/ubuntu latest 6a2f32de169d 6 days ago 117.2 MB
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker run --name TestCommitImages -d -it ubuntu bash
ca9cb66a39ca0271149fadce05523d41488a5c047196de510fe54c0f26a46b25
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca9cb66a39ca ubuntu "bash" 4 seconds ago Up 2 seconds TestCommitImages
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker exec -it TestCommitImages bash
root@ca9cb66a39ca:/# echo "this is a test !" >> testcommit.log
root@ca9cb66a39ca:/# ls -l testcommit.log
-rw-r--r-- 1 root root 17 Apr 19 03:04 testcommit.log
root@ca9cb66a39ca:/# cat testcommit.log
this is a test !
root@ca9cb66a39ca:/# exit
exit
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker diff TestCommitImages
C /run
A /run/secrets
C /root
A /root/.bash_history
A /testcommit.log
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker commit --author "anliven" --message "touch new file" TestCommitImages ubuntu:commit
sha256:87575bc0c80f7dd9230072626a31cdeea5c6163e70b559f5432eaac881bd2376
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu commit 87575bc0c80f 36 seconds ago 117.2 MB
docker.io/ubuntu latest 6a2f32de169d 6 days ago 117.2 MB
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker history ubuntu:commit
IMAGE CREATED CREATED BY SIZE COMMENT
87575bc0c80f 9 minutes ago bash 106 B touch new file
6a2f32de169d 6 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 6 days ago /bin/sh -c mkdir -p /run/systemd && echo 'doc 7 B
<missing> 6 days ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 2.759 kB
<missing> 6 days ago /bin/sh -c rm -rf /var/lib/apt/lists/* 0 B
<missing> 6 days ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 745 B
<missing> 6 days ago /bin/sh -c #(nop) ADD file:b8a2c16d65e533a2bc 117.2 MB
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker run --name NewImages -it ubuntu:commit bash
root@cfa4b8cf7d2c:/# ls -l testcommit.log
-rw-r--r-- 1 root root 17 Apr 19 03:04 testcommit.log
root@cfa4b8cf7d2c:/# cat testcommit.log
this is a test !
root@cfa4b8cf7d2c:/# exit
exit
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cfa4b8cf7d2c ubuntu:commit "bash" 2 hours ago Exited (0) 6 seconds ago NewImages
ca9cb66a39ca ubuntu "bash" 2 hours ago Up 2 hours TestCommitImages
[root@CentOS-7 ~]#
[root@CentOS-7 ~]# docker logs NewImages
root@cfa4b8cf7d2c:/# ls -l testcommit.log
-rw-r--r-- 1 root root 17 Apr 19 03:04 testcommit.log
root@cfa4b8cf7d2c:/# cat testcommit.log
this is a test !
root@cfa4b8cf7d2c:/# exit
exit
[root@CentOS-7 ~]#
Docker - 生成镜像的更多相关文章
- 快速解决docker生成镜像时提示Could not resolve ‘archive.ubuntu.com’问题
今天在其中一台Linux 中使用Docker命令创建镜像时失败,报错提示: Temporary failure resolving ‘archive.ubuntu.com’ 典型的DNS解析问题,尝试 ...
- Docker发布镜像至Docker Hub
第一步:Docker生成镜像 docker@default:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE metal-workbench- ...
- 【docker】将Java jar文件生成镜像、上传镜像并生成镜像压缩文件
概述 将Springboot的web服务打包成Jar包后,自动化脚本将jar打包成镜像.上传镜像.并生成镜像的压缩文件: Dockerfile FROM 10.254.9.21/library/ora ...
- docker 部署 flask(三)高级编写及生成镜像,安装requirements.txt
简介: 上一篇,我写了如何使用别人的docker基础镜像,生成我们的docker镜像. 也就最基本的flask,没有别的库(包)支持.连数据库支持都没有. 也就让大家了解一下怎么生成镜像而已. 本篇介 ...
- Docker技术入门与实战 第二版-学习笔记-4-Dockerfile外其他生成镜像的方法
其它生成镜像的方法 即除了标准地使用Dockerfile来生成镜像外,还有一些其他的方法 1)从 rootfs 压缩包导入 格式:docker import [选项] <文件>|<U ...
- docker 部署 flask(二)编写及生成镜像。
简介: 上一篇文章,我们简单的测试了一下服务器环境和docker基础镜像.并没有涉及我们自己编写的flask python程序. 现在,我们就要把我们自己的flask程序,放进docker镜像. 但是 ...
- docker 生成mysql镜像启动时自动执行sql
文章转载自:https://www.jianshu.com/p/12fc253fa37d 在docker 创建 mysql 容器时,往往需要在创建容器的过程中创建database 实例,代码如下: # ...
- Docker | 使用dockerfile生成镜像,清理docker空间
用dockerfile生成镜像并挂载数据卷 编写dockerfile文件 创建dockerfile01 文件 # 基础镜像 FROM centos VOLUME ["volume01&quo ...
- Docker:镜像操作和容器操作
镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...
随机推荐
- pyqt样式表语法笔记(下)--原创
pyqt样式表语法笔记(下) python 启动界面 QSS pyqt 一.启动界面的设置 简单点~说话的方式简单点用一张静态图片作为程序启动界面为例. 原来的语句 python 7行 ...
- Kruskal算法的实现
#include "stdio.h" #include "stdlib.h" struct edge { int m; int n; int d; }a[]; ...
- 小程序新能力-个人开发者尝鲜微信小程序
个人开发者的福利 微信小程序,刚听到这个新名词的时候,我就兴冲冲的去找入口,看看自己能不能搞个微信小程序的HelloWorld,毕竟能在微信上把自己写的一些小工具跑起来还是满炫酷的. 没想,网上一查, ...
- 测试开发Python培训:抓取新浪微博抓取数据-技术篇
测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的se ...
- 《JavaScript程序设计》第2课:JS类型系统
JS类型系统可以分为标准类型和对象类型,进一步标准类型又可以分为原始类型和引用类型,而对象类型又可以分为内置对象类型.普通对象类型.自定义对象类型. 1. 标准类型 标准类型共包括了6个分别是:und ...
- iOS 从url中获取文件名以及后缀
//这里有一个模拟器沙盒路径(完整路径) NSString* index=@"/Users/junzoo/Library/Application Support/iPhone Simulat ...
- java nio(一)buffer
概述 常见的网络io分为两种情况,BIO(block-io)和NIO(non-block-io),分别位于java.io和java.nio. BIO,是阻塞的io,采用一个线程处理一个连接的方式,就算 ...
- redis object 对象系统
redis object对象系统 概述 redis 当中, sds字符串, adlist双向链表, dict字典, ziplist压缩链表, intset整数集合等均为底层数据结构 redis 并没有 ...
- LVS+Keepalived实现DBProxy的高可用
背景 在上一篇文章美团点评DBProxy读写分离使用说明实现了读写分离,但在最后提了二个问题:一是代理不管MySQL主从的复制状态,二是DBProxy本身是一个单点的存在.对于第一个可以通过自己定义的 ...
- Web层框架对网站中所有异常的统一解决
一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常. 之前都是 ...