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 ...
随机推荐
- border-radius IE8兼容处理
根据canisue(http://caniuse.com/#search=border-radius),border-radius兼容性如下图所示: 测试代码: <!DOCTYPE html&g ...
- PHP之流程的控制
在一个公司中,员工肯定会有高层.中层和普通员工的,这样如果在某个公司员工遇到某种问题,需要请假.或者提一些请求的时候,就会需要去申请,申请的时候有的是可以直接和上级申请的,有时比较重要的事情,是 ...
- centos安装python2.7并安装easy_install,pip,ipython
1.安装python 下载python2.7.10 # wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz # tar -z ...
- lsb_release 命令找不到
yum install redhat-lsb -y 参考:http://blog.chinaunix.net/uid-20606164-id-3485376.html
- 利用NSURLSession下载视频,图片,能实现断点续传
首先分析下载资源到本地,就得有URL ,点击btn ,就会解析网络地址,获取数据,就得有进度条控件 NSURLSession类的实现,通过委托代理模式去实现一些方法,需遵守<NSURLSessi ...
- 老李分享:DBA
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- 老李分享:为何要使用 Web Services
老李分享:为何要使用 Web Services poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询q ...
- ajax 大洋与小样的第二步
一.Ajax的对象 XMLHttpRequest的方法 方法 描述 abort() 停止当前请求 getAllResponseHeaders() 把 HTTP请求的所有响应首部作为健/值对返回 get ...
- Redis数据类型之字符串String
String类型是Redis中最基本也最简单的一种数据类型 首先演示一些常用的命令 一.SET key value 和GET key SET key value 和 GET key 设置键值和获取值 ...
- css 实现旋转八卦图
虽然这不算什么亮点,不过也可以供路上的小伙伴学习下 直接上干货: <!doctype html> <html lang="en"> <head> ...